1

我的汇编代码有问题。我想在交换数字后添加用户输入的两个数字,但是当我添加这些数字时,添加功能无法正常工作。谢谢

这是代码

.model small 
.stack 100h
.data
        msg1 db 'Enter the number1:$'
        msg2 db 'Enter the number2:$'
        msg3 db 'After swap numbers are:$'
        msg4 db 'Sum is:$'
        num1 db ?
        num2 db ?
        sum db ?
        diff db ?
.code
MAIN PROC
        mov ax,@data
        mov ds,ax

        mov ah,09h         ;display first msg
        mov dx,offset msg1
        mov ah,01h         ;taking input
        int 21h
        mov num1,al


        mov ah,09h         ;display second msg
        mov dx,offset msg2
        int 21h
        mov ah,01h         ;taking input
        int 21h
        mov num2,al

        mov bl,num1
        mov cl,num2
        mov num1,cl
        mov num2,bl

        mov ah,09h         ;display third msg
        mov dx,offset msg3
        int 21h
        mov ah,02h
        mov dl,num1
        int 21h
        mov ah,02h
        mov dl,num2
        int 21h

        mov bl,num1
        add bl,num2
        mov sum,bl

        mov ah,09h       ;display fourth msg
        mov dx,offset msg4
        int 21h
        mov ah,02h
        mov dl,sum
        int 21h

        mov ah,4ch
        int 21h
MAIN ENDP 

END MAIN
4

1 回答 1

1

您的程序输入了两个 1 位数字,因此总和可能高达 18。您的代码没有处理这种可能性,但这可能是故意的。

当您输入时(希望)收到 48 到 57 范围内的 ASCII 字符(它们代表数字 0 到 9)。在将这些值分配给变量num1num2之前,您应该通过减去 48 来消除这些值的字符性质。

mov ah, 09h         ;display first msg
mov dx, offset msg1
mov ah, 01h         ;taking input
int 21h
sub al, 48
mov num1, al
mov ah, 09h         ;display second msg
mov dx, offset msg2
int 21h
mov ah, 01h         ;taking input
int 21h
sub al, 48
mov num2, al

这样,您以后的总和将是两个数字的真实总和。

当准备好输出任何结果时,您必须将值转换为它们的文本表示形式。加48就行了。

mov ah, 09h         ;display third msg
mov dx, offset msg3
int 21h
mov ah, 02h
mov dl, num1
add dl, 48
int 21h
mov ah, 02h
mov dl, num2
add dl, 48
int 21h

mov ah, 09h         ;display fourth msg
mov dx, offset msg4
int 21h
mov ah, 02h
mov dl, sum
add dl, 48
int 21h
于 2015-11-07T12:18:48.203 回答