我正在制作一个计算器类型的程序,我使用它来从用户那里获取一个数字并存储它:
mov ah, 01h
int 21h
mov offset num1, al
并且在代码的末尾我将num1设置为带
的字节num1 db 0
给它一个默认值0。
问题是,当我尝试将num1中的值移回寄存器以执行实际操作时:
mov bl, offset num1
我得到一个错误,说第二个操作数超过8位,我无法通过搜索互联网/手册来解决这个问题。
另外,我使用偏移变量,因为这是我最初教给他们的方式,我不会以任何其他方式真正理解它们。
答案 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位,所以即使你真的想将它移动到像al
或bl
这样的8位寄存器中你不可能这样做。