如果我在8位寄存器DH
中保存一個值,比如10,然後在8位寄存器DL
中存儲另一個值15。這樣做還是會互相推翻,因爲它們都在32位EDX
寄存器中?x86部分寄存器使用情況
mov $10, %DH
mov $15, %DL
cmp %DL, %DH
jle done
基本上我只是混淆了,當我使用8位寄存器將如何影響32位寄存器,反之亦然。 謝謝。
另外,你可以保存價值7在EDX
和DH
和DL
仍然會有自己的價值,或者他們現在有7?
如果我在8位寄存器DH
中保存一個值,比如10,然後在8位寄存器DL
中存儲另一個值15。這樣做還是會互相推翻,因爲它們都在32位EDX
寄存器中?x86部分寄存器使用情況
mov $10, %DH
mov $15, %DL
cmp %DL, %DH
jle done
基本上我只是混淆了,當我使用8位寄存器將如何影響32位寄存器,反之亦然。 謝謝。
另外,你可以保存價值7在EDX
和DH
和DL
仍然會有自己的價值,或者他們現在有7?
DL
是DX
的最低有效字節,而DH
是DX
的最高有效字節。 DX
又是EDX
的最低有效字。
所以:
MOV EDX,0x12345678
; Now EDX = 0x12345678, DX = 0x5678, DH = 0x56, DL = 0x78
MOV DL,0x01
; Now EDX = 0x12345601, DX = 0x5601, DH = 0x56, DL = 0x01
MOV DH,0x99
; Now EDX = 0x12349901, DX = 0x9901, DH = 0x99, DL = 0x01
MOV DX,0x1020
; Now EDX = 0x12341020, DX = 0x1020, DH = 0x10, DL = 0x20
正如你所看到的,你可以寫信給DL
或DH
沒有他們互相影響(但你仍然是影響DX
和EDX
)。
而且,你能保存
EDX
和DH
和DL
值7仍然有自己的價值觀或將他們現在有7?
正如你可以從上面我的例子推斷,DH
會得到值0,DL
值7
如果解決DH和DL獨立,那麼值是單獨訪問,使用,只要保持因爲您不會執行會影響註冊表其他部分的操作。
例如
EDX------
DX --
DH DL
xor edx, edx ; edx = 0000 00 00
mov 01h, dh ; edx = 0000 01 00
mov 02h, dl ; edx = 0000 01 02
sub dh, dl ; edx = 0000 ff 01 <- Note that this doesn't
; overflow to the high word, because you
; are using only 8 bit registers
mov 80000001, eax
sub edx, eax ; edx = 8000 FF 03 <- Here you will affect
; the whole register, because you address it with 32 bit.