. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->标志寄存器
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关有符号数与无符号数,有点模糊,大虾指点一下。  [待解决] 回复[ 11次 ]   点击[ 617次 ]  
cairulong
[帖 主]   [ 发表时间:2008-06-14 13:15 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-27 16:45
在11章学习中,遇到有符号数与无符号数的困难。大虾帮帮忙
先举下例子!
mov al,80H
add al,80H

我的分析是这样的:

如果把80H当做无符号的话应该是80H+80H=100H 将会产生进位 cf=1 of=0(因为有符号数运算才会影响of) sf=1(因为最高位为1,SF把符号记下)zf=0 pf=0

2、如果把80H当做有符号数的话 80h=-128 那add al,80h 相当于(al)=-128-128=-256 那将产生溢出,of=1 sf=1 zf=0 cf=0 pf=0

我在debug中测试下了,执行完两条指令后 cf=1 of=1 sf=0 zf=1 pf=1 

所以我知道我的分析不对
那应该怎么样分析呢。请指点下!
ppt
[第1楼]   [ 回复时间:2008-06-14 17:55 ]   [引用]   [回复]   [ top ] 
荣誉值:56
信誉值:0
注册日期:2007-09-23 18:23
是有符号数无符号数在当前指令下cpu并不知道.
如果是有符号数就看of sf 位
如果是无符号数就看cf sf 位
就是cf 和 of 是独立的他们没有关系
cairulong
[第2楼]   [ 回复时间:2008-06-14 19:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-27 16:45
我还是对这个概念很模糊!没有领悟到要点。理解能力差呀。
帮我分析下我提到的例子好吗?
cairulong
[第3楼]   [ 回复时间:2008-06-15 19:52 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-27 16:45
给自己点耐心,一边自己学习,一边等高手回复!!
peterhui
[第4楼]   [ 回复时间:2008-06-15 21:59 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:21
注册日期:2007-08-13 23:04
看看这个贴中lion的回覆的内容,可能对你在无符号数及有符号数认识方面会有帮助,说得比较详细http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1012&qkSg=2&qID=7703&readSg=1
cairulong
[第5楼]   [ 回复时间:2008-06-16 08:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-27 16:45
如果是有符号数,我在程序中关心OF SF的结果就可以了。
如果是无符号数,我在程序中关心CF SF的结果就可以了。
反正CPU执行时都包括了两种运行。

这样子理解不知道对不对!
peterhui
[第6楼]   [ 回复时间:2008-06-16 10:59 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:21
注册日期:2007-08-13 23:04
那你再做一次你自己的例题,有问题再提。另外建议多看看本章论坛中的其它帖子,有些学习中相似的疑问,或许其它学友已经遇到并提出来了。我也是刚刚学到这章的一半,也是刚弄明白没多久,一起进步!
cairulong
[第7楼]   [ 回复时间:2008-06-16 19:22 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-27 16:45
再分析例子。
mov al,80h
add al,80h

无符号运算
80h+80h=128+128=256=100000000B al=00000000  从AL结果看出相应标志位 cf=1 

zf=1 sf=0 (al是8位寄存器可存放最大数无符号数255)

当做有符号数
1、80H+80H=-128+128=0   al=00000000 从AL结果看出zf=1 sf=0 of=0(结果没有超出-128~127的表示范围)
2、80H+80H=-128+(-128)=-256 al=00000000 从AL结果看出 zf=1 sf=0 of=1(结果等于-256,已经超出-128~127表达范围 所以进生溢出)

不知道这样分析对不对?批改一下!谢谢
peterhui
[第8楼]   [ 回复时间:2008-06-18 14:14 ]   [引用]   [回复]   [ top ] 
荣誉值:24
信誉值:21
注册日期:2007-08-13 23:04
有符号数时怎么还有两种情况?第一种“1、80H+80H=-128+128=0”是怎么出来的
cairulong
[第9楼]   [ 回复时间:2008-06-25 18:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-27 16:45
一个当做有符号,一个当做有符号算出来的。
cairulong
[第10楼]   [ 回复时间:2008-06-25 18:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-27 16:45
一个当做有符号,一个当做无符号算出来的。
p4ti5
[第11楼]   [ 回复时间:2008-09-18 19:27 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-08-29 16:35
80h=10000000

mov al,80h
add al,80h => (1000 0000 + 1000 0000 )= 1 0000 0000(产生9位二进数),结果(al)=00000000,
对无符号数来说,有进位,cf=1,对有符号数来说,有溢出,of=1,(有/无符号数的加减法运算相同,结果分别存放);
(al)=0, 所以zf=1(结果为0),pf=1(偶数个1),sf=0(al结果非负);
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved