第四章指令系統及汇编语言程序设计 本章学习目标 ◇了解助记符、指令格式 ◇掌握单片机寻址方式 ◇掌握单片机指令系统 ◇掌握单片机汇编语言程序设计及开发环境 204237 3:01:41
3:01:41 第四章 指令系统及汇编语言程序设计 本章学习目标 了解助记符、指令格式 掌握单片机寻址方式 掌握单片机指令系统 掌握单片机汇编语言程序设计及开发环境 3 20:42:37
第四拿指令系统及汇编语言程序设计语合( 4.1编程语言 42指令格式及其分类 43寻址方式 44数据传送类指令 45逻辑操作类指令 4.6算术运算类指令 47位操作指令 48控制类转移指令 49汇编语言程序设计 410汇编语言程序调试 411利用ISP工具将程序下载到单片机中验证程序 204237 3:01:41
3:01:41 第四章 指令系统及汇编语言程序设计语言 4.1 编程语言 4.2 指令格式及其分类 4.3 寻址方式 4.4 数据传送类指令 4.5 逻辑操作类指令 4.6 算术运算类指令 4.7 位操作指令 4.8 控制类转移指令 4.9 汇编语言程序设计 4.10 汇编语言程序调试 4.11利用ISP工具将程序下载到单片机中验证程序 4 20:42:37
§4.6算术运算类指令(24条)8个助记符 该类指令主要完成加、减、乘、除四则运算,以及增量、 减量和二十进制调整操作。除增量、减量指令外,大多 数算术运算指令会影响到状态标志寄存器PSW 表4-3算术运算类指令对标志的影响 指令助记符 影响标志 CY OVAC 备注 ADD(加) ADC(带进位加)×× SUBB(带借位减)Ⅹ× “×”表示可置或清“0 IUL(乘) 0 “0”表示总清“0” DIV(除) 0 空表示不构成影响 DA(二十进制调整) NC DEC 204237 3:01:41
3:01:41 §4.6算术运算类指令 (24条) 指令助记符 影响标志 备注 CY OV AC ADD(加) × × × “×”表示可置1或清“0”, “0”表示总清“0” 空表示不构成影响 ADDC(带进位加) × × × SUBB(带借位减) × × × MUL(乘) 0 × DIV(除) 0 × DA(二十进制调整) × 5 20:42:37 该类指令主要完成加、减、乘、除四则运算,以及增量、 减量和二十进制调整操作。除增量、减量指令外,大多 数算术运算指令会影响到状态标志寄存器PSW。 表4-3 算术运算类指令对标志的影响 INC DEC 8个助记符
4.61加减运算指令(12条) >在加减运算指令中,以累加器A为第一操作数,并存放 操作后的结果。第二操作数可以是立即数、工作寄存 器、寄存器间接寻址字节或直接寻址字节。 运算结果会影响溢出标志OV、进位CY、辅助进位AC 和奇偶标志P。 1、加法指令:(4条) ADd A, #data8 A+A+#data8 ADD A. addr8 A<A+(addr8 ADDA,@Ri;A←A+(Ri) ADd A Rn A←A+Rn 把源字节变量与累加器相加,结果保存在累加器中
3:01:41 4.6.1 加减运算指令 (12条) 7 20:42:37 1、加法指令:(4条) ADD A, #data8 ;A←A+#data8 ADD A, addr8 ;A←A+(addr8) ADD A, @Ri ;A←A+(Ri) ADD A, Rn ;A←A+Rn 把源字节变量与累加器相加, 结果保存在累加器中。 ➢ 在加减运算指令中,以累加器A为第一操作数,并存放 操作后的结果。第二操作数可以是立即数、工作寄存 器、寄存器间接寻址字节或直接寻址字节。 ➢ 运算结果会影响溢出标志OV、进位CY、辅助进位AC 和奇偶标志P
1、加法指令:(4条) ◇例如,MOVA,#C3H ADD A #OAAH 11000011 运算后,CY=1,OV=1,AC=0, +10101010 101101101 A=6DH. PSW=85H 溢出标志Oⅴ取决于带符号数运算,和的第6、 7位中有一位产生进位而另一位不产生进位, 则使Oⅴ置1,否则OV被清0。OV=1产生溢出。 位号D7D6D5D4D3D2D1D0 符号 CY AC FO RS1RsOv|FIP 204237 3:01:41
3:01:41 1、加法指令:(4条) 例如, MOV A, #0C3H ADD A, #0AAH 运算后,CY=1, OV=1, AC=0, A=6DH, PSW=85H 溢出标志OV取决于带符号数运算,和的第6、 7位中有一位产生进位而另一位不产生进位, 则使OV置1,否则OV被清0。OV=1产生溢出。 8 20:42:37 1100 0011 + 1010 1010 10110 1101 位号 D7 D6 D5 D4 D3 D2 D1 D0 符号 CY AC F0 RS1 RS0 OV F1 P 1 0 0 0 0 1 0 1
2、带进位加法指令(4条) ADDC A #data8 AtA+#data 8 +CY ADDC A, addr& ;A+A+(addr8)+CY ADDC A, @Ri ;A+A+(Ri)+CY ADDC A Rn A←A+Rn+CY 除了相加时把进位位也加上外,其他与一般加法指 令完全相同。 10101010 ◇例,设累加器A内容为0AAH, 01010101 R0内容为55H,C内容为1, l1111111 ◇执行指令 ADDC A RO 100000000 运行结果:A=000003,AC=1,CY=1,OV=0 204237 3:01:41
3:01:41 执行指令: ADDC A, R0 运行结果: A=0000 0000B, AC=1,CY=1,OV=0 2、带进位加法指令 (4条) ADDC A, #data8 ;A←A+#data 8 +CY ADDC A, addr8 ;A←A+(addr8) +CY ADDC A, @Ri ;A←A+(Ri) +CY ADDC A, Rn ;A←A+Rn +CY 除了相加时把进位位也加上外,其他与一般加法指 令完全相同。 9 20:42:37 例, 设累加器A内容为0AAH, R0内容为55H, C内容为1, 1010 1010 + 0101 0101 1111 1111 + 1 10000 0000
2、带进位加法指令(4条)低字节高字背( 【例4-4】设双字节加法中,被加数放20H、2IH单元,加 数放30H、31H单元,和存放在40H、41H单元,若高字 节相加有进位则转OVER处执行。试编程实现之。 解:程序代码如下: (21H)(20H) ADDM:MOVA,20H;取低字节被加数+(31H③30H ADDA,30H;低位字节相加41H)(40H MOV40H,A;结果送40H单元 MOVA,2IH;取高字节被加数 ADDC A,3H;加高字节和低位来的进位 MOV41H,A;结果送41H单元 JC OVER;若有进位,则转OⅤER处执行 OVER
3:01:41 2、带进位加法指令(4条) 【例4-4】设双字节加法中,被加数放20H、21H单元,加 数放30H、31H单元,和存放在40H、41H单元,若高字 节相加有进位则转OVER处执行。试编程实现之。 解:程序代码如下: 10 20:42:37 ADDM: MOV A, 20H ;取低字节被加数 ADD A, 30H ;低位字节相加 MOV 40H, A ;结果送40H单元 MOV A, 21H ;取高字节被加数 ADDC A, 31H ;加高字节和低位来的进位 MOV 41H, A ;结果送41H单元 JC OVER ;若有进位,则转OVER处执行 …… OVER: …… 低字节 高字节 (21H) (20H) +(31H) (30H) (41H) (40H)
3、带借位减指令(4条) sUBB A+data8 AtA-#data8-CY SUBB A, addr At-A-(addr8)-CY 00000011 SUBB A, Ri ;A<A-(ri-CY -10000000 SUBB A,Rn;A←-A-Rn-CY 10000011 在加法中,CY=1表示有进位,CY=0表示无进位; 在减法中,CY=1则表示有借位,CY=0表示无借位。 ◇OV=1表示带符号数相减时,从一个正数中减去一个负 数得出了一个负数(如3H80H或从一个负数中减去一 个正数时得出一个正数的错误情况(如80H-2H)。 ◇和加法类似,该标志也是由运算时,差的第6、7位两者借 位状态经异或操作而得。结果超出了符号数的表示范围 ◇因减法只有带借位减一条指令,所以在首次进行单字节 相减时,须先清借位位CY,以免相减后结果出错。 204237 3:01:41
3:01:41 3、带借位减指令(4条) SUBB A, #data8 ;A←A– #data8– CY SUBB A, addr8 ;A←A–(addr8) –CY SUBB A, @Ri ;A←A – (Ri) –CY SUBB A, Rn ;A←A – Rn –CY 在加法中,CY=1表示有进位,CY=0表示无进位; 在减法中,CY=1则表示有借位,CY=0表示无借位。 11 20:42:37 OV=1表示带符号数相减时, 从一个正数中减去一个负 数得出了一个负数(如3H-80H)或从一个负数中减去一 个正数时得出一个正数的错误情况(如80H-2H) 。 和加法类似, 该标志也是由运算时,差的第6、7位两者借 位状态经异或操作而得。 因减法只有带借位减一条指令, 所以在首次进行单字节 相减时, 须先清借位位CY, 以免相减后结果出错。 结果超出了符号数的表示范围 0000 0011 - 1000 0000 1000 0011
3、带借位减指令(4条) ◇例如,设累加器A的内容为D9H,R0的内容为87H, 求两者相减结果。 若是带符号数 DH11011001 27H CLR C 87H-10000111 79H SUBB A RO 01010010 52H 执行结果:A=52H,CY=0,OV=0 若运算两数为无符号数,则其溢出与否和OⅤ状态无 关,而靠CY是否为1予以判别,OV仅表明带符号数运 算时是否溢出。 204237 3:01:41
3:01:41 3、带借位减指令(4条) 例如,设累加器A的内容为D9H,R0的内容为87H, 求两者相减结果。 CLR C SUBB A, R0 执行结果:A=52H,CY=0,OV=0 若运算两数为无符号数,则其溢出与否和OV状态无 关,而靠CY是否为1予以判别,OV仅表明带符号数运 算时是否溢出。 12 20:42:37 1101 1001 – 1000 0111 0101 0010 若是带符号数 -27H -79H 52H D9H - 87H
3、带借位减指令条)低字节高字节 【例45】两字节数相减,设被减数放在20H、21H单元, 减数放在30H、31H单元,差放在40H、41H单元。若 高字节相减有借位则转OVER处执行,试编程实现之。 解:程序代码如下 SUBM:CLRC;低字节减之前借位CY清0 MOVA,20H;被减数送A (21H)(20H) SUBB A,30H;低位字节相减 31(30H) MOV40H,A;结果送40单元(41H)(40H MOVA,21H;被减数高字节送A SUBB A,3IH;高字节相减 MOV41H,A;结果送41H单元 JC OVER;若有借位,则转OER处执行 OVER: 。00●0 204237 3:01:41
3:01:41 3、带借位减指令(4条) 【例4-5】 两字节数相减, 设被减数放在20H、21H单元, 减数放在30H、31H单元, 差放在40H、41H单元。若 高字节相减有借位则转OVER处执行, 试编程实现之。 解:程序代码如下: 13 20:42:37 SUBM: CLR C ;低字节减之前借位CY清0 MOV A, 20H ;被减数送A SUBB A, 30H ;低位字节相减 MOV 40H, A ;结果送40H单元 MOV A, 21H ;被减数高字节送A SUBB A, 31H ;高字节相减 MOV 41H, A ;结果送41H单元 JC OVER ;若有借位, 则转OVER处执行 …… OVER: …… 低字节 高字节 (21H) (20H) - (31H) (30H) (41H) (40H)