1

问这个我有点惭愧,但我如何在汇编程序中输出一个字节的值?假设我在 AL 寄存器中有数字 62。我的目标是 8086。似乎只有输出它的 ascii 值的中断可用。

编辑:谢谢尼克​​ D,这就是我想要的。为了回答几个问题,我实际上使用的是模拟器,emu8086。该代码将用于使用过时设备的工厂中的一个小型应用程序(即这是一个秘密)。

使用 Nick D 的想法的解决方案看起来有点像这样:

比较数字,99
如果大于 99 标签则跳转
比较数字,9
如果大于介于 9 和 99 之间,则跳转标签

;如果跳转失败,数字只有一位
打印数字(数字)

介于 9 和 99 之间标签:
将数字除以 10
printascii(商)
printascii(模数)
跳到最后

over99标签:
将数字除以 100
printascii(商)
将模数存储在 between9and99Label 视为输入的位置
跳转到 9 到 99 之间的标签

结束:
返回

它适用于无符号字节:)

4

2 回答 2

2
// pseudocode for values < 100
printAscii (AL div 10) + 48
printAscii (AL mod 10) + 48

将值转换为字符串表示形式并打印出来。

于 2010-03-30T16:55:17.953 回答
1

我目前无法访问汇编程序来检查它,并且语法会根据您使用的汇编程序而有所不同,但这仍然应该传达这个想法。

四位:
.db '0'、'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、'A'、'B'、 'C'、'D'、'E'、'F'

; 如果需要保留 ebx,请这样做
推 ebx

; 获取 al 的前四位
mov bl, al
shl bl, 4

; 将其转换为 ASCII 十六进制表示
mov bl, [FOUR_BITS + bl]

; 将该值用作打印例程的参数
推 bl
调用 printAscii
流行音乐

; 获取 al 的后四位
mov bl, al
和 bl, 0xF

; 将其转换为 ASCII 十六进制表示
mov bl, [FOUR_BITS + bl]

; 将该值用作打印例程的参数
推 bl
调用 printAscii
流行音乐

于 2010-03-30T17:20:16.263 回答