【汇编】数制与数据编码

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

【汇编】数制与数据编码

文章目录

1、计算机中的数制

1.1 数制介绍

1.1.1 进制

不同进制是用于表示数字的不同数制系统它们在数学、计算机科学和工程中都有重要的应用。以下是一些常见的不同进制

  1. 二进制Binary
    • 二进制是计算机中最基本的进制只包含两个数字0和1。
    • 二进制在计算机内部表示数据和执行逻辑运算时非常重要。
  2. 十进制Decimal
    • 十进制是我们日常生活中最常用的进制包含0到9的十个数字。
    • 通常用于数学运算和人类交流。
  3. 八进制Octal
    • 八进制包含0到7的数字总共8个不同的符号。
    • 在计算机领域中较少使用曾经在某些早期计算机系统中流行。
  4. 十六进制Hexadecimal
    • 十六进制包含0到9的数字以及A到F或a到f共16个符号。
    • 十六进制常用于表示内存地址、颜色编码、二进制数据的可读格式等。
  5. 三进制Ternary
    • 三进制包含0、1和2这三个数字用于某些特殊应用中如量子计算机和某些三态逻辑电路。
  6. 任意进制
    • 除了上述常见的进制还可以有任意进制它们使用不同的基数来表示数字。例如五进制、六进制等。
    • 在某些特殊数学问题和编程场景中可以使用任意进制来表示数据。

每种进制都有其独特的特点和用途。在计算机科学中二进制是最基本的因为计算机硬件中使用的是二进制逻辑。其他进制通常用于数据的表示、调试、编码和交流特别是在计算机编程、数字电路设计和底层系统编程中。

了解不同进制以及如何在它们之间进行转换对于理解计算机中的数据表示和运算非常有帮助。在编程中也需要掌握进制转换的技巧以便处理不同进制的数据。

1.1.2 进制转换

当涉及不同进制之间的转换时以下是一些常见的进制转换示例

  1. 二进制到十进制
    • 二进制数101101
    • 十进制数(1 * 2^5) + (0 * 2^4) + (1 * 2^3) + (1 * 2^2) + (0 * 2^1) + (1 * 2^0) = 53
  2. 十进制到二进制
    • 十进制数27
    • 二进制数11011
  3. 八进制到十进制
    • 八进制数53
    • 十进制数(5 * 8^1) + (3 * 8^0) = 43
  4. 十进制到八进制
    • 十进制数124
    • 八进制数174
  5. 十六进制到十进制
    • 十六进制数1A
    • 十进制数(1 * 16^1) + (10 * 16^0) = 26
  6. 十进制到十六进制
    • 十进制数255
    • 十六进制数FF
  7. 二进制到八进制
    • 二进制数1101101
    • 八进制数155
  8. 八进制到二进制
    • 八进制数345
    • 二进制数1101001
  9. 十六进制到二进制
    • 十六进制数1F3
    • 二进制数11110011
  10. 二进制到十六进制
    • 二进制数1011101101
    • 十六进制数5ED

这些示例展示了不同进制之间的常见转换过程。对于进一步的转换可以使用计算器、编程语言中的函数或在线进制转换工具以便更容易地执行这些操作。理解进制转换对于计算机科学、数字电路设计和编程等领域都非常重要。

1.2 基本数学运算

1.2.1 原反补码

原码、反码和补码是用于表示带符号整数的不同编码方式。它们在计算机中具有重要的意义。下面分别详细介绍原码、反码和补码

原码Sign-Magnitude Representation

  • 原码最简单最直观的有符号整数表示方式。
  • 在原码中最高位表示符号位0表示正数1表示负数其余位表示数值的绝对值。
  • 例如+5的原码是00000101-5的原码是10000101。
  • 原码的优点是符号位直观容易理解。但它有一个严重的问题就是加法和减法的处理较为复杂需要分别处理符号位和数值位。

反码Ones’ Complement

  • 反码是在原码的基础上对负数部分按位取反0变11变0得到的表示方法。
  • 例如+5的反码仍然是00000101-5的反码是11111010。
  • 反码用于简化加法和减法的操作因为不需要分别处理符号位和数值位。
  • 但反码存在"零有两个表示形式"的问题即+0和-0都有不同的表示这导致了一些计算问题。

