gpt4 book ai didi

assembly - 用汇编语言将 2 个数字相加并打印结果

转载 作者:行者123 更新时间:2023-12-02 03:35:32 25 4
gpt4 key购买 nike

需要帮助,如何将两个数字相加然后打印结果这里是我的代码

    .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,您将得到余数中的个位数 - 但顺序“错误”(从后到前)。要以“正确”的顺序(从前到后)打印它,您可以通过 PUSHing 和 POPing 反转它们(关键字: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

关于assembly - 用汇编语言将 2 个数字相加并打印结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23679521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com