【问题标题】:assembly getting the sum of inputs组装得到输入的总和
【发布时间】:2015-07-17 12:44:16
【问题描述】:

我在汇编中遇到问题,我无法获得 2 个输入数字的总和和乘积。我仍在努力得到总和,但似乎我无法得到它。我正在使用emu8086。你能帮我修复下面的这些代码吗?我还不能得到他们的产品。我是新手。谢谢。

.MODEL SMALL
.STACK 1000
.DATA
MSGA DB 13,10,"Input first number: ","$"
MSGB DB 13,10,"Input second number:","$"
MSGC DB 13,10,"The sum is: ","$"
NUM1 db ?
NUM2 db ?
NUM3 db ?
.CODE
MAIN PROC NEAR
MOV AX, @DATA
MOV DS, AX
LEA DX, MSGA
MOV AH, 09h
INT 21h
MOV AH, 01
INT 21H
SUB AL, '0'
MOV BL, AL
MOV AH, 01
INT 21H
SUB AL, '0'
MOV CL, AL
LEA DX, MSGB
MOV AH, 09h
INT 21h
MOV AH, 01
INT 21H
SUB AL, '0'
MOV DL, AL
MOV AH, 01
INT 21H
SUB AL, '0'
MOV DH, AL
MOV AL, CL
MOV AH, BL
ADD AL, DH
AAA
ADD AH, DL
MOV NUM1, AL
ADD NUM1, '0'
CMP AH, 9
JLE NOT_3DIGIT
IS_3DIGIT:
MOV AL, AH   
SUB AH, AH   
ADD AL, 0    
AAA          
ADD AH, 0    
MOV NUM2, AL
MOV NUM3, AH
ADD NUM2, '0'
ADD NUM3, '0'
LEA DX, MSGC
MOV AH, 09h
INT 21h
MOV DL, NUM3
MOV AH, 02H
INT 21h
MOV DL, NUM2
MOV AH, 02H
INT 21h   
JMP PRINT_LASTDIGIT  


NOT_3DIGIT:
MOV NUM2, AH
ADD NUM2, '0'
LEA DX, MSGC
MOV AH, 09h
INT 21h
MOV DL, NUM2
MOV AH, 02H
INT 21h   


PRINT_LASTDIGIT:
MOV DL, NUM1
MOV AH, 02H
INT 21h 


EXIT:
MOV AH, 4Ch
INT 21h 
MAIN ENDP
END MAIN

【问题讨论】:

  • 注释您的代码,尤其是如果您希望其他人提供帮助。此外,更准确地描述问题。鉴于你有 emu8086,单步调试你的代码,看看哪里出了问题。

标签: assembly sum dos x86-16


【解决方案1】:

您正在输入 2 位数字,因此在乘法之后您希望将答案转换回其原始 [十进制] 形式以进行显示。 这可以通过将其除以 10 然后相应地显示系数和余数来完成,这是一个乘法代码,它首先取一个 2 位数字,然后将其与另一个单位数字相乘, 但这只是给你一个想法:

.model small
.stack
.data
msg1 db 10,13,'First Value:','$';
msg2 db 10,13,'Second Value:','$'; 
msg3 db 10,13,'multiplication:','$';
second db ?
temp db ?
num1 db ?
num2 db ?
a db 10 

.code
main proc
mov ax,@data
mov ds,ax 
mov ah,09h
lea dx,msg1
int 21h
mov ah,01h
int 21h
sub al,30h
mul a
mov temp,al
mov ah,01h
int 21h
sub al,30h
add temp,al
mov [bx],al
mov ah,09h
lea dx,msg2
int 21h
mov ah,01h
int 21h
mov second,al
sub second,30h
mov ax,00h
mov al,temp
mul second
div a
mov num1,al
mov num2,ah
add num1,30h
add num2,30h 
mov ah,09h
lea dx,msg3
int 21h
mov ah,02h
mov dl,num1
int 21h
mov ah,02h
mov dl,num2
int 21h
mov al,0
inc bx
dec cx
mov ah,4ch
int 21h
main endp
end main

希望对你有帮助!

【讨论】:

  • 您的代码缺少 cmets,因此请继续希望它会有所帮助!它有不一致和非常明显的错误。请修改你的答案。
  • 我真正想在窗口中出现的内容是这样的:你输入2个十进制数,就会显示这两个数的和和乘积。
猜你喜欢
  • 2022-11-21
  • 2015-11-11
  • 2020-07-14
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 2019-04-27
  • 2021-05-20
  • 1970-01-01
相关资源
最近更新 更多