2017-06-20 39 views
0

我有数据段从数据段移动值

dataseg segment para 'data' 
var1 db 3 
var2 db 5 
dataseg ends 

我试图移动值,即

mov ax, offset var2 
mov bx, [ax] 

但它不工作

+1

参见[这个问题](https://stackoverflow.com/questions/28561487/assembly-offset-calculation-rule)。为了将来的参考,“不起作用”不是一个好的问题描述,你应该明确指出会发生什么。在这种情况下,汇编程序可能会给你一个错误消息,说这是无效的地址。这应该促使您检查参考手册中的有效寻址模式,并且可以自己解决问题。 – Jester

+0

[Assembly偏移量计算规则]的可能重复(https://stackoverflow.com/questions/28561487/assembly-offset-calculation-rule) –

回答

2

在16-实际模式为ax不允许在括号(作为基址寄存器)之间使用,但bx是:

mov bx, offset var2 ;◄■■ BX INSTEAD OF AX. 
mov ax, [bx] 

只有bxbp可以用这种方式作为寻址内存时的基址寄存器。 ax通常用于存储/累积值用于其他目的。

顺便说一句,你的变量是大小“字节”,但你正在将它们的值移动到一个大小的“单词”寄存器。您可以通过两种方式解决这个问题:

var1 DW 3  ;◄■■ USE A WORD SIZE VARIABLE. 

mov al, [bx] ;◄■■ USE A BYTE SIZE REGISTER. 
+0

好吧,但我得到mov bx,002而不是mov bx,102通过偏移量var2 – demsee

+0

@demsee,我不明白,你能否更好地解释一下:你是将002还是102移入bx? –

+0

ou,我只是想要使用@data – demsee