在汇编中显示两位数字?

时间:2014-04-07 10:18:37

标签: 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

虽然添加可能会导致打包号码,但如何解压缩并显示为十进制的两个不同数字?

2 个答案:

答案 0 :(得分:1)

我也是装配新手。 但我认为这会对你有帮助。

 
.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并打印商和提醒。 如果你觉得有问题。你可以问。谢谢 !

答案 1 :(得分:-1)

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

.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