当前位置: 代码迷 >> 综合 >> 【Computer Science】【8086汇编】原码、反码和补码
  详细解决方案

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

热度:14   发布时间:2023-12-06 13:18:24.0

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

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]?=2n?x ? 其中, 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]?=28?5=1 0000 0000 B?101 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]?=28?128=1 0000 0000 B?1000 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. 补码运算

  相关解决方案