补码Two’s Complement

  • 补码是表示带符号整数的最常用方法也是计算机中广泛使用的方式。
  • 正数的补码与原码相同负数的补码是对其对应正数的反码加1。
  • 例如+5的补码是00000101-5的补码是11111011。
  • 补码解决了加法和减法操作的一致性问题使得计算机可以使用相同的加法电路执行这两种操作。
  • 补码也能够简单地检测溢出因为它的溢出条件与正溢出和负溢出都相关。

总的来说补码是计算机中用于表示带符号整数的最常见和最实用的方法因为它简化了算术运算和处理负数的操作并且在处理溢出时更加方便。原码和反码虽然在理论上有其存在的合理性但在实际应用中并不常见因为它们有一些不便之处。理解这些编码方式对于处理整数的表示、运算和溢出非常重要。

1.2.2 加法&减法

在计算机中整数的加法是基本的算术运算之一它可以在不同进制下执行包括二进制、十进制、八进制和十六进制等。下面讲解加法的知识

二进制加法
二进制加法是在二进制数系统下执行的加法运算。它类似于十进制加法但只包含两个数字0和1。

  • 二进制加法规则
    • 0 + 0 = 0
    • 0 + 1 = 1
    • 1 + 0 = 1
    • 1 + 1 = 10这里的1写在当前位进位到下一位

进位Carry
在二进制加法中当两个位相加得到2时会产生进位。进位是在更高位上的1它会加到下一个位上。这是二进制加法的一个关键概念。

例如要计算二进制数1101和1011的和

  1101
+ 1011
-------
 11000

在这个例子中最低位的1加1得到10产生了一个进位然后将10写在最低位进位1被加到下一位依此类推。最终的结果是11000。

溢出Overflow
在有限位数的二进制表示中加法可能导致溢出。溢出发生在结果的位数超出了可表示的范围。例如在8位二进制中127 + 1将导致溢出因为它的结果128无法用8位二进制表示。

十进制加法
十进制加法与二进制加法类似但包含更多的数字0到9。

  • 十进制加法规则
    • 0 + 0 = 0
    • 0 + 1 = 1
    • 1 + 0 = 1
    • 1 + 1 = 2这里的2写在当前位进位到下一位
    • 8 + 7 = 15这里的5写在当前位进位到下一位

十进制加法和二进制加法一样也可以涉及进位和溢出的问题。

进位和借位
在十进制加法中进位和借位的概念与二进制类似。当两个位相加得到10时会产生进位将1加到下一位。而在减法中如果被减数小于减数则需要向高位借位。

总之加法是数学中最基本的运算之一无论是在计算机中还是在日常生活中都有广泛应用。在计算机中加法是进行算术运算和处理数据的关键操作之一因此理解不同进制下的加法规则和进位概念对于编程和计算机科学非常重要。

溢出&进位

溢出是在进行数学运算时结果超出了表示范围的情况。这种情况通常在有限位数的数值表示中发生如计算机中的整数表示。溢出问题可能导致错误的结果或未定义的行为因此需要仔细处理。以下是有关溢出以及解决方案的详细信息

溢出类型
在数学运算中有两种主要类型的溢出

  1. 正溢出Overflow
    • 正溢出发生在结果大于表示范围的情况下通常是最高位溢出。这意味着结果太大无法用相同位数的数据类型表示。
    • 例如在一个8位的无符号整数中255 + 1会导致正溢出因为结果256无法用8位表示。
  2. 负溢出Underflow
    • 负溢出发生在结果小于表示范围的情况下。这通常涉及到有符号整数的运算导致结果比最小值还小。
    • 例如在一个8位的有符号整数中-128 - 1会导致负溢出因为结果-129小于-128。

OFOverflow Flag和CFCarry Flag是计算机中的两个标志位用于标识算术运算中的溢出和进位情况。它们通常与处理器的标志寄存器相关联用于帮助检测和处理算术操作中的错误或特殊情况。

  1. OFOverflow Flag

    • 溢出标志Overflow Flag用于检测有符号整数运算中的溢出情况。当有符号整数运算的结果超出了表示范围时会设置溢出标志。
    • 例如在有符号整数加法中如果两个正数相加得到负数或两个负数相加得到正数那么就会发生溢出OF标志将被设置为1。
  2. CFCarry Flag

    • 进位标志Carry Flag用于检测无符号整数运算中的进位情况。当无符号整数运算的结果超出了表示范围时会设置进位标志。
    • 例如在无符号整数加法中如果两个很大的正数相加导致结果超出了数据类型的范围进位标志CF将被设置为1。

