微机原理、汇编与接口技术笔记——计算机中的数制和编码3-10

计算机中的数制和编码

 ·常用数制     ----二,十,十六进制

            数后加B            表示二进制数

            带D或不带字母符号  表示十进制数

            带H                表示十六进制数

Ps:

            目前在计算机中,数几乎全部用二进制表示

            为书写方便,微机中的二进制数用十六进制数缩写

            人们最熟悉、最常用的是十进制数

·数制间转换

       1. 二←→十六

            *二→十六:从右(最低位)向左将二进制数4位1组划分,最后一组若不足4位则在其左边补0,每组用1位十六进制数表示

            例:1111111000111B→    1 1111 1100 0111B

                                            →0001 1111 1100 0111B = 1FC7H

            *十六→二:用4位二进制数代替1位十六进制数

        2.十六←→十

            *十六→十:将十六进制数按权展开相加

            例:1F3DH=163×1+162×15+161×3+160×13

                    =4096×1+256×15+16×3+1×13

                   =4096+3840+48+13=7997

            *十进制整数→十六:除16取余法

                    例:38947=9823H余数倒序排列

                        16 38947  3

                         16 2434  2

                          16 152  8

                             16 9  9

                                 0

            3.二←→十

                同理

·符号数的表示方法

            符号数的表示:用数的符号和数值部分一起编码的方法

            符号位:8位(字节)、16位(字)或32位(双字)机器数的最高位

·区分机器数、真值、无符号数

(1)原码:数值用其绝对值

                例:X1= 105=+1101001B     [X1]原=01101001B

                X2=-105=-1101001B     [X2]原=11101001B

         原码中第7位为符号位,其余7位为数值位(为真值的绝对值)


            8位原码数的数值范围为FFH~7FH(-127~127);

            16位原码数的数值范围为FFFFH~7FFFH(-32767~32767)

(2)反码

            正数的反码与原码一样,符号位为0,其余位为其数值;

            负数的反码为它的绝对值连同符号位按位取反

        一个负数的反码的数值部分并不是其真值的绝对值,要按位取反才能求得真值的绝对值

(3)补码

            正数的补码与原码一样,符号位为0,其余位为其数值;

            负数的补码为其绝对值的补数

补数有两种求法:

1.按位取反后再加1

        从最低位向最高位扫描,保留直至第一个“1”的所有“0”位,第一个“1”左边各位按位取反

            如:X1= 105=+1101001B   [X1]补=01101001B

            X2=-105=-1101001B   [X2]补=10010111B

2.对补码表示的负数求补可以得到其绝对值

            如:[-105]补=10010111B=97H

            求补,得:01101001=69H=105,即补码表示的机器数97H的真值是-69H(=-105)


一个补码数,若最高位为0,则该数即为此数的绝对值;

若最高位为1,则其补数为该数的绝对值


8位补码数的范围:80H~7FH(-128~127).

16位补码数的范围:8000H~7FFFH(-32768~32767)

补码数80H和8000H的最高位既代表了符号为负又代表了数值为1


1个二进制补码数的符号位向左扩展若干位后,所得到的补码数的真值不变

如:[68]补=44H→字节, [68]补=0044H→字

[-68]补= BCH →字节, [-68]补= FFBCH→字

微机中,符号数用补码表示!

·二进制数的加减运算

把机器数均当作无符号数进行运算,即符号位也参与运算

(1)无符号数的运算

两个无符号数相加----和为正数.当和超过其位数所允许的范围时,向更高位进位,用CF表示,无进位,CF=0 有进位,CF=1

两个无符号数相减----被减数大于或等于减数,无借位,结果为正;被减数小于减数,有借位,结果为负。对无符号数进行减法运算,其结果的符号用进位来判别:CF=0(无借位)结果为正;CF=1(有借位)结果为负

(2)符号数的运算

两数进行运算,结果超出表示范围会产生溢出;用OF表示

数的低位部分均为无符号数,只有高位部分才为符号数

溢出不同于补码运算中的进位或借位丢失

判断补码运算有无溢出的方法:

            设符号位向进位位的进位为CY,数值部分向符号位的进位为CS,则溢出判别式为:

                OF=CY ⊕ CS

  当OF=1时,有溢出;当OF=0时,无溢出

1 ⊕0=1, 1 ⊕1=0

·二进制数的逻辑运算与逻辑电路

(1)逻辑非→按位求反

(2)逻辑乘∧(逻辑与)→按位求“与”

    规则:0∧0=0,0∧1=0,1∧0=0,1∧1=1

(3)逻辑加∨(逻辑或)→按位求“或”

    规则:0∨0=0,0∨1=1,1∨0=1,1∨1=1

(4)逻辑异或⊕(按位加)→按位求模2和

    规则:0+0=0,0+1=1,1+0=1,1+1=0

(5)正逻辑与负逻辑

    正逻辑——高电平表示逻辑1,低电平表示逻辑0

    负逻辑——高电平表示逻辑 0,低电平表示逻辑1

·二进制编码

(1)二进制编码的十进制数

    即用二进制表示的十进制数,简称BCD数 ,常用的是8421 BCD码

            压缩BCD数→用8位二进制数表示2个十进制数位

            非压缩BCD数→用8位二进制数表示1个十进制数位

            如:

                19 →压缩BCD →0001 1001 = 19H

                19 →非压缩BCD →00000001 00001001 = 0109H

(2)ASCII码----字符在机内的表示

*十进制数的ASCII码转换成BCD数→ 减30H

      BCD数转换成十进制数的ASCII码→ 加30H

*将十六进制数的ASCII码转换为十六进制或将十六进制转换为十六进制数的ASCII码,要先判别ASCII码是在哪个区段内,然后再加或减30H或37H。

*十进制数的ASCII码转换为二进制数:

  将ASCII码转换为ASCII BCD数→写出ASCII BCD数的十进制数→将十进制数转换为二进制数

*二进制数转换为十进制数的ASCII码→过程与(3)相反

·BCD数的加减运算

BCD数低位与高位之间逢“10”进1,4位二进制数之间逢“16”进1。故BCD数进行运算后须进行调整

(1)BCD数加法

调整规则:和在0~9之间,保持不变;和大于9,加6调整

            如:48+59=107

                0100 1000+ 0101  1001=1010 0001

                1010 0001+0110 0110=10000 0111←BCD数

(2)BCD数减法

调整规则:差在0~9之间,不变;差大于9,减6调整

            如:28-19=9

                0010 1000- 0001  1001=0000 1111

                0000 1111- 0000 0110=0000  1001←BCD数

你可能感兴趣的:(微机原理、汇编与接口技术笔记——计算机中的数制和编码3-10)