【问题标题】:Assembly register compares (8086)汇编寄存器比较 (8086)
【发布时间】:2014-04-04 00:35:06
【问题描述】:

我是汇编新手并创建一个程序,该程序在AX 寄存器中获取一个值,例如F43A,并将其转换为十进制的 ascii 字符串。

例如,AX = 8EFFh 将打印出-28929。 (将 2s 补码转换为 ascii)

我无法理解寄存器。我是否必须先将AX 寄存器转换为十进制,或者这是否暗示如果AX = 000Ah 以十六进制表示AX 也等于十进制的10。

也是这样

mov AX,000Ah
cmp AX,10

工作?

任何帮助将不胜感激。我们将使用基于AX 的十进制值的降幂算法。虽然AX 的输入值将是十六进制。

如果这不起作用,我将如何从AX 中获取十进制值?

【问题讨论】:

  • 请注意,当您引用十六进制值时,请将它们设置为 0x000A 或 000Ah

标签: assembly compare ascii x86-16


【解决方案1】:

CPU 基本上只知道二进制。汇编器、编译器或反汇编器仅提供便利实用程序来协助输入或输出更高抽象级别的数据(例如分组为十六进制数字或小数、有符号或无符号、浮点和指令,例如cmp ax, 10)。

cmp ax, 10 和各种cmp ax, 0x0acmp ax, $acmp ax, 000ah 都编码为相同的指令:xx 0a

您的任务确实是使用只知道“数字”的指令将 16 位数字(例如 8EFF)拆分为其组件(长度为 1..5 的数组)并使用 ASCII 转换输出。

在实现降幂算法时,请注意8086 DIV instructions 使用寄存器对 DX:AX 作为输入。

【讨论】:

    【解决方案2】:

    你可以通过除以10逆序得到数字,然后余数是最后一个数字,然后再除以10,余数是倒数第二个数字,...

    或者您可以除以 10,000,商是第一个数字,除非它为零。然后将余数除以1000,商就是下一位,...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 2016-11-11
      相关资源
      最近更新 更多