80x86标志位相关
来源:互联网 发布:剑三 点绛唇捏脸数据 编辑:程序博客网 时间:2024/06/05 05:39
溢出与进位
1. 关于进位与溢出的本质说明,需重点理解
两者的区别:在计算机中,溢出代表计算结果是错误的,而进位不代表计算结果错误。进位是针对无符号数而言的,溢出是针对有符号数而言的。
2.进位与溢出的判断
a.从人的计算角度来看进位与溢出
无符号数的进位
一个字(16位) 的数有65536个 (2的16次方)
8个二进制位能够表达的无符号数范围是:0 ~ 255
16位表达的无符号数范围是:0 ~ 65535
对于无符号数来说,不存在溢出的问题,只存在进位的问题。例如129+129=258,超出一个字节的表示范围,最高位就会产生进位。
有符号数的溢出
8个二进制位能够表达的有符号数范围是:+127 ~ -128
16位表达的有符号数范围是:+32767 ~ -32768
如果运算结果超出了这个范围,就是产生了溢出。
溢出是指结束超出数据所表示的范围,通俗地说是装不下了。例如,两个带符号的字节数127和2相加,结果为129,因为带符号的字节数最大正数为127,所以超
范围,溢出 标志位OF为1,说明出错了。
从人的角度根据操作数的符号类型,可以判断两个数的运算结果是否会发生溢出或进位。
b.从编写程序的角度如何来看进位与溢出呢?
首先要明确计算机对于加减法的运算:计算机存储有符号数与无符号数据时,以补码的形式存储。对于 减法运算,先将减数化为负数,再以
补码形式存放到寄存器中,用加法电路完成被减数与减数补码的加法运算。即以同一套电路完成加减法运算。由于计算机的加法电路不区分有符号 数与无符号数,即无符号加法运算与有符号加法运算使用同一套电路产生运算结果。那么如何区分是产生了进位还是产生了借位呢?这就需要程序员的判断了。当编写汇编程序时,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。一般来说进位很容易判断,即使产生了进位结果也是正确的,直接带进位参与后续计算即可。而溢出呢,同号相加就要注意溢出了。
3. 进位与溢出的产生
那么计算机究竟是怎样产生进位与溢出的呢?
注意:以下内容为计算机组成原理的知识,编程人员只需掌握上述内容即可,下述知识对编程无影响,为计算机硬件自动进行的,无兴趣者,可忽略跳过。
对于溢出的判断
① 通过参加运算的两个数的符号及运算结果的符号进行判断。② 单符号位法。该方法通过符号位和数值部分最高位的进位状态来判断结果是否溢出。③双符 号位法,又称为变形补码法。它是通过运算结果的两个符号位的状态来判断结果是否溢出。
上述三种方法中,第一种方法仅适用于手工运算时对结果是否溢出的判断,其他两种方法在计算机中都有使用。在此仅通过具体例子对第②种方法做简要介绍。
若符号位进位状态用CF来表示,当符号位向前有进位时,CF=1,否则,CF=0;数值部分最高位的进位状态用DF来表示,当该位向前有进位时,DF=1,否则,DF=0。单符号位法就是通过该两位进位状态的异或结果来判断是否溢出的。 OF=CF^DF
若OF=1,说明结果溢出;若OF=0,则结果未溢出。也就是说,当符号位和数值部分最高位同时有进位或同时没有进位时,结果没有溢出,否则,结果溢出。
对于进位的判断
加法电路自动向前进位,CY位为1,说明有进位;为0,说明无进位。
- 80x86标志位相关
- 80x86标志寄存器图解
- 百度坐标与地理位相关接口
- weasis调节窗位相关代码分析
- 80x86汇编语言基础标志位篇
- 80x86处理器的标志寄存器
- x86 汇编语言标志寄存器
- 标志寄存器 x86汇编
- 关于iOS APP需要支持64位相关信息汇总
- iOS APP支持64位相关资料整理
- x86 中的算术标志位运用
- X86汇编语言标志位的符号表示
- X86(IA32)段权限标志位CPL DPL RPL详解
- X86(IA32)段权限标志位CPL DPL RPL详解
- int中位相关的操作:最高位1的位置、最低位1的位置、1的位数、最高位连续1的位数
- 80X86标志寄存器及比较和跳转指令 zf pf sf cf of df cmp je jne jb jnb ja jna
- 80X86标志寄存器及比较和跳转指令 zf pf sf cf of df cmp je jne jb jnb ja jna
- 80X86标志寄存器及比较和跳转指令 zf pf sf cf of df cmp je jne jb jnb ja jna
- 信息检索对程序员真重要
- 软件测试相关术语定义《全程软件测试》
- javac 可以生成Java文件,但是找不到,或者无法加载主类
- Java中泛型类和方法
- 欢迎使用CSDN-markdown编辑器
- 80x86标志位相关
- VideoView的转屏处理技巧
- Educational Codeforces Round 1 (A)模拟
- linux下关于逻辑卷相关配置
- 简单实现服务程序的一些问题
- [bzoj2132]圈地计划
- masonry 设置多行Label
- 安卓定制软件桌面(launch)上预置特定程序的widget
- Spark修炼之道(进阶篇)——Spark入门到精通:第六节 Spark编程模型(三)