【发布时间】:2019-03-26 20:14:00
【问题描述】:
当我尝试在 DOSBox 下使用 MASM 6.15 时:
mov al, [cx]
或
mov al, [cx + bx]
或
mov al, [cx + 4]
我收到错误消息:“只允许使用基址或索引寄存器”
但话又说回来,假设我有一个数组 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
它工作得很好。为什么它不给出与上述相同的错误? CX 不是基址或索引寄存器。
[] 运算符的整个工作本质是什么?
【问题讨论】:
-
mov al, [var1 + cx]实际上不应该工作。cx不允许作为基址或变址寄存器(基址寄存器为bx和bp,变址寄存器为si和di。其中一个或两个都可以省略)。我怀疑你在这里误解了汇编程序的输出。 -
@fuz 检查我上面粘贴的代码。它组装好,没有任何错误。我正在使用 masm615 (DOSBox)。它不是重复的,我不是说什么寄存器应该起作用。我在问一个代码特定的问题,为什么它不应该工作。
-
汇编器为此生成什么代码?
-
@prl 你是什么意思?你是说二进制吗?如何提供?
标签: assembly x86 dos masm x86-16