不允许将字节移动到8位寄存器的程序集(emu8086)



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

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

在代码的末尾,我将num1设置为具有的字节

num1 db 0

给它一个默认值0。

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

mov bl, offset num1

我收到一个错误,说第二个操作数超过8位,我无法通过任何互联网/手册搜索来弄清楚这一点。

此外,我使用偏移变量,因为这是我最初学习它们的方式,我并没有以任何其他方式真正理解它们。

这:

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位寄存器中,也无法做到这一点。

最新更新