这些标志位在处理器的标志寄存器中程序员可以通过检查它们的值来判断运算是否发生了溢出或进位。在编程中通常会使用条件分支来处理这些标志以便在发生溢出或进位时采取适当的措施例如错误处理或修复运算结果。

总的来说OF和CF标志位是计算机体系结构中用于处理算术运算中的溢出和进位情况的重要工具帮助确保运算的正确性和可靠性。

补码运算

补码运算解决了多个与整数表示和算术运算相关的问题包括以下主要问题

  1. 一致性的加法和减法
    • 使用补码表示计算机可以使用相同的硬件和操作来执行加法和减法运算。这简化了运算器的设计和运算的实现因为不需要单独处理减法操作。
    • 无需单独的减法电路或指令只需执行加法并处理进位可以实现一致的加法和减法。
  2. 减法的简化
    • 在补码中减法可以视为加法的操作只需要对被减数取其补码然后执行加法。这消除了在计算机中实现独立的减法电路的需要。
    • 例如要计算A - B可以计算A + (-B)其中-B表示为其补码。
  3. 防止溢出
    • 补码可以更容易地检测溢出因为只需要检查最高位的进位。如果进位发生了那么溢出就发生了。这使得处理溢出变得更加可控。
    • 在有符号补码中正溢出和负溢出可以通过进位来区分使得溢出条件更加清晰。
  4. 无需特殊处理零
    • 在补码中零的表示和处理与其他数字一致。零的补码表示为全零这使得零的处理更加简单无需特殊情况。
  5. 提供了唯一的表示
    • 补码中每个整数都有唯一的表示而原码和反码中存在正负零有多种表示的问题。这有助于减少歧义和提高数学运算的一致性。

当使用补码表示进行加法和减法时下面是分别针对加法和减法的示例

加法示例

假设我们使用8位补码表示法考虑将两个整数相加3二进制补码为00000011和 -2二进制补码为11111110。

  1. 首先将它们的补码表示对齐到8位

    00000011
    11111110
    
  2. 接下来执行二进制加法从最低位右边开始逐位相加并处理进位

      00000011
    + 11111110
    --------
      00000001
    
  3. 最终的结果为00000001。这是它的补码表示需要将其转换为十进制

    00000001的十进制值是 1。

所以3 + (-2) 的结果为 1。

减法示例

现在假设我们要执行减法5二进制补码为00000101减去 3二进制补码为00000011。

  1. 将它们的补码表示对齐到8位

    00000101
    00000011
    
  2. 执行减法从最低位开始逐位相减。没有进位所以结果如下

      00000101
    - 00000011
    --------
      00000010
    
  3. 最终的结果为00000010。这是它的补码表示需要将其转换为十进制

    00000010的十进制值是 2。

所以5 - 3 的结果为 2。

这两个示例展示了使用补码表示执行加法和减法的过程其中补码的特性使加法和减法的操作保持一致。

1.3 其他数据编码

  1. ASCII码美国信息交换标准码

    • 意义ASCII码是一种用于表示文本字符的编码方式。它将每个字符映射到一个唯一的7位二进制数值扩展的ASCII使用8位。ASCII码的目的是标准化字符的表示以便计算机可以处理文本数据包括英文字母、数字、标点符号和一些控制字符。

    • 应用ASCII码广泛用于计算机系统中的文本处理、通信协议、键盘输入和屏幕显示等。它使得计算机能够理解和处理文本信息并支持不同的编程语言和操作系统。

  2. BCD码二进制编码十进制

    • 意义BCD码是一种用于表示十进制数字的编码方式。它将每个十进制数字映射到4位二进制数值。BCD码的目的是以紧凑的方式表示十进制数字以便进行数字运算和显示。

    • 应用BCD码通常用于数字处理和显示设备如数码显示器、计算器和嵌入式系统。它可以更有效地表示和处理十进制数字避免了浮点数运算的精度问题。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6