变址寻址是一种基址寄存器+偏移量的间接寻址方式.它以16位的寄存器dptr或pc为基址寄存器,累加器a做为地址偏移量,来形成操作数所在的存储单元的地址,几把基址和偏移量相加,得到的结果做为操作数的地址
1 以pc的当前值为基址(指本条指令的首地址),单字节指令,执行时,先始pc+1指向下一条指令的地址,然后在与累加器a的内容相加,形成变址寻址的地址
movc a, @a+pc ; (pc)<----(pc)+1 , (a)<----((a)+(pc)
2 以dptr为基址寄存器,将dptr的内容与累加器a的内容相加得到变址地址
movc a, @a+dptr ; (a)<-----((a)+(dptr))
编写简单验证程序;
org 0000h
ljmp main
org 0030h
main: mov a, #02h ; 将偏移量02h送入累加器a
movc a, @a+pc ; 将当前pc值与偏移量相加得到变址地址,将其内容送到a
此条指令的首地址为0032h,执行时现将pc+1,变成0033h,再和偏移量02H相加,结果为35h
将0035h单元的内容送入a中
mov dptr, #0041h ; 设定基地址,将0040h送如dptr
此条指令在程序存储器中所处的位置如下
0033h dptr
0034h 00h
0035h 41h ;此处即为上条指令执行后所指向的地址,所以执行后a中的内容为41h
movc a, @a+dptr ; 将a中的内容与dptr中的内容相加,其和的地址的内容送a
org 0080h ;伪指令,下面的内容从0080h单元开始存放
db 73h,60h,90h ;0082h单元的内容为90h
end
1 变址寻址方式专用于程序存储器的访问,不能访问数据存储器
2 使用变址寻址时,应先为a,和dptr赋值,以便确定地址,以pc为基址时只需要给a赋值即可
文章评论(0条评论)
登录后参与讨论