. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
自由讨论区
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
标志寄存器问题请教
[待解决]
回复[
3
次 ] 点击[
510
次 ]
mouselove
[帖 主]
[ 发表时间:2008-07-17 14:54 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:13
信誉值:0
注册日期:2008-03-09 16:31
assume cs:code
stack segment
db 16 dup(0)
stack ends
code segment
start:
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 start
;执行程序后, of寄存器的值是不是为1?
younggay
[第
1
楼]
[ 回复时间:2008-07-17 17:43 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
执行程序后是什么概念??
执行到mov ax,4c00h之前么??
如果是的话,首先,要可以自行先去根据计算来看一下of是不是1,然后,最直接的就是在debug下运行后直接看标志寄存器的那几个值中的OF位就行了。
younggay
[第
2
楼]
[ 回复时间:2008-07-17 17:53 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
这好像是检测点的题目。
首先,
mov ax, 0fff0h
add ax, 0010h
pushf
pop ax
这里是重点,将计算结果影响后的标志寄存器赋值给ax,这里要注意,有意标志寄存器也是16位的,而我么那只是学习了其中某些位置上的个别标志为,有些标志为没有学习,所以,计算过程中会不确定某些位置的值,我们可以用*号先代替,然后
and al, 11000101b
and ah, 00001000b
这里就是一个技巧了,这样的处理让我们看到,恰好将我们不确定的那些*号标志位都屏蔽了,剩下的都是我们学过的标志位了。
所以,of为多少其实就是add后是否溢出了,我们只要将fff0H和0010H当作有符号数看待,然后进行计算,看一下结果是不是超过了ax就行了。
fff0H代表负数-16,而0010表示就是表示正数16,结果为0.所以,OF没有溢出。
这是我的分析,楼主应该将所有标志为的都分析出来,才能完成检测点的那个作业要求。
mouselove
[第
3
楼]
[ 回复时间:2008-07-18 17:43 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:13
信誉值:0
注册日期:2008-03-09 16:31
谢谢,是我太心急了,没有好好的用debug跟踪分析,谢谢楼上的回答,谢谢
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved