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



我正在创建一个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上的用户输入进行十进制计算?

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

你需要区分其文本表示.

当你通过DOS输入时。GetCharacter函数01h并按键盘上的5, DOS返回一个表示文本字符"5"的ASCII码;(0 x35)。如果你要对输入的数字进行任何计算,你需要把ASCII码留在后面,开始处理"真值",即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位数字组成。你的代码必须预见到这一点。

最新更新