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

8086 simple decimal addition from user input

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

所以当我输入 5 例如:它将是 0x35 + 0x35 = 0x6A 然后 Ox6a 将根据 ASCII 表

打印输出 'j'

我目前正在使用此中断进行用户输入。

    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 上的用户输入进行十进制计算?

So when i input 5 for example: it would be 0x35 + 0x35 = 0x6A

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

当你通过DOS.GetCharacter函数01h输入并按下键盘上的5时,DOS returns一个代表文本字符“5”的ASCII码(0x35)。如果您要对输入的数字执行任何计算,您需要留下 ASCII 代码并开始使用 'true value',即 5。简单的转换就是减去48(0x30)。

add 5 to it

加 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

对于 59 之间的所有输入,加 5 的结果将包含 2 位数字。您的代码必须预料到这一点。