关于汇编寻址问题……
发布网友
发布时间:2023-09-22 00:30
我来回答
共2个回答
热心网友
时间:2024-12-04 12:12
必须考虑CPU是否支持所需的寻址方式以及使用该寻址方式时的*。
以你的问题来说,要访问result[4],在8086中支持通过BX、SI、DI等寄存器来实现的变址寻址,CX不在这些寄存器之中因此无法生成指令,所以必须要把CX中的数复制到例如BX中再通过BX来访问才行。
所以在8086中可以参考以下代码:
MOV BL,CL ;复制CL到BL
XOR BH,BH ;BH清零
MOV AL,RESULT [BX+2] ;AL=result[4]
而在80386等CPU上,所有32位的通用寄存器都可直接用作变址寄存器,就可以直接这样:
AND ECX,0FFH ;将ECX中除CL外的位清零
MOV AL,RESULT [ECX+2]
一般情况下此方式是最简单的方式,还可以通过其它方式例如XLAT等指令实现,请开发思路举一反三吧。
热心网友
时间:2024-12-04 12:13
你说的那种方式好像就是在汇编中用的方法吧
汇编在不同的控制器中的表示略有差别
我只把80x86的寻址方式说一下吧,
寻址方式有:立即寻址,如:mov ax,01H
寄存器寻址,如:mov ax,bx
直接寻址,如:mov ax,[02H]
寄存器间接寻址,如:mov ax,[bx]
寄存器相对寻址,如:mov ax,[COUNT+01H]
基址变址寻址,如:mov ax,[bx+di]
相对基址变址寻址,如:mov ax,01H+[bx]+[si]