2 つの数字を追加したいのですが、見つけられないという問題があります。助けてください!
ありがとう
.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
dx
は初期化されておらず、 にジャンクが含まれていadd dx, ax
ます。
mov ah, 9
int 21h
これにより、 が指す $ で終わる文字列が出力され
dx
ます。この時点で何が入っているかはよくわかりませんdx
が、あなたの番号を表す $ で終わる文字列を指している可能性はほとんどありません!
2 つの数値を加算するまでは問題なく実行できました。ax
14 または 0Eh を保持する必要があります。これは、2桁を印刷するための「トリック」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!
それはかなり不安定になっている「記憶から」なので、間違っている可能性があります. それが「想定」されている方法であるかどうかは疑問です。「int 29h
内部使用」として文書化されていますが、最後に dos を実行したときに使用されていました。幸運を!