编辑: hgtbkwd | 2016-06-11 |
(四)堆栈操作指令 入栈指令:PUSH n ;
SP?SP+1,(SP)?(n) 出栈指令:POP n ;
(n)?(SP),SP?SP-1 例:设A=02,B=56H,执行下列指令后,SP=A=B= ? , 30H 02H 56H SBR: MOV SP,#30H ;
设栈底 PUSH A PUSH B MOV A,#0 MOV B, #01 … POP B POP A 02H 56H *
(五) 交换指令 实现片内RAM区的数据双向传送. 1. 字节交换指令 XCH A,Rn ;
A ? Rn XCH A,@Ri;
A ?(Ri) XCH A,direct ;
A ?(direct) 例:设A= 29H,执行指令 XCH A,2AH后,A= ?(2AH)= ? 38H 29H * 2. 半字节交换指令 XCHD A,@Ri ;
A0~3 ?((Ri))0~3 SWAP A ;
A4~7 ? A0~3 例:将片内RAM 2AH和2BH单元中的BCD码转换成压缩式BCD码存入20H单元. MOV A,#0 MOV R0,#2AH MOV R1,#2BHXCHD A,@R0SWAP AXCHD A,@R1XCH A,20H * 与数据传送指令不同,多数算术运算指令会影响标志位的状态,即CPU执行算术运算指令后,根据数据操作情况自动设置标志位的状态.MCS-51 的程序状态字寄存器 PSW 为标志寄存器.其格式如下: 3.5算术运算指令 Cy AC F0 RS1 RS0 OV ― P D7 D6 D5 D4 D3 D2 D1 D0 * 标志位(自动设置状态)1)Cy:进位标志位保存运算后最高位的进位/借位状态,当有进位/借位,Cy=1,否则Cy=0.2)AC:辅助进位标志位保存低半字节的进位/借位状态,当D3产生进位/借位, AC=1,否则AC=0.用于十进制调整.3)OV:溢出标志位 OV=Cy7?Cy6,补码运算产生溢出OV=1,否则OV=0.4)P:奇偶标志位反映累加器A中数据的奇偶性.当1的个数为奇数,P=1,否则P=0. * 用户选择位(编程设置状态) 1)F0:用户自定义标志位.2)RS
1、RS0: 工作寄存器区选择位.复位时,PSW=00H 例:复位后,设置使用工作寄存器3区,其余标志位不变. RS1 RS0 工作寄存区
0 0 0区011区
1 0 2区113区 Cy AC F0 RS1 RS0 OV ― P * 3.5.1 加减指令 完成片内 RAM 和A中数据的加减乘除运算. 1.加法指令 1)不带进位加法:ADD A,源操作数 ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data 影响Cy、OV、AC、P * 例:A=3BH,PSW=0,执行指令 ADD A,#3BH求:A=76H ,Cy=
0 ,OV=
0 ,AC=
1 ,P=
1 PSW= 01000001= 41H
0011 1011 +
0011 1011
0111 0110 Cy AC F0 RS1 RS0 OV ― P * 2)带进位加法: ADDC A,源操作数 ADDC A,Rn ADDC A,direct ADDC A,@Ri ADDC A,#data 影响Cy、OV、AC、P 例:A= 9AH,R2= E3H,PSW= 0,执行指令ADDC A,R2 后求:A= 7DH ,Cy=
1 ,OV= 1,AC= 0,P= 0, PSW=
10000100 = 84H
1001 1010
1110 0011
0 1
0111 1101 Cy AC F0 RS1 RS0 OV ― P * ADDS:CLR C MOV A,40HADD A,42HMOV 44H,AMOV A,41HADDC A,43HMOV 45H,AMOV A,#0ADDC A,#0MOV 46H,ARET ;
取被加数低字节;
加上加数低字节;
保存和的低字节;
取被加数高字节;
加上加数高字节;
保存和的高字节;
求高字节进位;
;
保存和的进位;
子程序结束 带进位加法指令ADDC用于多字节运算例:设双字节数 X 存在片内RAM 41H、40H单元,Y存在42H、43H单元,编程求 Z=X+Y,并存入片内RAM单元44H、45H、46H. * 3) BCD调整指令: DAA;
对A中加法结果进行调整 在加法过程中低4位向高4位有进位或累加器A中低4位大于9,则累加器A作加6调整;
若在加法过程中最高位有进位或累加器A中高4位大于9,则累加器A作加60H调整 (即高4位作加6调整)十进制加法指令:ADD A,源操作数DA A 带进位十进制加法指令:ADDC A,源操作数DA A * 例:编制85+59的BCD加法程序,并对其工作过程进行分析. 解:相应BCD加法程序为:MOV A,#85H;
A←85 ADD A,#59H;
A←85+59= 0DEH DA A ;
A←44,Cy=1 * 二进制加法和进制调整过程为:
85 1000
0101 (A) +)
59 0101
1001 data
144 (0)
1101 1110 110;
低4位>