. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->标志寄存器
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于检测点11.4的一些疑问.  [待解决] 回复[ 8次 ]   点击[ 718次 ]  
ddiptg
[帖 主]   [ 发表时间:2011-04-26 19:35 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-05-10 10:43
assume cs:code

code segment
        mov ax,200h
        mov ss,ax
        mov sp,16
        mov ax,0
        push ax
        popf
        mov ax,0fff0h
        add ax,0010h
        pushf
        pop ax
        and al,11000101b
        and ah,00001000b
        mov ax,4c00h
        int 21h
code ends
end

我改成以上代码会debug中运行.

在执行pop ax时,后ax=3047H

3047H=00110000,01000111b

而我分析出来的AX=00000000,01000101b

这结果很不一样,求解

后面,我改了一下.

assume cs:code

code segment
        mov ax,200h
        mov ss,ax
        mov sp,16
        mov ax,0
        push ax
        popf
        pushf
        pop ax
        and al,11000101b
        and ah,00001000b
        mov ax,4c00h
        int 21h
code ends
end

执行pop ax后,得到AX=3002H

求解,为什么不是AX=0 ?
shuimx
[第1楼]   [ 回复时间:2011-06-04 15:02 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2011-05-28 09:49
遇到了同样的问题,不解。。。
shweei
[第2楼]   [ 回复时间:2011-06-27 16:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-06-25 01:04
这是我的分析:

mov ax,0
push ax                        ;
popf                        ;初始化        标示寄存器=00000000
mov ax,0fff0h                ;ax=0fff0h        标识寄存器=00000000
add ax,0010h                ;ax=0000h        标识寄存器=01000101        =0045H 
pushf                        ;标志寄存器进栈0045h                   
pop ax                        ;ax=45H
and al,11000101B        ;ax=00000000,01000101
and ah,00001000B        ;ax=00000000,01000101  (只改高位的)
                        ;ax=45
shweei
[第3楼]   [ 回复时间:2011-06-27 16:50 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-06-25 01:04
楼主你说debug 是这样的书上没教,咱不知道^_^
在执行pop ax时,后ax=3047H 

3047H=00110000,01000111b
shweei
[第4楼]   [ 回复时间:2011-06-27 16:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-06-25 01:04
h  漏了
lishenycy
[第5楼]   [ 回复时间:2012-10-13 18:40 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-09-30 22:11
这是我的分析: 

mov ax,0 
push ax                       
popf                        ;初始化            标志寄存器=0000 0000 0000 0000=0H
mov ax,0fff0h               ;ax=0fff0h      标志寄存器=0000 0000 0000 0000=0H
add ax,0010h                ;ax=0000h        标志寄存器=0011 0000 0100 0111=3047H  
pushf                       ;标志寄存器进栈3047h                    
pop ax                      ;ax=3047H 
and al,11000101B        ;ax=0011 0000 0100 0101=3045H (只改低位的)
and ah,00001000B        ;ax=0000 0000 0100 0101=0045H (只改高位的) 
                        ;ax=45H
fpamc
[第6楼]   [ 回复时间:2012-10-15 07:53 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:4
注册日期:2012-01-01 16:36
楼上是对的,
walwj
[第7楼]   [ 回复时间:2012-12-22 12:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-12-03 17:03
后面这几楼,到底知道楼主问的问题吗?  楼主的意思是下面的这几句, 
        mov ax,0
        push ax 
        popf 
        pushf 
        pop ax 

执行后如果按自己算的应该是ax=3000,可为什么会得到ax=3002?
我也在这个问题上困扰了很久··希望有大大们帮忙理解下!
lokh
[第8楼]   [ 回复时间:2018-02-27 16:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-04-16 12:55
第0、12、13强制为1,改不了
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved