[英]Add 2 numbers in assembly language and print the result
需要幫助,如何添加兩個數字,然后在這里打印結果是我的代碼
.MODEL SMALL
.STACK 200H
.DATA
NUM1 DB 12
NUM2 DB 3
VAL DB ?
MSG1 DB "The sum is : $"
.CODE
BEGIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AL, NUM1
ADD AL, NUM2
MOV VAL, AL
LEA DX, MSG1
MOV AH, 9
INT 21H
MOV AH, 2
MOV DL, VAL
INT 21H
MOV AX, 4C00H
INT 21H
BEGIN ENDP
END BEGIN
我有一個輸出說
The sum is 0
我的代碼有什么錯誤?
通過將值恆定地除以10,您將得到余數中的單個數字 - 但是以“錯誤”順序(從最后到第一個)。 要以“正確”順序(從頭到尾)打印它,您可以通過PUSH
和POP
來反轉它們(關鍵字:LIFO =最后輸出):
.MODEL SMALL
.STACK 200H
.DATA
NUM1 DB 12
NUM2 DB 3
VAL DW ?
MSG1 DB "The sum is : "
DECIMAL DB "00000$"
.CODE
BEGIN PROC
MOV AX, @DATA
MOV DS, AX
XOR AX, AX
MOV AL, NUM1
ADD AL, NUM2
ADC AH, 0
MOV VAL, AX
MOV AX, VAL
CALL AX_to_DEC
LEA DX, MSG1
MOV AH, 9
INT 21H
MOV AX, 4C00H
INT 21H
BEGIN ENDP
AX_to_DEC PROC
mov bx, 10 ; divisor
xor cx, cx ; CX=0 (number of digits)
First_Loop:
xor dx, dx ; Attention: DIV applies also DX!
div bx ; DX:AX / BX = AX remainder: DX
push dx ; LIFO
inc cx ; increment number of digits
test ax, ax ; AX = 0?
jnz First_Loop ; no: once more
mov di, OFFSET DECIMAL ; target string DECIMAL
Second_Loop:
pop ax ; get back pushed digit
or ax, 00110000b ; to ASCII
mov byte ptr [di], al ; save AL
inc di ; DI points to next character in string DECIMAL
loop Second_Loop ; until there are no digits left
mov byte ptr [di], '$' ; End-of-string delimiter for INT 21 / FN 09h
ret
AX_to_DEC ENDP
END BEGIN
你不能這樣做,你不會看到數字,你必須得到ascii代表數字的十六進制值,代表你的結果。 非常基本的基礎知識。 讓我來尋找一個鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.