在程序集中添加2个数字

时间:2013-01-11 09:34:15

标签: assembly i386

我想添加两个号码,但有一个问题我无法找到它请帮助我!

由于

.model small
.stack
.data

        data1 dw 6
        data2 dw 8
.code

main:

mov ax,@data
mov ds,ax
mov ax, data1
add ax, data2
add dx,ax
sub dx,'0'
mov ah,09h
int 21h
mov ah,1
int 21h

end main

2 个答案:

答案 0 :(得分:2)

dx未初始化且包含add dx, ax的垃圾邮件。

答案 1 :(得分:0)

mov ah, 9
int 21h

mov ah, 9 int 21h 这将打印指向的$ -terminated字符串。我们现在还不太了解dx中的内容,但它很可能指向代表您的号码的$ -terminated字符串!

你在添加这两个号码时做得很好。 dx应该保持14或0Eh。这是在ax中打印两位数的“技巧”...... al

; split the number in al
; "tens" place in ah, "ones" place in al
aam
; convert both digits from a "number"
; to ascii characters representing the numbers
add ax, 3030h
; we want to print leftmost character first
; so swap 'em
xchg al, ah
; print al
int 29h
; swap 'em back
xchg al, ah
; print al
int 29h
; please exit cleanly!

这是“从记忆中”变得非常不稳定,所以可能是错的。我怀疑这是不是“你应该”这样做的方式; split the number in al ; "tens" place in ah, "ones" place in al aam ; convert both digits from a "number" ; to ascii characters representing the numbers add ax, 3030h ; we want to print leftmost character first ; so swap 'em xchg al, ah ; print al int 29h ; swap 'em back xchg al, ah ; print al int 29h ; please exit cleanly! 被记录为“供内部使用”,但我最后一次使用它时曾经工作过。祝你好运!