每当我尝试这样做时,在DOSBox下使用MASM 6.15:
mov al, [cx]
Run Code Online (Sandbox Code Playgroud)
要么
mov al, [cx + bx]
Run Code Online (Sandbox Code Playgroud)
要么
mov al, [cx + 4]
Run Code Online (Sandbox Code Playgroud)
我收到错误:'只允许基本或索引注册'
但话说回来,让我说我有一个数组var1.如果我做:
.model small
.stack 4096
.data
var1 BYTE 1, 2, 3, 4, 5, 6, 7, 8, 9
.code
main proc
mov ax, @data
mov ds, ax
mov cx, 5
mov al, [var1 + cx]
mov ah, 4Ch
int 21h
main endp
end main
Run Code Online (Sandbox Code Playgroud)
它工作得很好.为什么不给出与上面相同的错误?CX不是基址或索引寄存器.
[]运算符的整个工作本质是什么?
在8086中,此结构是正确的:
mov bh,[bx]
Run Code Online (Sandbox Code Playgroud)
但这是不正确的:
mov bh,[cx]
Run Code Online (Sandbox Code Playgroud)
我不知道为什么 我认为通用寄存器(AX,BX,CX,DX,SP,BP,SI和DI)是可以用于任何目的的寄存器,并且BX用于基地址或CX用于计数器的声明只是一个约定,它们完全没有区别。但是看来我错了。你能解释原因吗?这些寄存器之间的确切区别是什么?(例如,为什么不能将基址保存在cx寄存器中?)
我使用名为"emu8086"的x8086模拟器.我写了简单的代码,当我运行它时,它给了我一个错误.我无法弄清楚问题是什么. http://prntscr.com/8bpivm