年少青衫薄 发表于 2013-8-21 17:32:38

求ax中的值

求ax中的值

mov ax,0
push ax
popf
mov ax,0fff0h
add ax,0010h
pushf
pop ax
and al,11000101b
and ah,00001000b

佐少love 发表于 2013-8-21 17:32:39

本帖最后由 佐少love 于 2013-8-22 12:34 编辑

liufei_vip 发表于 2013-8-21 21:44 static/image/common/back.gif
mov ax,0
push ax
popf

你解释的不错,我就在详细的说说吧EFL寄存器:都是标志位EFL标志位: http://p.blog.csdn.net/images/p_blog_csdn_net/masefee/EntryImages/20090420/ASM.jpgmov ax,0
push ax
popf
mov ax,0fff0h
add ax,0010h;这之前只是为了改变 EFL寄存器,通过溢出的方式改变
pushf            ;把溢出的是压入栈,在通过pop ax 把EFL寄存器的值放入ax中
pop ax            ;下边的 与 运算就不用解释了!
and al,11000101b
and ah,00001000b

佐少love 发表于 2013-8-21 18:02:00

mov ax,0fff0h
add ax,0010h
可以看出 ax已经溢出了
ax = 0

565123 发表于 2013-8-21 18:11:36

测试结果是0045H

应该和标志寄存器有关

年少青衫薄 发表于 2013-8-21 20:58:55

565123 发表于 2013-8-21 18:11 static/image/common/back.gif
测试结果是0045H

应该和标志寄存器有关

你说的对,我就是不知道该怎么算,你能写出详细的步骤么

redking 发表于 2013-8-21 21:22:00

测试结果是0045H

应该和标志寄存器有关

liufei_vip 发表于 2013-8-21 21:44:11

mov ax,0
push ax
popf
mov ax,0fff0h
add ax,0010h //这步之后EFL=00000247
pushf
pop ax //这步之后ax=0247,下面的自己算吧。
and al,11000101b
and ah,00001000b

百度一下寄存器EFL,因为我看不懂,留给你自己看了。。。

牡丹花下死做鬼 发表于 2013-8-22 09:52:05

565123 发表于 2013-8-21 18:11 static/image/common/back.gif
测试结果是0045H

应该和标志寄存器有关

ax 溢出
mov ax,fff0   ax = fff0
add aax,0010ax = 0
and al,11000101 al = 00000000
amd ah,00001000 ah = 00000000
为什么我感觉是0 呢??

565123 发表于 2013-8-22 10:29:06

pushf 标志寄存器入栈,你不知道标志寄存器的值是多少啊。标志寄存器都会默默的改变的,而pushf在pop ax就是把标志寄存器的值赋给ax,所以ax要查表才知道

liufei_vip 发表于 2013-8-22 13:33:19

佐少love 发表于 2013-8-22 12:32 static/image/common/back.gif
你解释的不错,我就在详细的说说吧EFL寄存器:都是标志位EFL标志位: mov ax,0
push ax
popf


是滴,求鱼币。。。

蒍嗳變乖/ka 发表于 2013-8-24 11:50:08

{:5_97:}...........................
页: [1]
查看完整版本: 求ax中的值