|
主题 : : 谁动了我的flag值? [已解决] |
回复[ 7次 ]
点击[ 328次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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。为什么 | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-03-22 14:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:152
信誉值:3
注册日期:2008-01-24 21:26 |
|
|
|
|
|
[第2楼]
[ 回复时间:2009-03-22 17:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
mov ax,0
push ax
-----------
这好理解,是“0"入栈了
popf
pushf
-----------
那么这两条指令是干什么的呢?? | | |
|
|
|
|
[第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。(没有资料和实际验证,只是推测) | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-03-23 13:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07 |
我在实dos下实验,得到ax=0002h。
可以推断标志寄存器的位中,几个没有意义的标志位也有使用到的(具体怎么用到的就不知道了,可能与操作系统有关)。
并且也可以进一步确认mov push pushf等数据传送指令不影响标志寄存器。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2009-03-26 14:25 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
确实,那些不在cpazstido内的标志寄存器 无法操作,也就是说他要么是1要么是0 | | |
|
|
|
|
[第6楼]
[ 回复时间:2009-03-26 14:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
mov ax,0
push ax
-----------
这好理解,是“0"入栈了
popf
pushf
-----------
那么这两条指令是干什么的呢??
------------------
回复:确定flag值是不是随时发生改变 | | |
|
|
|
|
[第7楼]
[ 回复时间:2009-04-14 20:01 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
此贴由 贴主 于 [ 2009-04-14 20:01 ] 结贴。 结贴原因:问题已解决 | | |