鱼C论坛

 找回密码
 立即注册
查看: 5743|回复: 14

为什么AX不等于0??

[复制链接]
发表于 2011-7-14 12:26:10 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 linha0 于 2011-7-15 13:10 编辑
mov ax,0
push ax        ;将 0 压入栈中
popf             ;将所有标志位,重置为 0
pushf           ;将为 0 的标志位压入栈中
pop ax         ;从栈中取出标志位

最后结果,AX为什么不等于0?

要求讲解原理过程?(我能看明白就行了)

最佳答案

查看完整内容

入栈出栈顺序出错,栈被破坏 mov ax,0 push ax popf 为何标志先出栈? 与第四句对换测试正常 pushf 为何标志后入栈? pop ax :handshake

评分

参与人数 1鱼币 +10 收起 理由
小甲鱼 + 10 自己解答,还你10鱼币~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-7-14 12:26:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2011-7-14 13:17:13 | 显示全部楼层
沙发
我是菜鸟
现在只会加减
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2011-7-14 17:45:11 | 显示全部楼层
本帖最后由 天灾 于 2011-7-14 17:47 编辑

入栈出栈顺序出错,栈被破坏
mov ax,0
push ax
popf  为何标志先出栈?  与第四句对换测试正常
pushf 为何标志后入栈?
pop ax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-7-14 18:58:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2011-7-14 19:04:23 | 显示全部楼层
本帖最后由 天灾 于 2011-7-14 19:59 编辑
linha0 发表于 2011-7-14 18:58
不是这样的,上面我已经重新注释过了


好吧 加我研究下 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-7-15 13:08:50 | 显示全部楼层
哈哈哈,悬赏还是我自己拿吧!(哎,还是被小甲鱼剥削一个鱼币去了!)

通过上面的测试,反过来想,标志寄存器默认为1100000000000010。也就是说标志寄存器的第15、14、1 位必定为1。如果要设置其它标志位,就是在这个基础上设置的。

因此,检测点11.4就说得通了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-7-15 13:12:52 | 显示全部楼层
:'(:'(:'(
小甲鱼,还我10个鱼币……………………
竟然不能自己拿自己的悬赏:Q:Q:Q
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-7-15 13:13:53 | 显示全部楼层
:'(:'(:'(
小甲鱼,还我10个鱼币……………………
竟然不能自己拿自己的悬赏:Q:Q:Q
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-20 20:10:26 | 显示全部楼层
最高两位没试出来.只有一个位是1,不知道有没有弄错了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-20 22:25:43 | 显示全部楼层
哥们。。既然领不了。。赏给我好么。。。谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-21 21:46:01 | 显示全部楼层
路过刚刚很久很久花见花开很快就还款计划计划法国风格和混合接口和计划各方各分行客户
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-21 23:36:03 | 显示全部楼层
本帖最后由 GeV20 于 2012-8-21 23:45 编辑

To:13楼
你有没有看过,在执行到那两条and运算前的一行,"pop ax",这句执行过后,ax的值是多少?
注意它的二进制形式的第1位,也就是对应的CF位和PF位之间的位.
看完了就知道楼主在问什么了.

http://blog.csdn.net/do2jiang/article/details/5394350

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-16 13:07:02 | 显示全部楼层
围观大神们都好厉害的说!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 10:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表