计算机系统II 定点数的加法运算 学习笔记

补码与移位运算详解
本文详细介绍了补码加减运算的原理及溢出判断方法,并解释了不同类型的移位运算及其应用场景,有助于深入理解计算机中数值运算的底层机制。

加减运算

一、补码的加减运算公式

1、
[X+Y]补 = [X]补 + [Y]补
[X-Y]补 = [X]补 + [-Y]补

说明:

1、使用补码进行加减运算,符号位和数值位一样参加运算。
2、补码的减法可以用加法来实现,任意两数之差的补码等于被减数的补码与**减数相反数的补码(这里有一个求补操作)**之和

在这里插入图片描述

那我们来举一些例子来说明一下这个运算:
在这里插入图片描述
2、判断补码运算的溢出
我在这里说明一下,我学习这个内容的时候,一直都弄不明白我们的机器检测溢出到底有什么用,然后我后来找到一个说服自己的理由就是:机器检测溢出,如果是下溢,机器就认为这个数是机器零如果是上溢,机器就没有办法表示这个数,然后可能会发生类似我们程序的一个报错了无法执行,这个时候我们可能要转换数据类型,我也不知道这个想法是对还是不对,所以这里就提出来,错误不要喷。(这个想法的来源是“浮点数的表示范围”)。下面我们切入正题

溢出:当运算结果超出机器数的表示范围时,称为溢出。计算机必须具备检测运算结果是否发生溢出的能力,否则会得到错误的结果。

对于加减运算,常用来判断溢出的方法:

1、确定发生溢出的情况:
正数相加,且结果符号位为1;
负数相加,且结果符号位为0;

