. : : 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