作者loveflames (.....)
看板ASM
标题[心得]x86直接控制flag的方法
时间Sun Dec 31 02:51:06 2006
一开始想不到先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