为什么AX不等于0??
本帖最后由 linha0 于 2011-7-15 13:10 编辑mov ax,0
push ax ;将 0 压入栈中
popf ;将所有标志位,重置为 0
pushf ;将为 0 的标志位压入栈中
pop ax ;从栈中取出标志位
最后结果,AX为什么不等于0?
要求讲解原理过程?(我能看明白就行了)
沙发
我是菜鸟
现在只会加减 本帖最后由 天灾 于 2011-7-14 17:47 编辑
入栈出栈顺序出错,栈被破坏
mov ax,0
push ax
popf为何标志先出栈?与第四句对换测试正常
pushf 为何标志后入栈?
pop ax
天灾 发表于 2011-7-14 17:45 static/image/common/back.gif
入栈出栈顺序出错,栈被破坏
mov ax,0
push ax
不是这样的,上面我已经重新注释过了:L
本帖最后由 天灾 于 2011-7-14 19:59 编辑
linha0 发表于 2011-7-14 18:58 http://bbs.fishc.com/static/image/common/back.gif
不是这样的,上面我已经重新注释过了
好吧 加我研究下 谢谢
哈哈哈,悬赏还是我自己拿吧!(哎,还是被小甲鱼剥削一个鱼币去了!)
通过上面的测试,反过来想,标志寄存器默认为1100000000000010。也就是说标志寄存器的第15、14、1 位必定为1。如果要设置其它标志位,就是在这个基础上设置的。
因此,检测点11.4就说得通了。
:'(:'(:'(
小甲鱼,还我10个鱼币……………………
竟然不能自己拿自己的悬赏:Q:Q:Q :'(:'(:'(
小甲鱼,还我10个鱼币……………………
竟然不能自己拿自己的悬赏:Q:Q:Q 最高两位没试出来.只有一个位是1,不知道有没有弄错了.
哥们。。既然领不了。。赏给我好么。。。谢谢了 路过刚刚很久很久花见花开很快就还款计划计划法国风格和混合接口和计划各方各分行客户 本帖最后由 メ㊣逆ご帅☆ 于 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代替(小邪恶)
XXXX 0XXX 01XX X1X1
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
本帖最后由 GeV20 于 2012-8-21 23:45 编辑
To:13楼
你有没有看过,在执行到那两条and运算前的一行,"pop ax",这句执行过后,ax的值是多少?
注意它的二进制形式的第1位,也就是对应的CF位和PF位之间的位.
看完了就知道楼主在问什么了.
http://blog.csdn.net/do2jiang/article/details/5394350
围观大神们都好厉害的说!
页:
[1]