汇编指令
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据传送类指令(续)
数据交换指令(5条): XCH A,direct (字节互换) XCH A,@Ri (字节互换) XCH A,Rn (字节互换) (A) (direct)[或((Ri)),或(Rn)] XCHD A,@Ri 累加器 Acc的低4位与((Ri))的低4位互换,各 自的高4位不变 SWAP A 累加器 Acc的低4位与自身的高4位互换
(二)算术运算类指令(续)
加法运算: 带进位加法运算: 带借位减法运算: (ADD——4条) (ADDC——4条) (SUBB——4条)
所有的加法(ADD)、带进位加法(ADDC)、带借位减 法(SUBB)运算都是以 A为一个加数或被减数,最终 结果也存进 A 。 加法(ADD)、带进位加法(ADDC) 以及带借位减法 (SUBB)运算中,如果产生了进位或借位,将自动对 PSW中的Cy标志位置“1‖ 。 带进位加法(ADDC):(A)(A)+(Cy)+(第二操作数) 带借位减法(SUBB):(A)(A)-(Cy)-(第二操作数)
(二)算术运算类指令(续)
加1/减1操作: (INC,DEC——9条) INC, DEC与用加/减法指令做加1/减1 操作不同之 处在于INC、DEC不影响标志位. 单字节乘/除运算: (MUL,DIV——2条) 两个单字节数的乘/除法运算只在A与B之间进行。 MUL AB: (A)与(B)相乘, 积为16位数, (A)积的低8位; (B)积的高8位 DIV AB: (A)除以(B),结果用2字节表示, (A)商的整数部分;(B)余数
数据传送类指令(续)
堆栈操作指令(2条):
PUSH——压栈指令 POP ——弹栈指令 √堆栈区由特殊功能寄存器堆栈指针SP 管理
√堆栈区一般不安排在工作寄存器区和可按位寻 址的RAM区,而是放在RAM区的靠后的位置
√通常PUSH与POP两条指令成对使用
例如:设(A)=7BH;
(35H)=11H
并且知道(SP)=60H PUSH ACC
PUSH POP
POP
35H ACC
35H
例如:设(A)=7BH;
(35H)=11H
;(61H) #7BH ;(62H) (35H) 即:(62H) #11H ;(A) (62H) 即:(A) #11H ;(35H) (61H) 即:(35H) #7BH
并且知道(SP)=60H PUSH PUSH ACC 35H
在实际编程中,“rel” 通常用标号代替
7 位寻址 指令中直接给出了操作数所在的位地址。 例: CLR P1.0 ;(P1.0) ← 0 SETB ACC.7 ;(ACC.7)← 1 CPL C ;( C )← NOT( C )
注意: 有的位地址十分明确,如 P1.0, ACC.7等, 有的位地址则“不太明确”,如: [MOV A,17H ; (A)←(17H),17H是字节地址] MOV ACC.0,17H ;(ACC.0)←(17H),这里ACC.0 是位地址所以该指令中的17H是22H单元的第7位
数据传送类指令(续)
外部数据存储器与累加器间传送 (4条): MOVX类指令可在累加器与外部 RAM 之间进 行数据传送。 例如: MOVX MOVX MOVX MOVX
A, @DPTR ——(A) ((DPTR)) A, @Ri ——(A) ((Ri)) @DPTR, A ——((DPTR)) (A) @Ri, A ——((Ri)) (A)
(二)算术运算类指令(续)
十进制调整: (DA A——1条) 用于两个BCD码之间的相加,这条指令只能跟在 ADD 或 ADDC 之后
BCD码是指“用二进制表达的十进制数”。如: 十进制数20可以用二进制数00010100B表示; 也可以用十六进制数14H表示; 还可以用BCD码 00100000B 或 20H 表示。
MOV @R1,#0FH ;(30H)←立即数0FH
MOV
A,@R1
;(A)←((30H))=#0FH
注意: 符 号 “ @‖ 表 示 “ 在 …‖ , 其 含 义 与 读 音 皆 同 “at‖。
4 直接寻址 指令中直接给出了操作数所在单元的地址或名称
例:MOV R1,1FH ;(R1) ←(1FH) MOV 30H,4AH ;(30H)←(4AH)
MCS-51指令集
功能分五类,共111条指令
MCS-51指令集(五大类功能)
数据传送类指令: (29条) 算术运算类指令: (24条) 逻辑运算及移位类指令: (24条) 控制转移类指令: (17条) 位操作(布尔操作)类指令:(17条)
(一)数据传送类指令(5种/29条)
内部存储器间传送: (MOV——16条) 外部数据存储器与累加器间传送: (MOVX——4条) 程序存储器向累加器传送: (MOVC——2条) 数据交换:(XCH,XCHD,SWAP——5条) 堆栈操作: (PUSH,POP——2条)
ANL(ORL,XRL) ANL(ORL,XRL) ANL(ORL,XRL)
A, A, A,
direct @Ri Rn
2 1 1
1 1 1
累加器清零/取反操作 (CLR,CPL——2条) CLR A ——对累加器清零 1 Byte 1 个Tm CPL A ——对累加器按位取非 1 Byte 1 个Tm
A,#65H A,#58H A
6
5 + 6
5
8 6
0110 0101
0101 1000 0110 0110
结果:(A)= 23H
(CY)= 1 1
18 19
2 3
指令 “DA
A‖ 完成的操作:
若(A)3~09或(AC)=1则(A)3~0(A)3~0+6; 若(A)7~49或(CY)=1则(A)7~4(A)7~4+6; 又如:两个十进制数“39‖与“58‖相加,根据常 识,显然其和应当为“97‖。 MOV ADD DA
第三章:指令系统
本讲重点: 寻址方式;
MCS-51指令集;
伪指令;
汇编语言与简单程序设计.
汇编语言
汇编语言:用助记符描述的指令的集合。 汇编语言编写的程序借助编译工具编译成为目标代 码,计算机才能识别。
第三章 指令系统及程序设计
51系列单片机指令集含有111条指令
每条指令在程序存储器ROM中占据一定的空间。按指令 所占字节数分类: 单字节(49条);双字节(46条);3字节(16条) 每条指令在执行时要花去一定的时间,以机器周期为单 位。按指令执行时间分类: 单周期(64条);双周期(45条);4周期(2条) 按指令的功能分类,可分为5大类: 数据传送类(29条);算术运算类(24条) 逻辑运算及移位类(24);控制转移类(17条) 位操作类(17条)
逻辑运算指令的常见用法
( 已知累加器A中已存有数:9AH ) 逻辑与ANL用于清0或者保留某些位: 例: ANL A, #0FH; 则(A) = 0AH 逻辑或ORL用于置1或者保留某些位: 例: ORL A, #0FH; 则(A) = 9FH 逻辑异或XRL用于取反或者保留某些位: 例: XRL A, #0FH; 则(A) = 95H (A) 1001 1010 #0FH 0000 1111 95H 1001 0101
ASM-51指令的格式
标号: 操作码 操作数1,操作数2 ;注释
标号代表指令所在地址,1-8个字母/数字,“:‖结尾 操作码就是指令功能助记符,指令实体
目的操作数
源操作数 注释,以“ ; ‖开头
51单片机指令的寻址方式
寻址方式:指令按地址获得操作数的方式 七种寻址方式,一条指令可能含多种寻址方式
寄存器寻址
立即寻址
寄存器间接寻址 直接寻址 变址寻址(基址寄存器+变址寄存器间接寻址) 相对寻址 位寻址
1 寄存器寻址 从寄存器中读取操作数或存放操作数进寄存器 例:MOV A,B ; (A) ←(B) MOV 30H,R0 ;(30H)←(R0) MOV A,R1 ; (A) ←(R1)
A,#39H A,#58H A
3
5 +
9
8 6
0011 1001
0101 1000 0110
结果:(A)= 97H
(CY)= 0 0 9
23
7
(三)逻辑运算及移位类指令(5种/24条)
逻辑与运算:
逻辑或运算: 逻辑异或运算: 累加器清零/取反:
(ANL——6条)
(ORL——6条) (XRL——6条) (CLR,CPL——2条)
逻辑运算及移位类指令(续)
累加器移位操作:(RL,RLC,RR,RRC——4条)
RL
RR
A
A
Cy
累加器 A 累加器 A 累加器 A 累加器 A
左环移
右环移 带进位位左环移 带进位位右环移
RLC A RRC A
Cy
(四)控制转移类指令(4种/17条)
此类指令改变程序的执行顺序——改变当前PC值 无条件转移: (LJMP,AJMP,SJMP,JMP——4条) 条件转移(判断跳转): (JZ,JNZ,CJNE,DJNZ——8条) 子程序调用及返回: (LCALL,ACALL,RET,RETI——4条) 空操作: (NOP——1条) “耗时”一个机器周期。 do nothing!
POP POP
ACC 35H
(二)算术运算类指令(6种/24条)
加法运算: 带进位加法运算: 带借位减法运算: 加1/减1操作: 单字节乘/除法运算: 十进制调整: (ADD——4条) (ADDC——4条) (SUBB——4条) (INC,DEC——9条) (MUL,DIV——2条) (DA A——1条)
(一)数据传送类指令(5种/29条)
内部存储器间传送指令 (16条): MOV 类指令的操作方向总是后面的操作数指向 前面的操作数! 例:MOV A,30H ——(A)(30H)
指令常用表示符号:
Rn: R0—R7
#data:8位立即数 direct:直接地址
@Ri: @R0,@R1
#data16:16位立即数 rel:相对地址
5 变址寻址 也称为: 基址寄存器+变址寄存器间接寻址 设:A中已存有#A4H,DPTR中已存有#1234H MOVC A,@A+DPTR;(A)←((A)+(DPTR))
操作:将A4H+1234H=12D8H单元中的数放进累加器A
6 相对寻址 当前PC值加上指令中规定的偏移量 rel,构 成实际的操作数地址 例: SJMP rel 操作:跳转到的目的地址 = 当前16位PC值 + rel
2 立即寻址 操作数直接就出现在指令中 例:MOV A,#64H ;(A)← 立即数 64H ADD A,#05H ;(A)←(A)+立即数 05H
注意:符号“#‖表明其后跟的是立即数, 立即数——就是数字量本身。
3 寄存器间接寻Leabharlann Baidu 寄存器中的内容是一个地址,由该地址单元 寻址到所需的操作数 例: [ MOV R1,#30H ;(R1)← 立即数30H ]
4个二进制位就可以表示一位BCD码: 0000~1001 可表示十进制数(BCD数) 0~9; 8个二进制位就可以表示两位压缩的BCD码: 00000000~10011001 表示 00~99。
指令 “DA
A‖ 完成的操作:
若(A)3~09或(AC)=1则(A)3~0(A)3~0+6; 若(A)7~49或(CY)=1则(A)7~4(A)7~4+6; 例5:两个十进制数“65‖与“58‖相加,根据常 识,显然其和应当为“123‖。 MOV ADD DA
累加器移位操作: (RL,RLC,RR,RRC—4条)
逻辑运算及移位类指令(续)
逻辑与(ANL),逻辑或(ORL),逻辑异或(XRL):
指 令 ANL(ORL,XRL) ANL(ORL,XRL) ANL(ORL,XRL) 形 式 direct, A Byte 2 3 2 Tm 1 2 1
direct,#data A, #data
数据传送类指令(续)
程序存储器向累加器传送指令(2条): MOVC A,@A+DPTR MOVC A,@A+PC ——通常称为查表指令,寻址方式属: ―基址寄存器 + 变址寄存器间接寻址” @A+DPTR或@A+PC指向程序存储器中的某单元。拟传 送给累加器ACC 的数据就是程序中事先写进去的表 格数据。这些表格数据往往用伪指令 DB,DW 等定义 在程序中。