05 2023 档案
摘要:流水线化的一个重要特性就是提高了系统的吞吐量,不过会轻微增加延迟。 计算流水线 在现代逻辑设计中,电路延迟以微微秒或皮秒,也就是10的负12次方秒为单位进行计算。假设将系统执行的计算分为三个阶段,每个阶段需要100ps,然后在每个阶段之间放上流水线寄存器,流水线寄存器的延迟为20ps,这样每条指令都
阅读全文
摘要:将处理组织成阶段 为了实现流水线处理机制,要将指令组织成某个特殊的阶段序列,所有的指令遵循统一的序列,不同阶段放在不同硬件上进行处理。下面是对各阶段的简述。 取指(fetch):取指阶段从内存读取指令字节,地址为程序计数器(PC)的值。从指令中抽取出指令指示符字节的两个四位部分,称为icode(指令
阅读全文
摘要:在硬件设计中,用电子电路来计算对位进行运算的函数,以及在各种存储器单元中存储位。大多数现代电路技术都是用信号线上的高电压或低电压来表示不同的位值。在当前的技术中,逻辑1是用1.0伏特左右的高电压表示的,而逻辑0是用0.0伏特左右的低电压表示的。要实现一个数字系统需要三个主要的组成部分:计算对位进行操
阅读全文
摘要:程序员可见的状态 这里的程序员即可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器。程序员可见的状态如下,有15个程序寄存器(%rax,%rbx等),三个一位的条件(ZF,OF,SF) ,程序计数器PC,内存,状态码Stat(表明程序执行的总体状态,指示正常运行还是出现某种异常)。 指令编码
阅读全文
摘要:现代微处理器可以称得上是人类创造出的最复杂的系统之一。一块手指甲大小的硅片上,可以容纳一个完整的高性能处理器、大的高速缓存,以及用来连接到外部设备的逻辑电路。从性能上来说,今天在一块芯片上实现的处理器已经使20年前价值1000万美元、房间那么大的超级计算机相形见绌了。即使是在像手机、导航系统和可编程
阅读全文
摘要:理解指针 每一个指针都对应一个类型。这个类型表明该指针指向哪一类对象。如果对象类型为T,那么指针类型为T*,特殊的void *类型代表通用指针。 每一个指针都有一个值。这个值时某个指定类型的对象的地址。 指针用‘&’运算符创建。这个运算符可以应用到任何lvalue类的C表达式上,lvalue意指可以
阅读全文
摘要:结构 C语言的struct声明创建一个数据类型,将可能不同类型的对象聚合到一个对象中。用名字来引用结构的各个组成部分。类似于数组的实现,结构的所有组成部分都存放在内存中一段连续的区域内,而指向结构的指针就是结构第一个字节的地址。编译器维护关于每个结构类型的信息,指示每个字段(field)的字节偏移。
阅读全文
摘要:基本原则 对于数据类型T和整型常数N,声明如下: T A[N]; 起始位置表示为xa。这个声明有两个效果。首先,它在内存中分配一个L·N字节的连续区域,这里L是数据类型T的大小(单位为字节)。其次,它引入了标识符A,可以用A来作为指向数组开头的指针,这个指针的值就是xa。可以用0~N-1的整数索引来
阅读全文
摘要:过程是软件中的一种抽象,提供一种代码封装的方式,类似于函数。 要提供对过程的机器级支持,必须包含以下机制: 传递控制:在进入过程Q的时候,程序计数器必须被设置为Q的代码的起始地址,然后在返回时,要把程序计数器设置为P中调用Q后面那条指令的地址。 传递数据:P必须能够向Q提供一个或多个参数,Q必须能够
阅读全文
摘要:条件码 前面我们在操作数指示符和数据传送指令中介绍了整数寄存器,在 32位 CPU 中包含一组 8 个存储 32 位值的寄存器,即整数寄存器。它可以存储一些地址或者整数的数据,有的用来记录某些重要的程序状态,有的则用来保存临时数据。而这里我们要介绍的是条件码(condition code)寄存器。它
阅读全文
摘要:加载有效地址 leal 指令也称为加载有效地址(load effective address)指令,它实际上是 movl 指令的变形。它的指令形式是从存储器读数据到寄存器,但实际上它根本没有引用存储器。它的第一个操作数看上去是一个存储器引用,但该指令并不是从指定的位置读取数据,而是将有效地址写入到目
阅读全文
摘要:本章将详细学习汇编语言,了解如何将c程序编译成这种形式的机器代码。 数据格式 各种数据类型大小如下 操作数指示符 大多数指令有一个或多个操作数,指示出执行一个操作中要使用的源数据值,以及放置结果的目的位置。各种操作数的可能性被分为三种,第一种是立即数,用来表示常数值,不同指令允许的立即数范围不同,汇
阅读全文