我正在用GUI Turbo汇编程序 (一个用于DOSBox的生成DOS程序的Turbo环境)编写汇编代码。当我运行程序时,汇编程序会给出以下错误:
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发布于 2020-03-02 19:52:21
根据OPTION,直到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涡轮汇编程序环境下,使用flat将导致链接器错误。
对于DOS,您还需要添加一个堆栈并指定其大小。像这样的事情应该有效:
.stack 256 ; Set stack size to 256 byteshttps://stackoverflow.com/questions/60495160
复制相似问题