<think>嗯,用户想了解指令系统与计算机组成原理的相关知识,看来ta正在学习计算机底层基础课程。结合之前的对话历史和系统指令,我需要用专业但易懂的方式组织内容,重点突出指令系统与硬件组成的关联性。 用户提供的引用材料很有价值:引用[1]提到指令系统是处理器设计的基础知识,引用[2]强调计算机执行指令的精确性,引用[3]补充了MIPX指令集案例,引用[4]则涉及指令执行的运算细节。这些恰好构成完整知识链:从指令特性(抽象层)到硬件实现(物理层)。 特别注意用户上次的问题聚焦快速排序实现,这次转向底层原理,说明ta的学习路径是从软件算法向硬件体系延伸。因此在设计回答框架时,我会刻意建立软硬件联系——比如最后举例时展示高级语言如何映射为机器指令。 引用材料提到原码/补码运算、存储系统等概念,这些与指令执行效率直接相关,但用户当前问题未明确要求深度讨论。我决定把存储器和运算器部分简化为背景知识,重点保留总线结构(引用[1][6])这个关键接口,因为它直接承担指令传输任务。 示例指令的选择很关键:用最基础的"MOV AX,5"和"ADD AX,BX"演示二进制编码,既避开复杂指令集差异(如引用[3]的MIPX),又能清晰展示操作码-操作数结构。乘法部分引用[4]内容较多,但用户问题未专门提及运算,故仅保留概念提示。 最后设计的问题兼顾层次性:1题巩固基础认知,2题拓展到现代架构(呼应引用[3]的指令集发展),3题结合硬件优化(关联引用[4]的运算原理)。特别增加第4题引导实践,这源于引用[2]强调的"精确命令"特性——用汇编实验能最直观体会该特性。 </think>好的,我们来梳理一下指令系统与计算机组成原理的核心知识及其关系: 指令系统(Instruction Set Architecture,ISA)是计算机硬件与软件之间的关键接口。它定义了计算机能够识别和执行的所有基本操作的集合、操作数的类型和寻址方式、寄存器组织、内存访问方式以及控制机制(如中断、异常处理)。**ISA 是计算机硬件(组成)对程序员可见的功能抽象层。** 计算机组成原理(Computer Organization)则关注如何用具体的硬件部件(如运算器、控制器、存储器、输入/输出设备)来实现 ISA 规定的功能。**它研究的是 ISA 在物理硬件上的具体实现细节,通常对程序员透明。** 以下是指令系统与计算机组成原理的核心知识点: 1. **指令系统的核心要素 (ISA 层面的抽象)** * **操作类型(Opcode):** 定义了指令执行的基本操作,如: * 数据传送:`MOV`, `LOAD`, `STORE`, `PUSH`, `POP` * 算术运算:`ADD`, `SUB`, `MUL`, `DIV`, `INC`, `DEC` * 逻辑运算:`AND`, `OR`, `NOT`, `XOR`, `SHIFT` * 控制转:`JUMP`, `BRANCH` (条件跳转), `CALL`, `RETURN` (过程调用/返回) * 输入/输出:`IN`, `OUT` * 系统控制:`HALT`, `INTERRUPT` 相关指令 * **操作数寻址方式(Addressing Modes):** 指定指令操作数的来源位置或指令执行后结果存放的位置。常见方式: * 立即寻址(操作数在指令中) * 寄存器寻址(操作数在寄存器中) * 直接寻址(操作数地址在指令中) * 间接寻址(指令给出的是操作数地址的地址) * 寄存器间接寻址(寄存器内容为操作数地址) * 相对寻址(PC += 操作数地址) * 变址寻址(基址寄存器 + 变址寄存器 = 操作数地址) * 隐含寻址(操作数隐含指定,如栈顶) * **数据类型:** ISA 支持处理的数据类型,如字节、字(16位)、双字(32位)、浮点数(单精度、双精度)、布尔值等。 * **寄存器组织:** CPU 内部提供的快速存储单元及其用途(如通用寄存器、程序计数器 PC、指令寄存器 IR、栈指针 SP、状态标志寄存器 PSW)。 * **内存组织:** 可寻址的内存空间大小(地址线宽度决定)、对齐要求、字节序(大端/小端)。 * **指令格式:** 指令在内存中的二进制编码格式,包括操作码字段、操作数字段(寻址方式、寄存器编号、立即数、地址等)的长度和布局。 * **异常和中断处理机制:** ISA 定义如何处理硬件异常(如除零、缺页)和外部中断请求。 2. **计算机组成原理的核心要素 (硬件实现层面)** * **中央处理器(CPU) - 指令的执行引擎:** * **数据通路(Datapath):** 包含寄存器文件、ALU(算术逻辑单元)、位器等,负责执行指令规定的具体操作(如加、减、与、或、位)和数据流动。 * **控制器(Control Unit):** 核心是 **指令译码器**。它读取指令寄存器(IR)中的指令,根据操作码(Opcode)和寻址方式生成一系列精确的 **控制信号**(Control Signals),协调数据通路中各个部件(选通多路器、启动ALU操作、控制寄存器读写)协同工作,完成指令的执行步骤(取指、译码、执行、访存、写回)。 * **寄存器组(Register File):** 提供CPU内部的高速存储。 * **程序计数器(PC)与指令寄存器(IR):** PC 存放下一条指令地址;IR 存放当前正在执行的指令。 * **存储系统:** * **层次结构:** 寄存器 -> 高速缓存(Cache) -> 主存储器(RAM) -> 辅助存储器(磁盘/SSD)。目标是兼顾速度、容量和成本。引用[1]提到的三层存储系统通常指 Cache-主存-辅存。 * **主存(RAM)工作原理:** 通过地址总线选择存储单元,数据总线进行读写。 * **Cache:** 高速小容量存储器,缓存主存热点数据,大幅提升访问速度。涉及映射策略(直接、组相联、全相联)、替换策略(LRU等)、写策略(写直达、写回)。 * **总线(Bus):** 连接计算机各主要功能部件(CPU、存储器、I/O设备)的公共通信通路。引用[1]第六章介绍了这个概念。总线定义了传输数据的物理标准(宽度、时序、协议)。常见总线类型:数据总线、地址总线、控制总线。 * **输入/输出系统(I/O):** * **I/O 接口:** 连接外部设备与计算机总线的桥梁(如串口、并口、USB控制器、网卡、显卡)。 * **I/O 控制方式:** 程序查询(CPU轮询)、中断驱动(设备完成发起中断)、直接存储器访问(DMA,设备直接与内存交换数据,不经过CPU)。引用[1][7]涉及此部分。 * **设备驱动程序:** 软件层,管理特定硬件设备。 * **运算方法与运算器(ALU):** 引用[2](运算器基础)、[4](乘法除法实现细节)深入探讨了硬件如何执行指令系统中的算术运算定点数原码/补码运算、浮点数运算)。这涉及到ALU的设计、加法器的优化(如先行进位)、布斯算法(Booth's Algorithm)用于补码乘法、不恢复余数法(加减交替法)用于除法等。 **指令系统与计算机组成原理的关系:** 1. **接口与实现:** ISA 是硬件呈现给软件(操作系统、编译器、应用程序)的接口规范。计算机组成原理是关于如何建造满足该接口规范的硬件机器。同一个 ISA(如 x86-64, ARM)可以由不同的微架构(Microarchitecture)实现(如 Intel Core i9, AMD Ryzen, Apple M1)。 2. **性能关键:** 计算机组成的设计(微架构)直接影响着执行 ISA 指令的速度和效率。例如,流水线(Pipeline)技术让多条指令的不同阶段重叠执行;超标量(Superscalar)技术允许同时发射和执行多条指令;乱序执行(Out-of-Order Execution)优化指令执行顺序;分支预测(Branch Prediction)减少控制转带来的停顿。这些都是组成原理层面的优化,目的是更快地执行 ISA 指令流。 3. **复杂性与效率权衡:** ISA 的设计(如复杂指令集 CISC vs 精简指令集 RISC - 引用[3]提到的MIPS)会直接影响硬件实现的复杂度和效率。CISC 指令复杂强大,单条指令功能多但硬件实现复杂;RISC 指令简单规整,硬件实现相对简单高效,编译器需要组合多条指令完成复杂功能。 **理解层次:** ```mermaid graph LR A[应用程序 & 高级语言] -->|编译/汇编| B[机器指令 ISA] B[机器指令 ISA] -->|控制 & 执行| C[微架构实现 <br>计算机组成原理] C --> D[硬件物理部件] ``` **示例:理解指令执行** 假设指令 `ADD R1, R2` (将寄存器 R2 内容加到 R1) 在硬件上如何执行(简化版): 1. **取指(Fetch):** 控制器将 PC 中的地址送到地址总线 -> 主存读取该地址处的指令 -> 数据总线传回指令 -> 存入 IR。 2. **译码(Decode):** 控制器译码 IR 中的指令:识别是 ADD 操作,源操作数在 R2,目标操作数是 R1。 3. **执行(Execute):** 控制器发出控制信号:选通寄存器文件,将 R1 和 R2 的值送到 ALU 的输入端口;控制 ALU 执行加法操作;ALU 计算结果。 4. **写回(Write Back):** 控制器发出信号,将 ALU 的结果写回到寄存器文件中的 R1。 5. **更新 PC:** PC 指向下一条指令地址(通常是 PC+指令长度)。 这个过程清晰地展示了 **ISA 指令(ADD R1, R2)** 如何在 **计算机组成(控制器、寄存器文件、ALU、总线)** 的协同工作下完成执行。 **总结:** 指令系统定义了计算机“做什么”(指令集、操作、接口),而计算机组成原理定义了“怎么做”(硬件结构、数据通路、控制逻辑、实现细节)。理解两者及其相互关系是掌握计算机工作原理的核心。 --- **相关问题** 1. **CISC 和 RISC 架构的主要区别是什么?它们在指令系统设计和计算机组成实现上有哪些不同的考量?** (结合引用[3]) 2. **流水线(Pipeline)技术如何提升指令执行速度?它可能会遇到哪些瓶颈(如结构冲突、数据冲突、控制冲突)?硬件层面如何解决这些冲突?(如旁路转发、分支预测)** 3. **高速缓存(Cache)在计算机存储层次结构中扮演什么关键角色?它的工作原理(地址映射、替换策略、写策略)是如何影响计算机整体性能的?** (结合引用[1]) 4. **如何理解“指令是计算机硬件唯一能直接识别和执行的语言”?尝试写一段简单的汇编代码(如计算 `a = b + c`)并说明其对应的机器指令(二进制形式)可能是什么样子的?** (结合引用[2]) [^1]: 计算机的组成原理与结构,计算机组成原理与结构。 [^2]: 计算机组成原理学习笔记。 [^3]: 计算机组成原理——总结复习篇。 [^4]: 【复习笔记】计算机组成原理复习重点——篇六。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值