-1

我正在编写一个函数来打印我的 16 位实模式汇编操作系统中的每个寄存器。我遇到了几个问题:

1 将 16 位寄存器移动到 8 位寄存器

mov al, bx

这给了我error: invalid combinations of opcodes and operands. 无论如何我可以做到这一点吗?

2 将值移动到ax影响ah和/或al

mov ah, 0x5
mov al, 0x10
mov ax, 0x20

还会ah持有 0x5 并al持有 0x10 吗?

3 打印寄存器的十六进制值而不是ASCII码?

mov ah, 0x0e
mov al, 0x4d
int 0x10

这会输出字符“m”而不是 0x4d 或 77 或 1001101 等。将 4d 转换为 0x34 和 0x64 然后打印的唯一选项是什么?

4

1 回答 1

0
  1. 由于 16 位不适合 8 位,因此您不能这样做。使用适当的 8 位寄存器,例如mov al, bl. 反过来,您可以使用movzxormovsx进行零扩展或符号扩展。
  2. 是的,AL并且AH是两半AX(对于其他寄存器类似,并进一步扩展到 32 位和 64 位寄存器)。
  3. 你需要转换,是的。
于 2014-04-11T16:26:05.747 回答