首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我在汇编代码中出现这些错误(选项casemap: none)?

为什么我在汇编代码中出现这些错误(选项casemap: none)?
EN

Stack Overflow用户
提问于 2020-03-02 19:08:41
回答 1查看 736关注 0票数 1

我正在用GUI Turbo汇编程序 (一个用于DOSBox的生成DOS程序的Turbo环境)编写汇编代码。当我运行程序时,汇编程序会给出以下错误:

x.asm错误x.asm(3)非法指令

第3行是option casemap: none。我的代码是:

代码语言:javascript
运行
复制
.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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-02 19:52:21

根据OPTION,直到TASM-5才引入变更日志关键字。GUI Turbo汇编程序目前使用TASM 4.1。您不需要OPTION CASEMAP特性,因为您的代码对代码中的标签使用了所有相同的情况。解决办法是删除:

代码语言:javascript
运行
复制
option casemap:none

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

代码语言:javascript
运行
复制
.model flat,stdcall

这样的事情:

代码语言:javascript
运行
复制
.model small,stdcall

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

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

代码语言:javascript
运行
复制
.stack 256          ; Set stack size to 256 bytes
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60495160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档