2014-04-11 52 views
-1

我正在写一个函数在我的16位实模式汇编操作系统中打印每个寄存器。我遇到的几个问题:打印汇编寄存器的十六进制值,将16位寄存器移动到8位和其他汇编问题

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
  1. 由于16位不适合8位,所以不能这样做。使用适当的8位寄存器,如mov al, bl。换句话说,您可以使用movzxmovsx进行零或符号扩展。
  2. 是的,ALAHAX的两个半部(类似地用于其他寄存器,并进一步扩展到32和64位寄存器)。
  3. 你需要转换,是的。