相关疑难解决方法(0)

当它不是基址或索引寄存器时,为什么CX在16位汇编中使用'[]'?

每当我尝试这样做时,在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不是基址或索引寄存器.

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

x86 assembly dos masm x86-16

5
推荐指数
1
解决办法
82
查看次数

8086中通用寄存器之间的差异

在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寄存器中?)

assembly x86-16

1
推荐指数
1
解决办法
444
查看次数

指令"mov ax,[ax]"不会编译

我使用名为"emu8086"的x8086模拟器.我写了简单的代码,当我运行它时,它给了我一个错误.我无法弄清楚问题是什么. http://prntscr.com/8bpivm

assembly

0
推荐指数
1
解决办法
302
查看次数

标签 统计

assembly ×3

x86-16 ×2

dos ×1

masm ×1

x86 ×1