2

我在下面有这个计算器代码,它工作正常,但它不会跳转到“划分”..我仍在学习汇编编程的过程中..需要帮助来解决这个问题......

.model 小
.stack 100h

。数据
msg1 db 13,10,13,10,“输入第一个数字:$”
msg2 db 13,10,“输入第二个数字:$”
msgEr db 13,10,“错误 $”
msgCh db 13,10,“按 A 加,S 减,D 乘,F 减,X 退出:$”
msgSum db 13,10,13,10, "总和是 : $"
msgDif db 13,10,13,10,“区别是:$”
msgDiv db 13,10,13,10,“商是:$”
msgMul db 13,10,13,10, "产品是 : $"
tmp 数据库?


。代码

开始:
移动斧头,@data
mov ds, ax

铅 dx, msg1
mov 啊, 09h
整数 21 小时
移动 bx, 0

开始1:
mov 啊, 01h
整数 21 小时
cmp al,0dh      
下一个1
mov 啊,0        
亚铝,30h      
推斧         
移动斧头,10d      
mul bx          
流行音乐          
添加 bx,ax       
跳转开始1      




下一个:
推bx
铅 dx,msg2
mov ah,09h
整数 21 小时

移动 bx,0


开始2:
mov 啊,01h
整数 21 小时
cmp al,0dh
我的选择
mov 啊,0
亚铝,30h
推斧
移动斧头,10d
mul bx
流行音乐
添加 bx,ax
跳转开始2


选择:
领导 dx, msgCh
mov 啊, 09h
整数 21 小时

mov 啊, 01h
mov 答案,人
整数 21 小时

cmp al,'f'
je分割

cmp al,'a'  
je添加

cmp al,'s'
je 减法

cmp al,'d'
je 倍增

cmp al,'x'
mov ah, 4ch
整数 21 小时

错误:
领导 dx,msgEr
mov ah,09h
整数 21 小时
跳转开始


划分:
流行斧
div bx
推斧
领导 dx,msgDiv
mov ah,09h
整数 21 小时
流行斧
mov cx,0
移动 dx,0
mov bx,10d
跳转

添加:     
流行斧
添加斧头,bx   
推斧
领导 dx,msgSum   
mov ah,09h
整数 21 小时
流行斧
mov cx,0
移动 dx,0
mov bx,10d
跳转   

乘法:
流行斧
mul bx      
推斧     
领导 dx,msgMul   
mov ah,09h
整数 21 小时
流行斧
mov cx,0
移动 dx,0
mov bx,10d
跳转


减去:
流行斧
子斧头,bx
推斧
引导 dx,msgDif
mov ah,09h
整数 21 小时
流行斧
mov cx,0
移动 dx,0
mov bx,10d

休息:
div bx
推dx
移动 dx,0
公司
或斧头,斧头
休息

答:        
流行音乐
添加 dl,30h
mov 啊,02h
整数 21 小时
循环回答

跳转开始

结束开始

4

2 回答 2

1

您必须在执行操作之前清除 DX。x86 中的除法将在DX:AX. 如果你没有先清除它并且它有一些内容,你最终可能会出现溢出情况。显然,这很糟糕。:)

所以:

dividing: 
pop ax
div bx

应该变成:

dividing: 
pop ax
mov dx,0
div bx
于 2015-12-15T01:47:07.377 回答
-1
.model small
.stack 100h

.data
msg1 db 13,10,13,10, "Enter 1st Number : $"
msg2 db 13,10, "Enter 2nd Number : $" 
msg01 db 13,10,13,10, "Enter base Number : $"
msg02 db 13,10, "Enter power Number : $"
msgEr db 13,10, "Error $"
msgCh db 13,10, "Press A to ADD , S to SUBTRACT ,M to MULTIPLY, D to DIVIDE,F to FIND FACTORIAL,P to FIND X POWER Y, X to EXIT : $ "
msgSum db 13,10,13,10, "Sum is : $"
msgDif db 13,10,13,10, "Difference is : $"
msgDiv db 13,10,13,10, "Quotient is : $"
msgMul db 13,10,13,10, "Product is : $" 
msgPOW db 13,10,13,10, "ANS is : $"
tmp     db ?


.code

start:
mov ax, @data
mov ds, ax





lea dx, msgCh
mov ah, 09h
int 21h

mov ah, 1
mov dl, al
int 21h

cmp al,'d'
je dividing

cmp al,'a'  
je adding

cmp al,'s'
je subtracting

cmp al,'m'
je multiplying   

cmp al,'f'
je fact

cmp al,'p'
je x_pow_y

cmp al,'x'
mov ah, 4ch
int 21h

error:
lea dx,msgEr
mov ah,09h
int 21h 
jmp start

;//////////////////////////////////////

dividing:
lea dx, msg1
mov ah, 9
int 21h  

start1:
mov ah, 1
int 21h
cmp al,0dh      
je next1
mov ah,0        
sub al,30h      
push ax         
mov ax,10d      
mul bx          
pop bx          
add bx,ax       
jmp start1      




