. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->标志寄存器
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  疑问:SF标志位的问题。  [已解决] 回复[ 5次 ]   点击[ 360次 ]  
alimy
[帖 主]   [ 发表时间:2011-11-04 00:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2011-04-29 14:07
检测点11.2
mov al,10h     ;(al)=10h
add al,90h      ;(al)=a0h     当成有符号计算的话   90h 是  -122的补码。10h是自身的补码  相加为负  sf=1、最高位为1
mov al,80h    ;(al)=80h    
add al,80h     ;(al)=00h    当成有符号数 80h是    -128的补码。。-128+(-128)为负数。sf不是应该等于1 为什么等于0  还是说SF的值只取决与最高位符号位的值?
mov al,0fch    ;  (al)=0fch       
add al,05h      ;(al)=01h      当成有有符号数  0fch是 -4的补码。。-4+5  =1  为正。。sf =0   同时最高位为0
mov al,7dh     ;(al)=7dh
add al,0bh      ;(al)=88h      当成有符号数   7d 和0b 都是正数。结果为正数。但答案sf =1
复制代码



sf的取值可以由结果的最高位来确定。而不是用看有符号数运算的正负。是这么一回事么?希望各位大大解答下。。
小弟拜谢。。
tomato
[第1楼]   [ 回复时间:2011-11-14 19:22 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
是的。sf的取值可以由结果的最高位来确定。而不是用看有符号数运算的正负。add al,80h 这条指令加完之后不是等于零吗?所以,sf的值为零。
alimy
[第2楼]   [ 回复时间:2011-11-15 16:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2011-04-29 14:07
多谢楼上。。我也自己设计了一个实验证明。。等下会上传de
--------------------------------------------------------------
tomato
[第3楼]   [ 回复时间:2011-11-15 19:19 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
等待中。。。
alimy
[第4楼]   [ 回复时间:2011-11-16 12:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2011-04-29 14:07
看了一下。和书上的探索验证过程差不多。
--------------------------------------------
assume cs:code  

code segment  
    start:
         ;先来测试 SF是否右由 有符号数运算的正负  来确定
         mov al,-2     ;   (al)=0xFE   此时  sf=PL
         
         add al,-1     ;   (al)=0xFD    sf变为NG
               ;在没有溢出的前提下。是可以有符号数的正负来确定的。。
     mov al,-120  ;   (al)=0x88     sf 的值不变
     add al,-32         
 ;   (-32) =0xe0  作为有符号数的运算已经溢出     debug中  SF =PL
 ;(ax)=0x68 是0x88 + 0xe0得到的无符号数                
        ;最后 用位运算,无关于有符号数或者无符号数的运算结果。只与最高位有关了
                mov al,10000000B         
                and al,10000000B         ;sf 变为NG
                mov al,10000000B
                and al,01111111B          ;sf 变为PL

                
                mov al,80H
                add al,80H
                
                mov ax ,4c00H
                int 21H
    code ends  
end start  
---------------------------------------
alimy
[第5楼]   [ 回复时间:2011-11-16 12:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2011-04-29 14:07
此贴由 贴主 于 [ 2011-11-16 12:55 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(tomato):8分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved