第三章MCS-51指令系统 Instruction set §3.1概述 7种寻址方式,111条指令 单字节指令:49条 字节数双字节指令:45条 字节指令:17条 单周期指令:64条 运算速度双周期指令:45条 四周期指令:2条 021/2/23
2021/2/23 1 §3.1 概述 7种寻址方式,111条指令 字节数 运算速度 单字节指令:49条 双字节指令:45条 三字节指令:17条 单周期指令:64条 双周期指令:45条 四周期指令: 2 条 第三章 MCS-51指令系统 Instruction Set
数据传送类:29条 算术运算类:24条 功能逻辑运算类:24条 控制转移类:17条 位操作类:17条 021/2/23
2021/2/23 2 功能 数据传送类:29条 算术运算类:24条 逻辑运算类:24条 控制转移类:17条 位操作类: 17条
常用符号 Rn:工作寄存器中的寄存器R0、R1.R7之 Ri:工作寄存器中的寄存器R0或R1 #data:8位立即数 #data16:16位立即数 direct:片内RAM或SFR的地址(8位) @间接寻址寄存器 Bit:片内RAM或SFR的位地址 addr11:11位目的地址 addr16:16位目的地址 021/2/23
2021/2/23 3 常用符号 Rn:工作寄存器中的寄存器R0、R1…R7之一, Ri:工作寄存器中的寄存器R0或R1 #data:8位立即数 #data16:16位立即数 direct:片内RAM或SFR的地址(8位) @间接寻址寄存器 Bit:片内RAM或SFR的位地址 addr11:11位目的地址 addr16:16位目的地址
re:补码形式的8位地址偏移量。 偏移范围为-128~127 位操作指令中,该位求反后参与操作,不影响 该位 X:片内RAM的直接地址或寄存器 (X):相应地址单元中的内容 →:箭头左边的内容送入箭头右边的单元内 021/2/23
2021/2/23 4 rel: 补码形式的8位地址偏移量。 偏移范围为-128~127 /:位操作指令中,该位求反后参与操作,不影响 该位 X:片内RAM的直接地址或寄存器 (X):相应地址单元中的内容 →:箭头左边的内容送入箭头右边的单元内
§3.2寻址方式 3.2.1立即寻址 操作数存在程 I mmediate Address ing 序存储器中 操作数就包含在指令代码中,在操作码之后,称为 立即数,用“#”表示。 MCS-51 如:M0vP1,#80H MOV R7. #OF5H MOV DPTR. # 1245H 021/2/23
2021/2/23 5 §3.2 寻址方式 3.2.1 立即寻址 Immediate Addressing 操作数就包含在指令代码中,在操作码之后,称为 立即数,用“#”表示。 MCS-51 如:MOV P1, #80H MOV R7, #0F5H MOV DPTR,#1245H 操作数存在程 序存储器中
3.2.2直接寻址 Direct Address ing 直接使用数所在单元的地址找到了操作数,所以称 这种方法为直接寻址。 操作数在SFR、内部RAM、位地址空间。 如:MovA,00H MOV C 60H MOV A OFOH 021/2/23
2021/2/23 6 3.2.2 直接寻址 Direct Addressing 直接使用数所在单元的地址找到了操作数,所以称 这种方法为直接寻址。 操作数在SFR、内部RAM、位地址空间。 如: MOV A,00H MOV C,60H MOV A,0F0H
323寄存器寻址 Register Addressing 对选定的工作寄存器R0~R7、累加器A、通用寄存器B、 地址寄存器DPTR中的数进行操作。 例:MoVA,RO;将R工作寄存器中的数据送到累加器A中去。 提一个问题:我们知道,工作寄存器就是内存单元 的一部分,如果我们选择工作寄存器组0,则RO就 是RAM的00H单元,那么这样一来,MovA,00H 和MVA,R0不就没什么区别了吗? 021/2/23
2021/2/23 7 3.2.3 寄存器寻址 Register Addressing 对选定的工作寄存器R0~R7、累加器A、通用寄存器B、 地址寄存器DPTR中的数进行操作。 例:MOV A,R0;将R0工作寄存器中的数据送到累加器A中去。 提一个问题:我们知道,工作寄存器就是内存单元 的一部分,如果我们选择工作寄存器组0,则R0就 是RAM的00H单元,那么这样一来,MOV A,00H 和 MOV A,R0不就没什么区别了吗?
的确,这两条指令执行的结果是完全相同的, 都是将0H单元中的内容送到A中去,但是执行的过 程不同,执行第一条指令需要2个机器周期,而第二 条则只需要1个机器周期,第一条指令变成最终的目 标码要两个字节(E5H00H),而第二条则只要一个 字节(E8H)就可以了。 021/2/23
2021/2/23 8 的确,这两条指令执行的结果是完全相同的, 都是将00H单元中的内容送到A中去,但是执行的过 程不同,执行第一条指令需要2个机器周期,而第二 条则只需要1个机器周期,第一条指令变成最终的目 标码要两个字节(E5H 00H),而第二条则只要一个 字节(E8H)就可以了
324寄存器间接寻址 Register Indirect Addressing 把地址放在另外一个寄存器中,根据这个寄存器中的数值 决定该到哪个单元中取数据。 RO,R1—8位地址,片内低128字节或片外 DPTR16位,片外64KB 操作数在 今MCS-51 片内RAM中 如:MoVA,@R0 MOVX A@RO 操作数在 片外RAM中 MOVX A @DPTI 操作数在 片外RAM中 021/2/23
2021/2/23 9 3.2.4 寄存器间接寻址 Register Indirect Addressing 把地址放在另外一个寄存器中,根据这个寄存器中的数值 决定该到哪个单元中取数据。 ▪R0,R1----8位地址,片内低128字节或片外 ▪DPTR----16位,片外64KB ❖ MCS-51 如: MOV A,@R0 MOVX A,@R0 MOVX A,@DPTR 操作数在 片内RAM中 操作数在 片外RAM中 操作数在 片外RAM中
32.5变址寻址(基址+变址 Base-Register-plus-Index-Register-Indirect Addressing 以DPR或PC为基址寄存器,累加器A为变址寄存器。把两 者内容相加,结果作为操作数的地址。 常用于查表操作。 操作数在程 今MCS-51 序存储器中 MOVC A @A+DPTR: (ADPTR)+A MOVc A @A+PC PG+1→PG,(A+P0)→A 021/2/23
2021/2/23 10 以DPTR或PC为基址寄存器,累加器A为变址寄存器。把两 者内容相加,结果作为操作数的地址。 常用于查表操作。 ❖ MCS-51 MOVC A, @A+DPTR ;(A+DPTR) →A MOVC A, @A+PC ; PC+1 →PC,(A+PC)→A 3.2.5 变址寻址(基址+变址) Base-Register-plus-Index-Register-Indirect Addressing 操作数在程 序存储器中