|
主题 : : 疑问:SF标志位的问题。 [已解决] |
回复[ 5次 ]
点击[ 360次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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的取值可以由结果的最高位来确定。而不是用看有符号数运算的正负。是这么一回事么?希望各位大大解答下。。
小弟拜谢。。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-11-14 19:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
是的。sf的取值可以由结果的最高位来确定。而不是用看有符号数运算的正负。add al,80h 这条指令加完之后不是等于零吗?所以,sf的值为零。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-11-15 16:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2011-04-29 14:07 |
多谢楼上。。我也自己设计了一个实验证明。。等下会上传de
-------------------------------------------------------------- | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-11-15 19:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51 |
|
|
|
|
|
[第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
--------------------------------------- | | |
|
|
|
|
[第5楼]
[ 回复时间:2011-11-16 12:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2011-04-29 14:07 |
此贴由 贴主 于 [ 2011-11-16 12:55 ] 结贴。 结贴原因:问题已解决 | | |