gpt4 book ai didi

assembly - shl 指令抛出 'error A2070 : invalid instruction operands'

转载 作者:行者123 更新时间:2023-12-01 11:30:01 31 4
gpt4 key购买 nike

我正在学习汇编语言,我已经开始使用宏来缩短我的程序。其中一个宏未按预期工作。

这是我正在尝试运行的基本程序,

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 文件是由我们为这门课学习的书提供的,我们不应该修改这个文件。

最佳答案

shl bx, 4 导致错误。 80186 处理器引入了移位计数大于 1 的移位。 MASM 默认仅接受 8086 指令,但您可以指示它接受更高版本的指令集。

TL;DR:将 .186 指令放在源代码的顶部。更好的是 .386

关于assembly - shl 指令抛出 'error A2070 : invalid instruction operands',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32998638/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com