【发布时间】:2015-10-07 17:24:27
【问题描述】:
我正在学习汇编编程语言,并且我已经开始使用宏来缩短我的程序。其中一个宏未按预期工作。
这是我正在尝试运行的最简单的程序,
include pcmac.inc
.model small
.stack 100h
.data
.code
Hello PROC
_Begin ;Line 12
_Exit 0
Hello ENDP
END Hello
在pcmac.inc 文件中,_Begin 宏具有以下定义,
_Begin MACRO
mov ax, @data
mov ds, ax
mov bx, ss
sub bx, ax
shl bx, 4
mov ss, ax
add sp, bx
ENDM
当我运行这个程序时,我得到以下错误,
file.asm(12) : error A2070 : invalid instruction operands
_Begin(5) : Macro Called From
file.asm(12): Main Line Code
如果我用原始汇编代码替换_Begin 宏,程序按预期工作,
mov ax, @data
mov ds, ax
谁能告诉我为什么_Begin 宏不起作用,错误是什么意思?
我在 iMac 上的 Windows 8 上使用 masm。
编辑:
我刚刚发现,如果我在 _Begin 宏中注释掉以下行,程序就可以工作。
shl bx, 4
但是这个 PCMAC.INC 文件是由我们正在为课程学习的书提供的,我们不应该修改这个文件。
【问题讨论】:
-
假设第 12 行引用了
mov ax, @data指令,我怀疑宏扩展为错误传递操作数的指令形式。看起来您想传递一个立即整数值5。我认为这需要$或#来表示“即时”价值。检查您的汇编器手册。 -
你写的文件名是 pamac.inc 但后来包含了
include pcmac.inc,是你的实际代码你的帖子有错误吗? -
@MByD 对不起,这是一个错字。修好了。
-
@Jens 第 12 行指的是 _Begin 宏。我认为第 5 行引用了 _Begin 宏中的一行。我刚开始学习。我不确定什么是直接价值。 PCMAC.INC 文件是由我们正在阅读的书提供的——我们不应该修改这个文件。