VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 52|回复: 8

一个关于Pushf和Popf的小问题

[复制链接]

1

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2020-2-6 07:00:01 | 显示全部楼层 |阅读模式
各位高手,小D初学汇编,碰到了点小问题,实在是想不通,希望各位高手能抽空指点一下我,谢谢了~~
小D学的是王爽的《汇编语言》,学到了标志寄存器,遇到了点小问题
标志寄存器有cf、pf、zf、sf、of、df等几个标志位
Pushf是把标志寄存器的值进栈
Popf是把值出栈
小D主要不明白的就是,Pushf进栈时是否把所有的标志位的值全都进栈了?
曾用debug监视过了sp在压栈前是ffec,sp压栈后是ffee,在这里算了一下2个字节的空间,放cf、pf、zf、sf、of、df的值,很显然是不够的,那pushf到底是不是把所有标志位的值全进栈了,还是仅仅只进栈部分呢?
希望知道的高手能回答我下,感激不尽!谢谢!
回复

使用道具 举报

0

主题

16

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2020-3-24 22:15:02 | 显示全部楼层
放这些值为什么不够啊?每个标志只有1位呀。
回复

使用道具 举报

1

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
 楼主| 发表于 2020-3-25 17:45:01 | 显示全部楼层
回楼上的前辈...
1位的那要怎么放进去??能说得详细点吗?
1的话就是直接进栈,而不是以01进栈吗?
刚才监视了一下值..
d 1802:ffec ffee
1802:ffe0                        80 32 00
为什么会有这样的值..实在想不通呐....
就算把所有的标志位的值放进来..也没这种奇怪的数字吧...?
回复

使用道具 举报

0

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2020-4-18 02:00:01 | 显示全部楼层
pushf执行的是把整个flag(标志寄存器的值压入栈)
flag寄存器也是16位寄存器,怎么会不够放呢?栈操作都是字操作,两个字节刚好压16个位。楼主把cf、zf、of、等标志位理解错了,这些标志位实际都包含在一个16位寄存器中,每个标志位只占一个位。
回复

使用道具 举报

0

主题

16

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2020-5-26 16:45:04 | 显示全部楼层
楼上说得不错,flag也是16位的寄存器,每一个标志占其中的一位。
回复

使用道具 举报

0

主题

2

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-7-4 15:00:02 | 显示全部楼层
nod 楼主大概钻到死胡同里了。标志寄存器或是16位或是32位,pushf与popf都是正常地工作啊。
不然怎么说是“标志位”呢,因为一个标志只占 1 bit
回复

使用道具 举报

1

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
 楼主| 发表于 2020-7-28 19:30:02 | 显示全部楼层
谢谢各位高手~
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-8-31 00:45:01 | 显示全部楼层
栈不是自顶向下增长吗,怎么pushf完sp会变大
回复

使用道具 举报

0

主题

1

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2020-9-3 20:30:01 | 显示全部楼层
对啊。pushf sp=sp-2啊,怎么还增大了呢?
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2020|verysource.com ( 京ICP备17048824号-1 )

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