无符号数和有符号数比较转移标志

 我来答
镜之勇者a2
2022-12-16 · 超过97用户采纳过TA的回答
知道小有建树答主
回答量:1215
采纳率:100%
帮助的人:28.1万
展开全部
无符号数和有符号数比较转移标志
摘要:在汇编语言中,对于数据谁大谁小的判断是经常会碰到的,数大小的判断包括判断两个无符号数之间的大小,也包括判断两个带符号数之间的大小,对于前者的判断可通过进位标志位CF来判断,但对于后者却要涉及到对符号标志位SF以及溢出标志位OF这两个状态标志位的综合分析,所以这两种数的处理方法是不一样的,如果混为一谈是很容易出错的,因此数大小的判断在汇编中必须值得注意。

在汇编语言里,对于数来说,可以将它们分成带符号数和无符号数,顾名思义,带符号数就是数的最高位为符号位,其余的为数值位;相反,若最高位不是符号位则称作为无符号数;但数的大小比较是不是也要分为这两种呢?也就是无符号数和带符号数的比较呢?下面就几个状态标志位来讨论一下。

1 讨论

1.1 标志寄存器FLAGS

标志(Flag)用于反映指令执行结果或控制指令执行形式。它是汇编语言程序设计中必须特别注意的一个方面。许多指令执行之后将影响有关的标志位;不少指令的执行要利用某些标志;当然,也有很多指令与标志无关。

8086有一个16位的标志寄存器FLAGS(其中存储的信息被称为程序状态字寄存器PSW:Program Status Word)。标志寄存器的标志有两类:6个状态标志和3个控制标志。

下面就简单介绍一下跟数的符号以及数的大小相关的几个状态标志位:

SF (Sign Flag): 符号标志位。它记录相关指令执行后,其结果是否为负。

CF (Carry Flag): 进位标志位。它记录了无符号数运算结果的最高位向更高位的进位值,或从更高位的借位值。

OF (Overflow Flag): 溢出标志位。它记录了有符号数运算的结果是否发生了溢出。

我们知道,数据处理是计算机的的基本功能之一,那么这些需要处理的数据是如何在计算机中表示的呢?

日常生活中,人们习惯使用十进制来表示数据,而计算机中采用的却是二进制数,并且可将数据分为无符号数与带符号数,无符号数全部的位都是数值位,而带符号数在最高位是符号位,若为1,则该数为负数,反之则为正数;而跟数据大小有关的标志位包括了CF、SF和OF。

1.2 进位标志位CF

当进行加减运算时,若高位发生进位或借位,则CF为1,否则为0。该标志位通常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围。

例如:255-67,这个减法中,被减数对应十进制数255,而减数是67,通过结果显示,最高位是0,说明该减法没有发生借位,此时CF=0,表示被减数是大于减数。从结果来看,是在0~255之间,没有超过范围,结果是正确的。

又再如:67-255,在这个减法中,被减数是67,减数是255,结果显示最高位是1,说明减法发生了借位,此时CF=1,表示被减数是小于减数。从结果来看,并不是在0~255之间,超过了范围,说明结果是错误的。

比如有一比较两无符号数大小的编程题:

有两个字节型无符号数分别放在X和Y两存储单元中,试比较两数大小,并且将较大者放在X单元里。源程序如下:

MOV AL, X

CMP AL, Y

JNC NEXT (或 JBENEXT) ;若X等于或等于Y,则AL直接存回X

MOV AL, Y ;若X小于Y,则是将Y的值存入X

NEXT: MOVX, AL

从上面的分析可以得知,对于无符号数的大小比较关键是看CF的值。若CF=0,说明前者大于后者,反之则是后者大于前者。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式