鱼C论坛

 找回密码
 立即注册
查看: 2631|回复: 3

监测点11.4,求高手详细解读,先谢了

[复制链接]
发表于 2012-3-10 19:58:14 | 显示全部楼层 |阅读模式
2鱼币
捕获.PNG 各种不懂呀,pop ax后(ax)=00001011?

最佳答案

查看完整内容

首先 标志寄存器是个16位的数据 ax 是个16位寄存器 这个你要知道 ax =0 push ax 这时候寄存器那保存的 ax 的值 和 栈中的值都是 0000 然后popf 注意这个是将栈中数据按位保存进标志寄存器(flag) 其实就是给标志寄存器所有的值都置0 然后 mov ax 0fff0h 赋值语句 add ax 0010h 加法 将结果存进ax中 关键在这里 这里因为加法产生了进位 所以进位标志位CF变为1 刚才因为给 标记寄存器全 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-10 19:58:15 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-3-12 08:30 编辑

首先   标志寄存器是个16位的数据       ax 是个16位寄存器    这个你要知道


ax =0   push ax    这时候寄存器那保存的 ax 的值 和 栈中的值都是    0000   
然后popf    注意这个是将栈中数据按位保存进标志寄存器(flag)   其实就是给标志寄存器所有的值都置0
然后 mov ax 0fff0h  赋值语句
add ax 0010h    加法 将结果存进ax中   关键在这里 这里因为加法产生了进位  所以进位标志位CF变为1  刚才因为给 标记寄存器全都置0了  所以现在CF为1了标志寄存器这个16位数据你把它当作16为数据来看的话他的值也就改变了不再是0000了
( 具体是多少呢   自己按照本章开始的表格找找CF在哪一位上其他各标志位的值是多少然后用2进制转换成16进制看看!!)
pushf   将改变后的标志寄存器进栈
pop ax 将栈中数据 出栈保存在ax中
and al, *****                  只看al的值   将 al 的高八位用0代替
and  ah,*******            只看ah的值   将   ah 的低八位用0代替   
这两句就不说了  把高八位 低八位拆开 然后按位进行  与运算  1and1 =1 0and0=0 1and0=0 0and1=0   
然后合并   得出 ax

评分

参与人数 1鱼币 +2 收起 理由
格式天下 + 2 很给力!

查看全部评分

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

使用道具 举报

发表于 2012-3-10 21:04:53 | 显示全部楼层
这个程序要在debug中验证,pop ax这条指令执行后,从栈中取出的数据是标志寄存器的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-11 19:25:16 | 显示全部楼层
本帖最后由 格式天下 于 2012-3-11 19:26 编辑

捕获.PNG 我先前没搞懂这个,现在明白了,谢谢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-19 22:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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