|
发表于 2012-8-21 22:14:37
|
显示全部楼层
本帖最后由 メ㊣逆ご帅☆ 于 2012-8-21 22:49 编辑
mov ax,0
push ax ;将 0 压入栈中
popf ;将所有标志位,重置为 0
pushf ;将为 0 的标志位压入栈中
pop ax ;从栈中取出标志位
冒着采纳率降低的风险,回答你
你有好好看书么popf是讲堆栈内的数据弹出给标志寄存器
pushf是将所有标志寄存器入栈
把检测点11.4顺便给你讲一下
下面的程序执行后,ax的值是多少?
assume cs:codesg
datasg segment
db 16 dup(0)
datasg ends
codesg segment
start:
mov ax,0
push ax ;将0压栈
popf ;把栈中数据弹出给标志寄存器,也就是标志位清零
mov ax,0fff0h
add ax,0010h ;执行完ax值为0,进位,但没溢出
执行完
CF OF SF ZF PF
1 0 0 1 1
这里不知道的我们就用X代替(小邪恶)
X X X X 0 X X X 0 1 X X X 1 X 1
OF SF ZF PF CF
pushf;把状态寄存器入栈
pop ax ;放给ax
and al,11000101b ;取al=01XXX1X1b和11000101与操作完之后al=0100 0101b
and ah,00001000b ;取ah=XXXX0XXX和00001000b进行与操作ah=00000000b
mov ax,4c00h
int 21h
codesg ends
end start
那么结果就为45h
|
|