结果为: (A)=2AH, (30H)=48H
SWAP A
结果为: (A)=82H
例:若在外部ROM/EPROM中2000H单元开始依次存放0~9的平方值,数据指针
(DPTR)=3A00H,用查表指令取出2003H单元的数据后,要求保持DPTR中的内容不变。完
成以上功能的程序如下:
MOV A, #03H ; (A)←03H, 74 03
PUSH DPH ; C0 83
PUSH DPL ; C0 82
MOV DPTR, #2000H ; (DPTR)←2000H, 90 20 00
MOVC A, @A+DPTR ; (A)←(2000H+03H), 93
POP DPL ; D0 82
POP DPH ; D0 83
执行结果: (A)=09H ,(DPTR)=3A00H。
例: 进入中断服务子程序时, 把程序状态寄存器PSW、 累加器A、 数据指针DPTR进
栈保护。设当前SP为60H。则程序段
PUSH PSW
PUSH ACC
PUSH DPL
PUSH DPH
执行后, SP内容修改为 64H, 而61H、62H、63H、64H单元中依次栈入PSW、A、DPL、
DPH的内容。当中断服务程序结束之前, 如下程序段(SP保持 64H不变)
POP DPH
POP DPL
POP ACC
POP PSW
执行之后, SP内容修改为 60H, 而64H、 63H、 62H、 61H单元中的内容依次弹出
到DPH、DPL、A、PSW中。
MCS -51 提供一个向上升的堆栈, 因此SP设置初值时要充分考虑堆栈的深度,
要留出适当的单元空间, 满足堆栈的使用。
例1:双字节无符号数加法(R0 R1)+(R2 R3)→(R4 R5);R0、R2、R4存放16位数的高字
节,R1、R3、R5存放低字节。假设其和不超过16位,其编程如下。
MOV A,R1 ; 取被加数低字节,E9 1E
ADD A,R3 ; 低字节相加,2B RE
MOV R5,A ; 保存和低字节,FD
MOV A,R0 ; 取高字节被加数;E811
ADDC A,R2 ; 两高字节之和加低位进位,
MOV R4,A ; 保存和高字节
八,减法指令影响CY、OV、AC和P标志
CY表示两无符号数相减时,最高位是否有借位产生,若CY=1,表示有借位,CY=0则表示
无借位;
OV表示两个带符号数相减时是否产生溢出,OV=1表示从一个正数中减一个负数得
出一个负数或从一个负数中减去一个正数时得出一个正数的错误情况,和加法类似。该标志