[心得]x86直接控制flag的方法

看板ASM (組合語言)作者 (.....)時間18年前 (2006/12/31 02:34), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
一開始想不到先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
文章代碼(AID): #15bh4vbE (ASM)
文章代碼(AID): #15bh4vbE (ASM)