2014-04-11 84 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. 你需要轉換,是的。