11.4不理解,求注释
本帖最后由 weixianlang 于 2011-7-30 11:34 编辑assume:cs:code
code segment
start:
mov ax,0
push ax
popf
mov ax,0fff0h
add ax,0010h
pushf
pop ax
and al,11000101b
and ah,00001000b
code ends
end start
对于 ax=45h 我不知道是怎么来的 pushf 和 popf 是把标志寄存器里什么样的值压栈和弹出的
是压栈一个标志寄存器的值还是所有标志寄存器的值
我编译的时候显示 语法错误 我找不到错误在哪
求高手给个注释
本帖最后由 weixianlang 于 2011-7-30 14:46 编辑
mov ax,0
push ax
popf
mov ax,0fff0h
add ax,0010h ;CF = 1 , ZF = 1, PF = 1
pushf ; = 0047H = 100111B
pop ax ;ax = 0047h
and al,11000101B ;al = 45h = 1000101
and ah,00001000B ;ah =0assume后面不用加冒号: assume cs:code weixianlang 发表于 2011-7-30 11:22 static/image/common/back.gif
assume后面不用加冒号: assume cs:code
非常感谢 {:5_110:} 新手受教了
:lol:lol 假设:标志寄存器 为mx,他就像ax,一样 标志寄存器里是16个位,其中有cf,of,sf,zf,pf,这几个就是重要的标志寄存位,希望可以帮你解惑!支持甲鱼 只有三个标志位是1,压栈后却有四个1.
貌似标志寄存器第(1)位的值总是1的?
看这个图应该明白了
然后最后两个And也是有深意的.你看下他的位数,就是你学过的Flag,对应这个表看下
他目的就是为了让你前面的pushf的值迷惑的时候最后通过这步给你正确了,要问为什么第一次入栈标志寄存器的值算不对.那是因为学的是入门知识,有很多位还没学.所以不对,通过下面的And来把这些没过的给去掉得到你学过到的答案
页:
[1]