`不正确的操作数类型:数据错误,MASM 5.00

问题描述 投票:0回答:1

我无法将文件从EMU8086汇编语法转换为MASM 5.00语法时遇到错误:

操作数类型不正确:DATA

enter image description here

我的代码是:

.model small
.stack 100h
.data
x db ?
y db ?
z db ?
q db 10,13, 'First Digit  $'
r db 10,13, 'Second Digit  $'
s db 10,13, 'Product  $'

.code
mov ax,data
mov DS,ax
lea dx,q
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov x,al
lea dx,r
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov y,al
mul x
mov z,al
aam
add ah,30h
add al,30h
mov bx,ax
lea dx,s
mov ah,9
int 21h
mov ah,2
mov dl,bh
int 21h
mov ah,2
mov dl,bl
int 21h
mov ah,4ch
int 21h
end
assembly masm x86-16 emu8086 dosbox
1个回答
0
投票

[EMU8086使用了相当宽松的类似于MASM的语法。在实际的MASM中使用简化的段伪指令时,必须从名称中引用带有@符号的段名称(并删除句点.)。 .data段应引用为@data,而不是dataMASM documentation以这种方式描述它:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 。例如,@ code等同表示.CODE指令定义的段名称。同样,@ fardata表示.FARDATA段名称,而@fardata是?代表.FARDATA?段名称。 @数据等于代表所有附近数据段共享的组名。它可用于访问由.DATA,.DATA?,。CONST和.STACK段创建的段。

代码:

mov ax,data mov DS,ax

应写为:

mov ax,@data mov DS,ax


附加说明

这不适用于您正在使用的MASM 5.xx

。在MASM(6.00+)的较新版本中,汇编程序可以生成所需的启动代码,该启动代码使用model指令为指定的.startup适当设置段寄存器。使用较新版本的MASM(和TASM),您可以替换为:.code mov ax,@data mov DS,ax ...
with:

.code .startup ...

© www.soinside.com 2019 - 2024. All rights reserved.