汇编(emu8086)不允许将字节移动到8位寄存器

时间:2015-06-26 06:05:53

标签: assembly byte x86-16

我正在制作一个计算器类型的程序,我使用它来从用户那里获取一个数字并存储它:

mov ah, 01h
int 21h
mov offset num1, al

并且在代码的末尾我将num1设置为带

的字节
num1 db 0

给它一个默认值0。

问题是,当我尝试将num1中的值移回寄存器以执行实际操作时:

mov bl, offset num1

我得到一个错误,说第二个操作数超过8位,我无法通过搜索互联网/手册来解决这个问题。

另外,我使用偏移变量,因为这是我最初教给他们的方式,我不会以任何其他方式真正理解它们。

1 个答案:

答案 0 :(得分:2)

此:

mov offset num1, al

应该是:

mov num1, al

mov bl, offset num1

应该是:

mov bl, num1

offset关键字应该用于您想要获取标签地址的情况(或准确地说,它在段内的偏移量)。例如,如果您使用INT 21H / AH=09H打印字符串,则需要DX来保存要打印的字符串的偏移量,因此您可以使用mov dx, offset my_string。 但是在您已经显示的代码中,您只对在num1处加载和存储值感兴趣,因此您应该只使用num1(或[num1],这意味着与此上下文中的MASM / TASM语法中的num1相同。)

关于错误消息的含义:实模式程序中的偏移量是16位,所以即使你真的想将它移动到像albl这样的8位寄存器中你不可能这样做。