打印汇编寄存器的十六进制值,将16位寄存器移动到8位寄存器和其他汇编问题

时间:2014-04-11 16:19:58

标签: assembly operating-system cpu-registers 16-bit real-mode

我正在编写一个函数来打印我的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再打印的选项吗?

1 个答案:

答案 0 :(得分:0)

  1. 由于16位不适合8位,所以不能这样做。使用适当的8位寄存器,例如mov al, bl。另一方面,您可以使用movzxmovsx进行零或签名扩展。
  2. 是的,ALAHAX的两半(类似于其他寄存器,并进一步扩展到32位和64位寄存器)。
  3. 你需要转换,是的。