为什么我的汇编代码中出现这些错误(Option casemap:无)?

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

我正在用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
assembly dos x86-16 tasm
1个回答
3
投票

OPTION关键字直到根据changelogs的TASM 5才引入。 GUI Turbo汇编器当前使用TASM 4.1。您不需要OPTION CASEMAP功能,因为您的代码对代码中的标签使用所有相同的大小写。解决方法是删除:

option casemap:none

由于GUI Turbo汇编程序的目标是运行DOS程序,因此需要更改:

.model flat,stdcall

到类似的东西:

.model small,stdcall

在DOS中,内存模型可以为smallmediumcompactlargehugeflat不适用于DOS程序。在GUI Turbo汇编器环境下,使用flat将导致链接器错误。

对于DOS,您还需要添加一个堆栈并指定其大小。这样的事情应该起作用:

.stack 256          ; Set stack size to 256 bytes
© www.soinside.com 2019 - 2024. All rights reserved.