从数据段移动值
问题描述:
我有数据段从数据段移动值
dataseg segment para 'data'
var1 db 3
var2 db 5
dataseg ends
我试图移动值,即
mov ax, offset var2
mov bx, [ax]
但它不工作
答
在16-实际模式为ax
不允许在括号(作为基址寄存器)之间使用,但bx
是:
mov bx, offset var2 ;◄■■ BX INSTEAD OF AX.
mov ax, [bx]
只有bx
和bp
可以用这种方式作为寻址内存时的基址寄存器。 ax
通常用于存储/累积值用于其他目的。
顺便说一句,你的变量是大小“字节”,但你正在将它们的值移动到一个大小的“单词”寄存器。您可以通过两种方式解决这个问题:
var1 DW 3 ;◄■■ USE A WORD SIZE VARIABLE.
或
mov al, [bx] ;◄■■ USE A BYTE SIZE REGISTER.
参见[这个问题](https://*.com/questions/28561487/assembly-offset-calculation-rule)。为了将来的参考,“不起作用”不是一个好的问题描述,你应该明确指出会发生什么。在这种情况下,汇编程序可能会给你一个错误消息,说这是无效的地址。这应该促使您检查参考手册中的有效寻址模式,并且可以自己解决问题。 – Jester
[Assembly偏移量计算规则]的可能重复(https://*.com/questions/28561487/assembly-offset-calculation-rule) –