【发布时间】:2020-10-15 19:26:19
【问题描述】:
我正在尝试打印我输入的 2 位数字,但在打印时遇到了问题。这是我的进步:
DATA SEGMENT
MSG1 DB "ENTER NUMBER : $"
DIGIT1 DB ?
DIGIT2 DB ?
BCD DB ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
LEA DX,MSG1
MOV AH,9
INT 21H
MOV AH,1
INT 21H
SUB AL,30H
MOV DIGIT1,AL
MOV AH,1
INT 21H
SUB AL,30H
MOV DIGIT2,AL
MOV AH,DIGIT1
MOV AL,DIGIT2
MOV CL,4
ROL AH,CL
ADD AL,AH
MOV BCD,AL
MOV AH,1
INT 21H
CODE ENDS
END START
我的代码可以接受 2 位输入,但它无法打印输入的 2 位添加数字,它会打印 Enter Number:
【问题讨论】:
-
Displaying numbers with DOS 展示了如何将二进制整数转换为十进制字符串。不过,解包 BCD 整数实际上更容易,只需 AND 和 shift。解包回数字。当然,如果你只是将两个 ASCII 数字分开保存,那就更容易了,当然,作为一个字符串,但我猜这“太简单了”。
标签: assembly dos x86-16 emu8086