gpt4 book ai didi

assembly - 当 CX 不是基址或索引寄存器时,为什么 CX 在 16 位汇编中的 '[ ]' 中工作?

转载 作者:行者123 更新时间:2023-12-04 17:43:07 25 4
gpt4 key购买 nike

每当我尝试在 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 不是基址或索引寄存器。

[] 运算符的整个工作本质是什么?

最佳答案

这是某些版本的 MASM 中的错误。在某些情况下,MASM 会尝试错误地编码一条不应该出现的指令。尝试对其进行编码时应该会引发错误,因为 CX 不能用作 16 位寻址中的基址或索引。

mov al, [var1 + cx]

它不会生成错误,而是错误地将其生成为:
mov bh, var1[bx+si]

无效指令编码为:
8A B8 xx xx

哪里 xx xxvar1 的偏移量.

关于assembly - 当 CX 不是基址或索引寄存器时,为什么 CX 在 16 位汇编中的 '[ ]' 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52934673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com