【发布时间】:2021-02-15 09:53:12
【问题描述】:
我正在创建一个 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 上根据用户输入进行十进制计算?
【问题讨论】:
-
你很复古的计算。通常您进行“二进制”计算并以十进制打印数字(因此转换数字)。但也许这是一项任务,因此预计您使用 BCD (en.wikipedia.org/wiki/Intel_BCD_opcode)。如果是这种情况,你能具体说明吗?
-
我只需要使用可用于 8086 和算术指令的中断。我会尝试研究 BCD 谢谢,
-
但是,您应该只进行从二进制到文本的基本转换(BCD 可能会有所帮助,但不是很多,您仍然应该将值转换为字符串,BCD 允许它使用更少的除法,并且在原则上,数字可以随心所欲)
-
抱歉,当假设用户输入为十进制时,我看不到 bcd 将如何帮助我进行转换,你能给我详细的工作流程吗?例如,在用户输入值 5 之后?
-
我认为您的问题只是“如何在汇编程序中将二进制数据转换为字符串”。