0
所以我得到吸吮的thoose「標誌」和字節操作所以這裏的彙編代碼:字節操作編譯
loc_4097F5:
.text:004097F5 cmp [esi+1Bh], dl
.text:004097F8 jnz short loc_409812
.text:004097FA cmp [esi+6], dl
.text:004097FD jnz short loc_409812
.text:004097FF mov ecx, [ebp+490h]
.text:00409805 test cl, 2 ; How to represent this????
.text:00409808 jz short loc_40980F
.text:0040980A test ch, 1 ; How to represent this????
.text:0040980D jz short loc_409812
.text:0040980F loc_40980F:
.text:0040980F mov [esi+25h], dl
.text:00409812 loc_409812:
.text:00409812 mov ecx, [esp+18h+arg_0]
.text:00409816 cmp [ecx+8Ch], eax
這裏是通過反編譯器產生的僞代碼:
v13 = a3->field_454.TextureCaps;
if (!(v13 & 2) || BYTE1(v13) & 1)
*(_BYTE *)(v5 + 37) = v3;
任何想法如何代表此爲VC++ 6.0編譯器(與此代碼編譯)?
編輯:其實a3-> field_454是一個D3DCAPS9結構。
奇怪在這裏我讀:http://en.wikipedia.org/wiki/TEST_(x86_instruction),如果「如果AND的結果是0,ZF設置爲1,否則設置爲0」。但它似乎是相反的......無論如何這工作!謝謝! –
@ sasho648:不,這是正確的,這正是代碼的作用。如果第一個「AND」結果爲0,則執行「0040980F」處的指令。否則,如果第二個「AND」結果爲0,那麼該指令被繞過,因爲代碼跳轉到了「00409812」。因此,要執行該指令,第一個AND必須導致0 *或*第二個AND必須導致非0。 – DCoder