在汇编语言中使用跳转和比较
我有这个计算器代码如下,它工作正常,但它不会跳转到“分裂”..我仍然在学习程序集编程的过程..需要帮助如何解决这个问题...
.model small .stack 100h .data msg1 db 13,10,13,10, "Enter 1st Number : $" msg2 db 13,10, "Enter 2nd Number : $" msgEr db 13,10, "Error $" msgCh db 13,10, "Press A to ADD , S to SUBTRACT ,D to MULTIPLY, F to DIVIDE, 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 : $" tmp db ? .code start: mov ax, @data mov ds, ax lea dx, msg1 mov ah, 09h int 21h mov bx, 0 start1: mov ah, 01h 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,01h int 21h cmp al,0dh je choice mov ah,0 sub al,30h push ax mov ax,10d mul bx pop bx add bx,ax jmp start2 choice: lea dx, msgCh mov ah, 09h int 21h mov ah, 01h mov answer, al int 21h cmp al,'f' je dividing cmp al,'a' je adding cmp al,'s' je subtracting cmp al,'d' je multiplying cmp al,'x' mov ah, 4ch int 21h error: lea dx,msgEr mov ah,09h int 21h jmp start dividing: pop ax 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: 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: pop ax 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 subtracting: 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
在执行操作之前,您必须清除DX。 x86中的分区将在DX:AX
。 如果你不能清除它,并且它有一些内容,那么最终可能会出现溢出情况。 显然,这很糟糕。 :)
所以:
dividing:
pop ax
div bx
应该成为:
dividing:
pop ax
mov dx,0
div bx
链接地址: http://www.djcxy.com/p/62697.html