Почему я получаю эти ошибки в своем коде сборки (Option casemap: none)? - PullRequest
1 голос
/ 02 марта 2020

Я пишу код ассемблера с GUI Turbo Assembler (среда Turbo Assembler GUI для Windows, которая создает программы DOS, работающие в DOSBox). Когда я запускаю программу, ассемблер выдает эту ошибку:

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

1 Ответ

3 голосов
/ 02 марта 2020

Ключевое слово OPTION не вводилось до TASM 5 в соответствии с журналами изменений . GUI Turbo Assembler в настоящее время использует TASM 4.1. Вам не нужна функция OPTION CASEMAP, так как ваш код использует одинаковый регистр для меток в вашем коде. Исправление заключается в удалении:

option casemap:none

Поскольку GUI Turbo Assembler предназначен для запуска программ DOS, вам необходимо изменить:

.model flat,stdcall

на что-то вроде:

.model small,stdcall

В DOS модели памяти могут быть small. medium, compact, large и huge. flat не относится к программам DOS. Использование flat приведет к ошибке компоновщика в среде GUI Turbo Assembler.

Для DOS вы также захотите добавить стек и указать его размер. Примерно так должно работать:

.stack 256          ; Set stack size to 256 bytes
...