我正在用GUI Turbo Assembler(用于Windows的Turbo Assembler GUI环境,生成在DOSBox中运行的DOS程序)编写汇编代码。当我运行程序时,汇编器会显示此错误:
x.asm错误x.asm(3)非法指令
第3行是option casemap: none
。我的代码是:
.586
.model flat,stdcall ;
option casemap:none ; Line that is giving an error
.DATA ;
x db 2 ;
y db 1
z db 1
.data?
a db ? ;
b db ? ; b=2
c db ? ; c=2
d db ? ; d=2
e db ? ; e=23,5
f db ? ; f=4
g db ? ; g=-18,5
.code ;
beg: ;
mov ah,x ; AH:=x
mov bh,z ; BH:=z
imul bh ; AH:=xz:=2
mov b,ah ; b:=2
mov ah,x ; AH:=x
mov ch,y ; CH:=y
idiv ch ; AH:=AH/CH:=x/y:=2
mov ch,ah ; CH:=2
mov c,ch ; c=2
mov ah,y ; AH:=y
mul ah ; AH=1^2=1
mov bh,z ; BH:=z
imul bh ; AH:=yz:=1
mov ch,x ; CH=x
imul ch ; AH=AHCH=1x=2
mov d,ah ; d=2
mov AH,45 ; AH=45
mov BH, d ; BH=2
idiv BH ; AH=45/2=22,5
mov e, AH ; e=22,5
mov ah,b ; AH=b
mov ch,c ; CH=c
add ah,ch; AH=b+c=2+2=4
mov f, ah; AH=f
mov ah,f ; AH=f
mov ch, e ; CH=e
sub ah,ch; AH=4-22,5=-18,5
mov g,ah ; g=-18,5
mov ah,g ; AH=g
mov ch,5 ; CH=5
sub ah,ch; AH=-18,5-5=-23,5
mov a,ah ; a=AH=-23,5
end beg
OPTION
关键字直到根据changelogs的TASM 5才引入。 GUI Turbo汇编器当前使用TASM 4.1。您不需要OPTION CASEMAP
功能,因为您的代码对代码中的标签使用所有相同的大小写。解决方法是删除:
option casemap:none
由于GUI Turbo汇编程序的目标是运行DOS程序,因此需要更改:
.model flat,stdcall
到类似的东西:
.model small,stdcall
在DOS中,内存模型可以为small
。 medium
,compact
,large
和huge
。 flat
不适用于DOS程序。在GUI Turbo汇编器环境下,使用flat
将导致链接器错误。
对于DOS,您还需要添加一个堆栈并指定其大小。这样的事情应该起作用:
.stack 256 ; Set stack size to 256 bytes