0

我有一个十六进制值存储在寄存器对 B 中。我想按字符读取它。例如,在 B 中是 322(十六进制)我想在累加器 3 中,然后是 2,然后是 2(在 ASCII 中)。有可能吗?或者是否可以将此寄存器对存储到“字符串”中。通过字符串,我的意思是这一行->my_string: ds 30我对组装真的很陌生。

4

1 回答 1

2

我记得,“寄存器对 B”由 B 和 C 寄存器组成。C 是低 8 位,B 包含高 8 位。因此,如果您在 BC 中有一个值,并且想要获取十六进制数字(4 位),则该过程类似于:

  1. 移动 A,B
  2. 将 A 向右移动 4 位(见下文)。这会将数字的高 4 位放入 A 的低 4 位,并清除 A 的高 4 位。所以你有一个从 0 到 15 的数字。
  3. 将该值转换为十六进制数字(0-9,AF)。我似乎记得有一些不明显的方法可以做到这一点,但我不记得它是什么。
  4. 输出该值(或将其保存在内存中以便稍后输出)。
  5. 移动 A,B
  6. ANI 0x0F——这会将高 4 位归零,从而为您提供高字节的低 4 位。
  7. 执行步骤 3 和 4。
  8. MOV A,C
  9. 执行步骤 2、3 和 4
  10. MOV A,C
  11. 执行步骤 3 和 4

我已经很久没有写任何 8080 代码了,所以我不会在这里用损坏的代码来混淆你。我上面概述的步骤将满足您的需求。

请注意,我对 0x0F 的使用可能不是您的汇编程序的正确语法。我正在尝试立即使用十进制值 15 或十六进制值 F。我不知道您的汇编程序如何表示十六进制常量。

我认为 8080 没有移位指令。但是,它确实有旋转指令。因此,您要做的不是右移 4 位,而是右移 4 位,然后屏蔽低 4 位。那是:

RAR
RAR
RAR
RAR
ANI 0x0F
于 2015-03-17T21:33:00.587 回答