Assembly 汇编,添加函数

Assembly 汇编,添加函数,assembly,x86-emulation,Assembly,X86 Emulation,我的汇编代码有问题。我想在交换数字后添加用户输入的两个数字,但当我添加这些数字时,添加功能无法正常工作。谢谢 这就是代码 .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:$' num

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

这就是代码

.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

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

当您接受输入时,您(希望)收到的ASCII字符范围为48到57(它们表示数字0到9)。在将这些值赋给变量num1和num2之前,应该通过减去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

一些代码结束于代码块之外,多行代码连接在一起。刷新页面,您将看到。我会重新发布,因为这可能有助于回答。请定义“工作不正常”,是否有烟雾从计算机中冒出来?您的程序的问题是,当您执行
mov-bl,num1
add-bl,num2
mov-sum,bl
时,您正在添加输入字符的ASCII值。ASCII“0”是48位小数,“1”是49位小数等。在添加这些数字之前,您需要从每个值中减去48位小数,然后将它们相加。要将其打印出来,您需要将ASCII 48添加到结果中,以将其转换回可打印字符。您还会发现,如果num1和num2之和大于9,那么您将遇到另一个问题。打印前需要将总和转换为ASCII字符串。@hamxarajput如果这个答案令您满意,那么欢迎您接受它。