关于[]的寻址问题讨论的一个想法
hswxf 2006-12-06 03:56:50 好久没上,在回答了http://community.csdn.net/Expert/topic/5195/5195418.xml?temp=.9714472之后,就没有再上.
的确在此贴中,本人有误导之嫌,后细看后,此贴仍然有误导之嫌,在此发贴继续讨论
原文简略如下:
在DEBUG中,可以有效区分:
mov ax,[0002]
与
mov ax,0002
而在MASM的编辑环境中,上述二都是不区分的.归结而言,此贴主认可了"masm存在相当的问题"(详见此贴)
其实,上述是混淆了DEBUG与MASM二个环境的区别,这是二个不同的环境.在DEBUG中是区分的,但在MASM有汇编中,寻址方式有7种:寄存器寻址,立即寻址,直接寻址,寄存器间接寻址,寄存器相对寻址, 基址加变址寻址, 相对基址加变址寻址,其前三种就是导致概念混淆的原因.
尤其是立即寻址,直接寻址,是与DEBUG中不同的定义,前一个寻址"立即寻址方式主要用来给寄存器或存储器赋初值, 也可以与寄存器操作数或存储器操作数进行算术逻辑运算",后一个的地址是与"含有变量的地址表达式或段寄存器名".
所以这二个在MASM编译器看来是一样的,而造成另一误解的原因是:认为[]是地址相关的符号,其实在没有变量与寄存器时,这是一个通用运算符号.
在MASM看来:
mov ax,[0002]与mov ax,0002是相同的.
欢迎拍砖!