我对装配编程完全不熟悉。在课堂作业的例子中,需要添加两个数字并显示总和,我发现神秘的是当它是两位数时显示总和。 这是我的代码。
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
虽然添加可能会导致打包号码,但如何解压缩并显示为十进制的两个不同数字?
答案 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