我正在编写一个函数来打印我的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再打印的选项吗?
答案 0 :(得分:0)
mov al, bl
。另一方面,您可以使用movzx
或movsx
进行零或签名扩展。AL
和AH
是AX
的两半(类似于其他寄存器,并进一步扩展到32位和64位寄存器)。