【问题标题】:output byte value in assembler在汇编器中输出字节值
【发布时间】:2010-03-31 02:42:28
【问题描述】:

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

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

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

比较数字,99 如果大于 99 标签则跳转 比较数字,9 如果大于介于 9 和 99 之间,则跳转标签 ;如果跳转失败,数字只有一位 打印数字(数字) 介于 9 和 99 之间标签: 将数字除以 10 printascii(商) printascii(模数) 跳到最后 over99标签: 将数字除以 100 printascii(商) 将模数存储在 between9and99Label 视为输入的位置 跳转到 9 到 99 之间的标签 结束: 返回

它适用于无符号字节:)

【问题讨论】:

  • 你能给我们一些关于你的环境的更多信息吗?这是一个模拟器还是你真的在写一个 8086 汇编程序?如果是真正的程序,您可以访问哪些操作系统服务?

标签: assembly x86-16


【解决方案1】:
// pseudocode for values < 100
printAscii (AL div 10) + 48
printAscii (AL mod 10) + 48

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

【讨论】:

    【解决方案2】:

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

    四位: .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 流行音乐

    【讨论】:

    • 对不起,这不起作用。假设我想打印数字 123?
    • 这会以十六进制打印出 AL 寄存器的值(请参阅en.wikipedia.org/wiki/Hexadecimal)。十进制数 123 等价于十六进制数 7B(又名 0x7B),这正是这段代码所要产生的。
    • 好的,然后竖起大拇指,但我想要一个十进制表示,这就是为什么当我看到你打破字节并且只打印两个字符时我解雇了你的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多