shl 指令抛出 'error A2070 : invalid instruction operands'
shl instruction throws 'error A2070 : invalid instruction operands'
我正在学习汇编语言,我已经开始使用宏来缩短我的程序。其中一个宏未按预期工作。
这是我正在尝试的基本程序 运行,
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 文件是由我们为 class 所关注的书提供的,我们不应该修改这个文件。
shl bx, 4
导致错误。 80186 处理器引入了移位计数大于 1 的移位。 MASM 默认只接受 8086 条指令,但你可以让它接受后面的指令集。
TL;DR:将 .186
指令放在源代码的顶部。更好的是.386
。
我正在学习汇编语言,我已经开始使用宏来缩短我的程序。其中一个宏未按预期工作。
这是我正在尝试的基本程序 运行,
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 文件是由我们为 class 所关注的书提供的,我们不应该修改这个文件。
shl bx, 4
导致错误。 80186 处理器引入了移位计数大于 1 的移位。 MASM 默认只接受 8086 条指令,但你可以让它接受后面的指令集。
TL;DR:将 .186
指令放在源代码的顶部。更好的是.386
。