Подсчет разности чисел в формате double IEEE 754 - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Написал программу, которая должна считать разность двух чисел введеных в 16 системе счисления в формате double IEEE 754. Но программа считает не то, что нужно. Например: Вводим первое число (4024000000000000) = 10 Вводим второе число (4014000000000000) = 5 Как результат выводит 0 В чем проблема?
.model small
.stack 512  
.386        
.data       
vvedite db 13,10,'Vvedite chislo.',13,10,'$'
rezultat db 'Rezultat:$'
z1 dd 0
.code         
              
mov ax, @data  
mov ds, ax  
finit       
 
   mov ah, 9      
   lea dx, vvedite
   int 21h    
              
   mov cx, 2
            
chislo:                
   push cx           
                     
   mov cx, 16        
   mov ebx, 0  
            
schitivay:               
   mov ah, 10h   
   int 16h       
   cmp al, '0'   
   jl  schitivay  
            
   cmp al, '9'   
   jle pish10    
            
   cmp al,'A'    
   jl schitivay   
   cmp al,'F'    
   jle pish16d   
            
   cmp al, 'a'   
   jl schitivay     
   cmp al, 'f'   
   jg  schitivay   
                 
pish16m:         
   mov ah, 0eh   
   int 10h       
                 
   sub al, 87    
   mov ah, 0     
               
   jmp koniec_petli
               
pish16d:         
   mov ah, 0eh   
   int 10h          
               
   sub al, 55    
               
   jmp koniec_petli

Решение задачи: «Подсчет разности чисел в формате double IEEE 754»

textual
Листинг программы
.model small
.stack 512 
.386 
.data 
vvedite db 13,10,'Vvedite chislo.',13,10,'$'
rezultat db 'Rezultat:$'
z1 dd 0
.code 
 
mov ax, @data 
mov ds, ax 
finit 
 
mov ah, 9 
lea dx, vvedite
int 21h 
 
mov cx, 2
 
chislo: 
push cx 
 
mov cx, 16 
mov ebx, 0 
 
schitivay: 
mov ah, 10h 
int 16h 
cmp al, '0' 
jl schitivay 
 
cmp al, '9' 
jle pish10 
 
cmp al,'A' 
jl schitivay 
cmp al,'F' 
jle pish16d 
 
cmp al, 'a' 
jl schitivay 
cmp al, 'f' 
jg schitivay 
 
pish16m: 
mov ah, 0eh 
int 10h 
 
sub al, 87 
mov ah, 0 
 
jmp koniec_petli
 
pish16d: 
mov ah, 0eh 
int 10h 
 
sub al, 55 
 
jmp koniec_petli
 
 
 
pish10:            
   mov ah, 0eh     
   int 10h         
                 
   sub al, '0'   
   mov ah, 0     
                 
koniec_petli:    
                 
   shl ebx, 1     
   shl ebx, 1     
   shl ebx, 1     
   shl ebx, 1     
   sub bx, ax  
                
               
   loop schitivay  
                 
   pop cx        
   mov z1, ebx            
   fld z1       
                 
   mov al, 13        
   mov ah, 0eh   
   int 10h       
                 
   mov al, 10        
   mov ah, 0eh   
   int 10h       
                 
   loop chislo
                     
   fsub        
   fst z1      
   mov ebx, z1 
                       
lea dx, rezultat         
mov ah, 09h            
int 21h        
               
mov cx, 16     
xor ax,ax      
 _2:           
rol ebx, 4     
mov al, bl     
and al, 00001111b      
               
cmp al, 9      
ja bukva      
               
add al, '0'    
jmp pish       
               
bukva:        
add al, 55     
               
pish:          
mov ah, 0eh    
int 10h        
               
loop _2          
               
;koniec        
mov ah, 0      
int 16h               
               
               
               
                           
               
mov ax,4c00h    
int 21h         
end            
               
               
xor ax,ax      
 _2:           
mov al, bl     
and al, 00001111b      
               
cmp al, 9      
ja bukva    
               
add al, '0'    
jmp pish     
               
bukva:        
add al, 55    
               
pish:          
mov ah, 0eh    
int 10h        
               
loop _2

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы