2013-01-24 77 views

回答

4

你不說什麼處理器。 bl至少在x86處理器中是一個8位寄存器,但不能用於尋址。

爲什麼它是無效指令?那麼,彙編指令無效的原因是給定的處理器沒有這樣的指令。沒有可能的方法來編碼這條指令。在這種情況下(假設爲x86),使用bl或任何其他8位寄存器都不認爲有必要進行尋址。在16位代碼中,只能使用16位寄存器bx,bp,sidi進行存儲器尋址。 Wikipedia has a useful list of all possible addressing modes(請注意它使用英特爾語法,您的代碼採用AT & T語法)。

編輯:在AT & T語法信bmovb定義它具有一個8位操作數的交易。

爲了獲得更多或更少你的目標(使用bl尋址),你可以做其中之一(這些在英特爾(YASM/NASM)語法,某些彙編想byte ptr):

對於16-位代碼:

xor bh,bh 
mov [bx], byte 0x0f 

對於32位的代碼:

movzx ebx,bl 
mov [ebx], byte 0x0f 

對於64位的代碼:

movzx rbx,bl 
mov [rbx], byte 0x0f 
+0

您可能在答案的一開始就表示*註冊*而不是*處理器* – zxcdw

+0

@zxcdw當然可以。固定。 – nrz

+0

這就是我的想法,但不確定。謝謝! – amorimluc