next1:
push bx
lea dx,msg2
mov ah,09h
int 21h


mov bx,0


start2:
mov ah,1
int 21h
cmp al,0dh
je d
mov ah,0
sub al,30h
push ax
mov ax,10d
mul bx
pop bx
add bx,ax 
jmp start2
d:
pop ax
mov dx,0
div bx
push ax
lea dx,msgDiv
mov ah,09h
int 21h 
pop ax
mov cx,0
mov dx,0
mov bx,10d
jmp break



 ;///////////////////////////////////

adding:  
lea dx, msg1
mov ah, 9
int 21h
mov bx, 0


start01:
mov ah, 1
int 21h
cmp al,0dh      
je next01
mov ah,0        
sub al,30h      
push ax         
mov ax,10d      
mul bx          
pop bx          
add bx,ax       
jmp start01      




next01:
push bx
lea dx,msg2
mov ah,09h
int 21h


mov bx,0


start02:
mov ah,1
int 21h
cmp al,0dh
je a
mov ah,0
sub al,30h
push ax
mov ax,10d
mul bx
pop bx
add bx,ax 
jmp start02 
a:   
pop ax
add ax,bx   
push ax
lea dx,msgSum   
mov ah,09h
int 21h 
pop ax
mov cx,0
mov dx,0
mov bx,10d
jmp break 




;///////////////////////////////  

multiplying:

lea dx, msg1
mov ah, 9
int 21h
mov bx, 0

start001:
mov ah, 1
int 21h
cmp al,0dh      
je next001
mov ah,0        
sub al,30h      
push ax         
mov ax,10d      
mul bx          
pop bx          
add bx,ax       
jmp start001      




next001:
push bx
lea dx,msg2
mov ah,09h
int 21h


mov bx,0


start002:
mov ah,1
int 21h
cmp al,0dh
je m
mov ah,0
sub al,30h
push ax
mov ax,10d
mul bx
pop bx
add bx,ax 
jmp start002
m: 
pop ax 
mov dx,0
mul bx      
push ax     
lea dx,msgMul   
mov ah,09h
int 21h 
pop ax
mov cx,0
mov dx,0
mov bx,10d
jmp break

;//////////////////////////////////  

fact: 

lea dx, msg1
mov ah, 9
int 21h
mov bx, 0

start003:
mov ah, 1
int 21h
cmp al,0dh      
je l
mov ah,0        
sub al,30h      
push ax


mov ax,10d      
mul bx          
pop bx          
add bx,ax       
jmp start003      


l:                                       ;ax=6
mov cx,bx
mov ax,1 

jmp l2
l2:
cmp cx,0
je l1
mov dx,0 
mul cx

push ax

lea dx,msgPOW   
mov ah,09h
int 21h  

sub cx,1
pop ax

jmp l2
l1: 
mov dx,0
mov bx,10d
jmp break 

;//////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\

x_pow_y:


lea dx, msg01
mov ah, 9
int 21h
mov bx, 0

start004:
mov ah, 1
int 21h
cmp al,0dh

je next004
mov ah,0        
sub al,30h      
push ax         
mov ax,10d      
mul bx          
pop bx          
add bx,ax       
jmp start004      




next004:
push bx
lea dx,msg02
mov ah,09h
int 21h


mov bx,0


start005:
mov ah,1
int 21h
cmp al,0dh
je p
mov ah,0
sub al,30h
push ax
mov ax,10d
mul bx
pop bx
add bx,ax 
jmp start005 

p:  
mov cx,bx 

pop ax
mov bx,ax 
mov dx,0


c:
cmp cx,1
je c1
mul bx      
push ax     
lea dx,msgPOW   
mov ah,09h
int 21h
sub cx,1 
pop ax
jmp c
c1:
mov cx,0
mov dx,0
mov bx,10d
jmp break







 ;/////////////////////////////// \\\\\\\\\\\\\\\\\\\\\ ' _ '

subtracting: 
lea dx, msg1
mov ah, 9
int 21h
mov bx, 0

start0001:
mov ah, 1
int 21h
cmp al,0dh      
je next0001
mov ah,0        
sub al,30h      
push ax         
mov ax,10d      
mul bx          
pop bx          
add bx,ax       
jmp start0001      




next0001:
push bx
lea dx,msg2
mov ah,09h
int 21h


mov bx,0


start0002:
mov ah,1
int 21h
cmp al,0dh
je s
mov ah,0
sub al,30h
push ax
mov ax,10d
mul bx
pop bx
add bx,ax 
jmp start0002
s:
pop ax
sub ax,bx 
push ax
lea dx,msgDif
mov ah,09h
int 21h 
pop ax
mov cx,0
mov dx,0
mov bx,10d

break:
div bx
push dx
mov dx,0
inc cx
or ax,ax 
jne break 

ans:        
pop dx
add dl,30h
mov ah,02h
int 21h
loop ans

jmp start

end start
于 2019-04-19T09:01:01.160 回答