Assembly 通过偏移量从数据段移动值

Assembly 通过偏移量从数据段移动值,assembly,x86,tasm,Assembly,X86,Tasm,我有数据段 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通常用

我有数据段

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
通常用于存储/累积用于其他目的的值

顺便说一句,变量的大小是“byte”,但您正在将它们的值移动到大小“word”寄存器中。您可以通过两种方式修复它:

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


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

mov bx, offset var2  ;◄■■ BX INSTEAD OF AX.
mov ax, [bx]
在寻址内存时,只有
bx
bp
可以以这种方式用作基址寄存器
ax
通常用于存储/累积用于其他目的的值

顺便说一句,变量的大小是“byte”,但您正在将它们的值移动到大小“word”寄存器中。您可以通过两种方式修复它:

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


另见。作为将来的参考,“不工作”不是一个好的问题描述,您应该确切地说明发生了什么。在这种情况下,汇编程序可能会给您一条错误消息,告诉您这是无效地址。这应该会提示您检查参考手册中的有效寻址模式,并且您自己可能已经解决了该问题。请参阅的可能重复。作为将来的参考,“不工作”不是一个好的问题描述,您应该确切地说明发生了什么。在这种情况下,汇编程序可能会给您一条错误消息,告诉您这是无效地址。这应该会提示您检查参考手册中的有效寻址模式,并且可以自己解决问题。可能是Ok的重复,但我通过偏移量获得mov bx,002而不是mov bx,102var2@demsee,我不明白,你能解释清楚一点吗:你是把002还是102搬到bx?你,我只是想用一下@data@demsee,你确定TASM没有抱怨mov bx[ax]?@demsee,所以我的答案是正确的,是不是应该被接受(你知道,通过点击✔) ? ^_ºOk,但我通过偏移量得到mov bx,002而不是mov bx,102var2@demsee,我不明白,你能解释清楚一点吗:你是要把002还是102搬到bx?你,我只是想用@data@demsee,你确定TASM没有抱怨mov bx,[ax]?@demsee,所以我的答案是正确的,应该接受吗(你知道,通过点击✔) ? ^_º