[心得]x86直接控制flag的方法
一開始想不到先po什麼
就來談談flag registor
它是一個16位元的registor
第第第第第第第第第第第第第第第第
151413121110 9 8 7 6 5 4 3 2 1 0
位位位位位位位位位位位位位位位位
元元元元元元元元元元元元元元元元
第0位元 carry flag 當運算要進位或借位時設定
第2位元 parity flag 運算結果較低8位元有偶數個1時設定
第4位元 auxiliary flag 第3跟第4位元都要進位時設定
例:
mov al,00001100b
add al,00000100b
第6位元 zero flag 運算結果為0時設定
第7位元 sign flag 運算結果最高位元為1時設定
第8位元 trap flag 原本為0,需使用者設定,若它為1每執行一次指令會產生一次中斷
第9位元 interrupt flag 原本為0,需使用者設定,若它為1,cpu才接受外部中斷
第10位元 direction flag 若為0,執行字串處理指令時,esi跟edi是遞增,反之遞減
第11位元 overflow flag 1.正加正為負或負加負為正時設定
2.移位或旋轉指令後,符號位元被改變時設定
直接控制旗標的指令
std:set direction flag
sti:set interrupt flag
stc:set carry flag
cld:clear direction flag
cli:clear interrupt flag
clc:clear carry flag
sahf:先將欲設定的位元傳入ah,可控制flag registor較低的8位元
若要控制所有旗標
就得使用popfd(popf)取出esp內的值
例如在protected mode 設定overflow flag
sub esp,4 ;為了不改變原來的堆疊 故減4往下堆
mov word ptr [esp],0000100000000000b
popfd;堆疊回復 overflow flag設定
--
薔薇水晶の鼠径部のホールを強引に押し開き、貫通した。
そして、銀ちゃんの子宮奥のローザミスティカを執拗に突き上げられて
雪華綺晶のドレスも引き裂きたいです
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.225.19.243
ASM 近期熱門文章
PTT數位生活區 即時熱門文章