【Computer Science】【8086汇编】原码、反码和补码

本文介绍原码、反码和补码.

1. 数据、机器数与真值

1.1 计算机中的数据

在计算机中规定采用字节(Byte)、字(Word)、双字(Double Word)等单位表示数据.

  • 字节(Byte):8 位二进制数. 如 0000 0101 B,或表示成 05H;10000101B,或表示成85H.
  • 字(Word):16 位二进制数,等于 2 字节. 如 1100 0101 1101 0110 B,或表示成C5D6H.
  • 双字(Double Word):32 位十进制数,又称为双精度数,等于 4 字节. 如 23456789H.

1.2 机器数与真值

  在计算机中,对带符号数可用真值和机器数来表示. 所谓真值,就是带有 “+”、“-” 号的实际数值;所谓机器数,则是把 “+”、“-” 号数值化后所得到计算机实际能表示的数.

  在下面的描述中,规定二进制数以字节、字或双字表示. 当十进制转换为二进制数时,不够8位或16位,高位用0补齐. 为简便,以下均以字节机器数为例.

  机器数有三种码表示,分别是原码反码补码. 汇编语言中,数都是以补码的形式表示的,因此必须掌握数的补码表示和补码的运算.

2. 原码、反码和补码

2.1 定义

  • 原码:原码将最高位作为符号位,正数为0,负数为1,其余7位作为数值位.
  • 反码:正数的反码与正数的原码一样. 而求负数的反码时,符号位为1,数值位在原码的基础上求反.
  • 补码:正数的补码与正数的原码一样. 求负数的补码时,符号位为1,数值位在原码的基础上求反加1.

例 1   十进制数 +5 和 -5 分别表示成二进制数原码、反码和补码.

[ + 5 ] 原 = [ + 5 ] 反 = [ + 5 ] 补 = 0000   0101  B [+5]_{原}=[+5]_{反}=[+5]_{补}=0000\text{ }0101\text{ B} [+5]=[+5]=[+5]=0000 0101 B

[ − 5 ] 原 = 1000   0101  B [-5]_{原}=1000\text{ }0101\text{ B} [5]=1000 0101 B

[ − 5 ] 反 = 1111   1010  B [-5]_{反}=1111\text{ }1010\text{ B} [5]=1111 1010 B

[ − 5 ] 补 = 1111   1011  B [-5]_{补}=1111\text{ }1011\text{ B} [5]=1111 1011 B

例 2   变量 x x x y y y 是十进制数. x = 106 x=106 x=106 y = − 106 y=-106 y=106,求其原码、反码和补码.

原码:
[ x ] 原 = 0110   1010  B = 6A H [x]_{原}=0110\text{ }1010\text{ B}=\text{6A H} [x]=0110 1010 B=6A H
[ y ] 原 = 1110   1010  B = EA H [y]_{原}=1110\text{ }1010\text{ B}=\text{EA H} [y]=1110 1010 B=EA H

反码:
[ x ] 反 = 0110   1010  B [x]_{反}=0110\text{ }1010\text{ B} [x]=0110 1010 B
[ y ] 反 = 1001   0101  B [y]_{反}=1001\text{ }0101\text{ B} [y]=1001 0101 B

补码:
[ x ] 补 = 0110   1010  B [x]_{补}=0110\text{ }1010\text{ B} [x]=0110 1010 B
[ y ] 补 = 1001   0110  B [y]_{补}=1001\text{ }0110\text{ B} [y]=1001 0110 B

2.2 用公式求补码

 

[ x ] 补 = 2 n − ∣ x ∣ [x]_{补}=2^n-|x| [x]=2nx   其中, n n n等于二进制位数.

 

例 3 n = 8 n=8 n=8,求 [ − 5 ] 补 [-5]_{补} [5] [ − 128 ] 补 [-128]_{补} [128] .

[ − 5 ] 补 = 2 8 − 5 = 1   0000   0000  B − 101  B = 1111   1011  B = FB H [-5]_{补}=2^8-5=1\text{ }0000\text{ }0000\text{ B}-101\text{ B}=1111\text{ }1011\text{ B}=\text{FB H} [5]=285=1 0000 0000 B101 B=1111 1011 B=FB H

[ − 128 ] 补 = 2 8 − 128 = 1   0000   0000  B − 1000   0000  B = 1000   0000  B = 80 H [-128]_{补}=2^8-128=1\text{ }0000\text{ }0000\text{ B}-1000\text{ }0000\text{ B}=1000\text{ }0000\text{ B}=\text{80 H} [128]=28128=1 0000 0000 B1000 0000 B=1000 0000 B=80 H

2.3 从补码求真值

对负数补码的数值位再求反加1,且符号位变成 “-”,就得到其真值. 正数直接从补码得到真值.

例 3   给出补码,求其十进制真值.

0010   0010  B = [ + 34 ] 补 0010\text{ }0010\text{ B}=[+34]_{补} 0010 0010 B=[+34]

1001   0011  B = − 110   1101  B = [ − 109 ] 补 1001\text{ }0011\text{ B}=-110\text{ }1101\text{ B}=[-109]_{补} 1001 0011 B=110 1101 B=[109]

3. 补码运算

你可能感兴趣的:(#,8086汇编,补码)