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
对于 5 和 9 之间的所有输入,加 5 的结果将包含 2 位数字。您的代码必须预料到这一点。
我正在创建一个 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
对于 5 和 9 之间的所有输入,加 5 的结果将包含 2 位数字。您的代码必须预料到这一点。