|
主题 : : 关于检测点11.4的一些疑问. [待解决] |
回复[ 8次 ]
点击[ 718次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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 ? | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-06-04 15:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2011-05-28 09:49 |
|
|
|
|
|
[第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 | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-06-27 16:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-06-25 01:04 |
楼主你说debug 是这样的书上没教,咱不知道^_^
在执行pop ax时,后ax=3047H
3047H=00110000,01000111b | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-06-27 16:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-06-25 01:04 |
|
|
|
|
|
[第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 | | |
|
|
|
|
[第6楼]
[ 回复时间:2012-10-15 07:53 ]
[引用]
[回复]
[ top ] | |
荣誉值:30
信誉值:4
注册日期:2012-01-01 16:36 |
|
|
|
|
|
[第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?
我也在这个问题上困扰了很久··希望有大大们帮忙理解下! | | |
|
|
|
|
[第8楼]
[ 回复时间:2018-02-27 16:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-16 12:55 |
|