Be_envious 发表于 2011-7-30 09:57:26

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 11:22:13

本帖最后由 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

Be_envious 发表于 2011-7-30 11:31:17

weixianlang 发表于 2011-7-30 11:22 static/image/common/back.gif
assume后面不用加冒号:               assume cs:code

非常感谢 {:5_110:}

yulin3192 发表于 2011-7-30 13:08:41

新手受教了
:lol:lol

wouiwhbn 发表于 2012-8-19 11:36:25

假设:标志寄存器 为mx,他就像ax,一样   标志寄存器里是16个位,其中有cf,of,sf,zf,pf,这几个就是重要的标志寄存位,希望可以帮你解惑!支持甲鱼

GeV20 发表于 2012-8-19 15:12:27

只有三个标志位是1,压栈后却有四个1.
貌似标志寄存器第(1)位的值总是1的?

pediyzhi 发表于 2012-9-12 08:52:19


看这个图应该明白了

然后最后两个And也是有深意的.你看下他的位数,就是你学过的Flag,对应这个表看下
他目的就是为了让你前面的pushf的值迷惑的时候最后通过这步给你正确了,要问为什么第一次入栈标志寄存器的值算不对.那是因为学的是入门知识,有很多位还没学.所以不对,通过下面的And来把这些没过的给去掉得到你学过到的答案

页: [1]
查看完整版本: 11.4不理解,求注释