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 操作数在程 序存储器中