Assembly 在部件中显示两位数字?

Assembly 在部件中显示两位数字?,assembly,Assembly,我对汇编编程一无所知。在课堂上的例子中,需要添加两个数字并显示总和,我发现很神秘的是,当它是两位数时,显示总和。 这是我的密码 mov al,num1 mov bl,num2 add al,bl add ax,3030h mov dl,ah mov ah,02h int 21h mov dl,al mov ah,02h int 21h mov ah,4ch int 21h 虽然加法可能会产

我对汇编编程一无所知。在课堂上的例子中,需要添加两个数字并显示总和,我发现很神秘的是,当它是两位数时,显示总和。 这是我的密码

    mov al,num1
    mov bl,num2

    add al,bl

    add ax,3030h

    mov dl,ah
    mov ah,02h
    int 21h

    mov dl,al
    mov ah,02h
    int 21h

    mov ah,4ch
    int 21h
虽然加法可能会产生一个压缩的数字,但如何将其解包并以十进制显示为两个不同的数字?

我对汇编也是新手。 但我认为这会对你有所帮助


.model small
.stack 100h
.data 
    msg1 db "Enter number 1:$"
    msg2 db "Enter number 2:$"
    msg3 db "Sum is:$"
    no1 db 0
    no2 db 0
    mysum db 0
    rem db 0


.code 
    mov ax,@data 
    mov ds,ax

;print msg 1
    mov dx,offset msg1 
    mov ah,09h
    int 21h

;read input no1
    mov ah,01h
    int 21h
    sub al,48
    mov no1,al

;print new line
    mov dl,10
    mov ah,02h
    int 21h

;print msg2
    mov dx,offset msg2
    mov ah,09h
    int 21h

;read input 2
    mov ah,01h
    int 21h
    sub al,48
    mov no2,al

;print new line 
    mov dl,10
    mov ah,02h
    int 21h

;print msg3
    mov dx,offset msg3
    mov ah,09h
    int 21h

;add two numbers
    mov dl,no1
    add dl,no2
    ;moving the sum to mysum
    mov mysum,dl

    ;clear AH to use for reminder
    mov ah,00
    ;moving sum to al
    mov al,mysum
    ;take bl=10
    mov bl,10
    ;al/bl --> twodigit number/10 = decemel value
    div bl
    ;move reminder to rim
    mov rem,ah
    ;to print (al) we move al to dl
    mov dl,al
    add dl,48
    mov ah,02h
    int 21h

    ;to print the reminder
    mov dl,rem
    add dl,48
    mov ah,02h
    int 21h

    mov ax,4c00h
    int 21h
end
这里我所做的就是把总数移到可以保存它的al。 然后我把它除以10,打印商和提醒。
如果你觉得有问题。你可以问。谢谢大家!

添加两个数字的简单汇编程序,如下所示:

.model small
.stack 100h
.data
 var1 db ?  
 var2 db ? 
 str db 0ah,0dh,'sum: $'      
.code
main proc             
    mov ax, @data  ; initialization of data segment
    mov ds, ax       

    mov ah, 1      ; input  var1 and var2
    int 21h
    mov var1, al  
    int 21h   
    mov var2, al

    mov bl, var1
    mov cl, var2           
    add bl, cl     ; addition of var1 and var2     

    mov al, bl           ;
    mov ah,0          
    aaa               

    mov bx,ax          
    add bh,30h
    add bl,30h

    mov ah,9
    lea dx,str
    int 21h

    mov ah,2
    mov dl,bh       ;showing sum 
    int 21h  

    mov ah,2
    mov dl,bl
    int 21h   
 main endp     

除以10,分别显示商和余数。
div bl
计算
AX/bl
,而不是
AL/bl
。这就是为什么你必须先归零啊。将剩余部分存储在AH中是一个只写操作。顺便说一句,您首先可以将
添加到AL中;您不需要一个
mysum
静态存储位置。使用寄存器保存数据,这就是它们的用途。