Assembly 8086用户输入的简单十进制加法

Assembly 8086用户输入的简单十进制加法,assembly,x86,x86-16,Assembly,X86,X86 16,我正在创建一个8086汇编程序,要求用户输入一个十进制值,加上5,然后打印。但它使用十六进制值进行计算 例如,当我输入5时:它将是0x35+0x35=0x6A 然后,Ox6a将根据ASCII表格打印为“j” Im当前正在使用此中断进行用户输入 mov AH,01H INT 21H 这是到目前为止我的代码 .MODEL SMALL .STACK 300 .DATA MSG DB "Enter a number: $" msg2 DB 10,13, &qu

我正在创建一个8086汇编程序,要求用户输入一个十进制值,加上5,然后打印。但它使用十六进制值进行计算

例如,当我输入5时:它将是0x35+0x35=0x6A 然后,Ox6a将根据ASCII表格打印为“j”

Im当前正在使用此中断进行用户输入

    mov AH,01H
    INT 21H 
这是到目前为止我的代码

.MODEL SMALL
.STACK 300
.DATA

MSG DB "Enter a number: $"

msg2 DB 10,13, "Adding 5 to the number...$"

msg3 DB 10,13, "the number is: $"

.CODE


;init data segment
MOV AX,@DATA
MOV DS, AX
MOV ES, AX

;PRINT MSG
LEA DX,MSG
MOV AH,09H
INT 21H

;GET CHAR
mov AH,01H
INT 21H
MOV CL,AL


;PRINT MSG
LEA DX,MSG2
MOV AH,09H
INT 21H

;newl
MOV dl, 10
MOV ah, 02h
INT 21h
MOV dl, 13
MOV ah, 02h
INT 21h

;computations
ADD CL, 0x35

;PRINT MSG
LEA DX,MSG3
MOV AH,09H
INT 21H

;print char
MOV DL,CL
MOV AH,02H
INT 21H







EXIT:
MOV AH,4CH
INT 21H

END

如何从8086上的用户输入进行十进制计算

例如,当我输入5时:它将是0x35+0x35=0x6A

您需要区分数字其文本表示

当您通过DOS.GetCharacter函数01h输入并按键盘上的5键时,DOS将返回表示文本字符“5”(0x35)的ASCII码。如果要对输入的数字执行任何计算,则需要保留ASCII码,并开始使用“真值”,即5。转换只是减去48(0x30)

再加上5

添加5就是它的本来面目,而不是像您编写的那样添加0x35(53)

;GET CHAR
 mov AH, 01H
 INT 21H
 sub al, 48          ; From character to number
 MOV CL, AL

...

;computations
 ADD CL, 5           ; Calculation on numbers

...

;print result
 cmp cl, 10
 jb  IsSingleDigitResult
IsDoubleDigitResult:
 mov dl, "1"         ; Separately displaying the 'tens'
 mov ah, 02h
 int 21h
 sub cl, 10          ; Isolating the 'ones'
IsSingleDigitResult:
 add cl, 48          ; From number to character
 MOV DL, CL
 MOV AH, 02H
 INT 21H

对于5到9之间的所有输入,加5的结果将由2位数字组成。您的代码必须预见到这一点。

您非常喜欢复古计算。通常,您进行“二进制”计算,并以十进制打印数字(因此转换数字)。但这可能是一个赋值,所以我们希望您使用BCD()。你能具体说明是不是这样吗?我只需要使用8086和算术指令可用的中断。我将尝试研究BCD谢谢,但是,您应该只做从二进制到文本的基本转换(BCD可能会有帮助,但不是那么多,您仍然应该将值转换为字符串,BCD允许使用更少的除法,原则上数字可以任意长)对不起,但我不知道bcd如何能帮助我在假设用户输入为十进制时进行转换,您能给我一个详细的工作流程吗。例如,在用户输入值5之后?我认为您的问题只是“如何在汇编程序中将二进制数据转换为字符串”。