我有一個值爲0x01ABCDEF(十六進制值)的寄存器ecx 我想訪問只是BYTE 2(AB)爲了執行操作。 我曾嘗試使用CL或CH,但那些不訪問正確的字節。 我想這樣做:X86嵌入式彙編,訪問寄存器的特定部分
mov bh, [ecx+2]
,但它只是錯誤了...... 謝謝你在先進的時間和幫助!
我有一個值爲0x01ABCDEF(十六進制值)的寄存器ecx 我想訪問只是BYTE 2(AB)爲了執行操作。 我曾嘗試使用CL或CH,但那些不訪問正確的字節。 我想這樣做:X86嵌入式彙編,訪問寄存器的特定部分
mov bh, [ecx+2]
,但它只是錯誤了...... 謝謝你在先進的時間和幫助!
是 - CL會給你EF
和CH會給你在你上面所給定的值CD
。既然你不想這些,你就必須做一個轉變,以獲得字節在正確的地方:
mov ebx, ecx
shr ebx, 8
現在BH將有AB
和BL將有CD
。
編輯:從您的評論,你顯然並不真正需要在BH價值 - 相反,你只是想操縱這個特定字節,而不會影響ECX的其餘部分。在這種情況下,它可能是最容易做的是這樣的:
ror ecx, 16
not cl // placeholder for the manipulation
rol ecx, 16
這只是旋轉ECX,所以我們關心的字節是CL,然後操縱CL,然後旋轉ECX回去,這樣字節是從何時開始的。我應該補充一點,雖然這很簡單,但在某些處理器上它會很慢。 Pentium IV沒有桶式移位器,所以旋轉需要的時間與移動的位數成正比。更糟糕的是,操縱CL然後使用ECX可以(在這種情況下可能會)導致Partial Register Stall。這對你是否重要取決於你試圖完成什麼,以及它是否會被PRS期間可以執行的其他指令所包圍。
這個工程,但是然後我失去了其餘的ebx的內容,我需要把改變後的值放回到ecx(所以只需把更改的AB字節 – Quentin 2010-11-11 20:49:29
謝謝編輯!在這種情況下速度不是問題任務),所以它應該沒問題! – Quentin 2010-11-11 21:44:54