. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->标志寄存器
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  谁动了我的flag值?  [已解决] 回复[ 7次 ]   点击[ 328次 ]  
zcouyangpeng
[帖 主]   [ 发表时间:2009-03-20 14:59 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
mov ax,0
push ax
popf
pushf
pop ax---------按理说  ax=0 可是在debug这里ax=3002h。为什么
crazyman
[第1楼]   [ 回复时间:2009-03-22 14:54 ]   [引用]   [回复]   [ top ] 
荣誉值:152
信誉值:3
注册日期:2008-01-24 21:26
研究研究。。。
mouse
[第2楼]   [ 回复时间:2009-03-22 17:49 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
mov ax,0 
push ax 
-----------
这好理解,是“0"入栈了

popf 
pushf
-----------
那么这两条指令是干什么的呢??
abob
[第3楼]   [ 回复时间:2009-03-23 13:12 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
pop ax---------按理说  ax=0 可是在debug这里ax=3002h。为什么
-------------
不知道;) 
标志寄存器的3002H中为1的标志位,书上说是没有意义的标志位。在检测点11.4也用了and指令过滤掉了没有意义的标志位。我想这个问题可以不用管他,有兴趣可以研究一下。

书上说8086cpu的标志急促请你没有使用1、3、5等几个位,是不是当前系统使用了,比如虚拟dos。(没有资料和实际验证,只是推测)
abob
[第4楼]   [ 回复时间:2009-03-23 13:35 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
我在实dos下实验,得到ax=0002h。

可以推断标志寄存器的位中,几个没有意义的标志位也有使用到的(具体怎么用到的就不知道了,可能与操作系统有关)。

并且也可以进一步确认mov push pushf等数据传送指令不影响标志寄存器。
zcouyangpeng
[第5楼]   [ 回复时间:2009-03-26 14:25 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
确实,那些不在cpazstido内的标志寄存器 无法操作,也就是说他要么是1要么是0
zcouyangpeng
[第6楼]   [ 回复时间:2009-03-26 14:28 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
mov ax,0 
push ax 
-----------
这好理解,是“0"入栈了

popf 
pushf
-----------
那么这两条指令是干什么的呢??
------------------
回复:确定flag值是不是随时发生改变
zcouyangpeng
[第7楼]   [ 回复时间:2009-04-14 20:01 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
此贴由 贴主 于 [ 2009-04-14 20:01 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(crazyman):2分   2楼(mouse):2分   3楼(abob):8分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved