微型计算机原理2__王忠民著
重点内容 掌握数的概念及数制转换 掌握补码的运算、溢出的判别方法 [例]: Thank you very much 本章重点和难点分析 本章的重点和难点在于掌握数值转换及补码运算。 一、数制转换 数制转换重点要掌握十进制数转换为二进制数的方法,其转换一般用除2取余法(整数部分)和乘2取整法(小数部分)。 除了上述方法外,在实际应用过程中,还有一种称为拼凑的方法。 拼凑法:由该转换数最大的2的倍数逐步相减,并把逐步相减所记录的最大的2的倍数按其权值排列。 二、补码的加减运算及溢出判断 补码的加减运算的特点是符号位一同参加运算。作减法时,可将减数变补与被减数相加来实现。运算时要注意字长、数值范围及溢出判断。一般只有在同号相加或异号相减时,才可能产生溢出。 谢谢大家! 一个0有两种 表示方法! [+0]反 = 0 0000000 [-0]反 = 1 1111111 反码表示方式存在的问题 对整数进行加减 运算只有通过结果 才能确定符号 7 + -3 = 4 3 - 7 = -4 -3 - -4 =-1 -4 + 3 = 1 -4 - -3 = 1 反码进行加减法时存在的问题 例如,当n=8时,用反码计算: -4 + -3 = -7 1111 1011 + 1111 1100 ? +111110111 4 + -3 ? +-8 0 产生 溢出 100000000 ? ? 数的补码表示 (two’s complement) 补码的表示范围: –2n–1 ~ (2n–1–1) 求补码的方法 根据定义求补码 写出对应正数的原码, 按位取反+1 N=8 -128~+127 N=16 -32768~+32767 Ex.7: 已知:a=+2,b=–2,根据定义求a和b的补码[a]补和[b]补,设n=8。 根据公式有: ① [a]补 = a = [a]原 = (0000 0010)2 ② [b]补 = 2n – |b| = 28– |–2| = 28 – 2 1 0000 0000 - 10 1111 1110 Solution 2n就是模数 Ex.8: 已知:a=+2,b=–2,直接写出a和b的补码[a]补和[b]补。设n=8。 Solution ① [a]补 = [a]原 = (0000 0010)2 0 0 0 0 0 1 0 1 ② 先写出b的原码表示 1 1 1 1 1 1 0 1 ③ 除符号位外,数据位按位取反+1 Sign bite 数据部分 [b]补 [b]原 更一般的求负数的补码的方法: ① 先写出负数对应的正数的二进制表示; ② 连同符号位一起按位取反,然后再加上1。 Ex.9: 已知:b=–2,写出补码[b]补。设n=8。 Solution 0 0 0 0 0 1 0 0 ① 先写出+2的原码表示 1 1 1 1 1 1 0 1 ② 所有的位按位取反+1 当n=8时,反码的表示范围是? -128 ~ +127 [-2]补 [+2]原 为什么负数补码的编码多一个? [-128]补=[–28-1]补= 28–|–27| = 28 – 27 = 2 ? 27 – 27 = 27 = (1000 0000)2 当n=8时, –28-1 (-128)的补码是? Discussion 这是-128的补码 还是-0的补码? [–0]补= 28–0 = (1 0000 0000)2 – 0 = (0000 0000)2 = +0 补码可以 唯一表示0 ★ 可以唯一表示0,不存在+0和-0的问题。 ★ 计算机系统中采用补码运算仅用加法器就可实现所有算术运算;结果也为补码形式。 ★ 符号位可以与数值部分一起参加运算。 根据补码的定义,对于[a]补±[b]补有规则: [a]补-[b]补= [a-b]补 [a]补+[b]补= [a+b]补 补码表示的优点 Ex.10: 已知 a=+2,b=–3,设n=8,用补码加法计算 a+b。 根据 [a]补+[b]补= [a+b]补有: [a+b]补 =[+2]补+[–3]补 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 + 1 1 1