CSAPP-程序及指令

CPU的基本结构与功能

image

CPI (Cycles Per Instruction)用于衡量电脑的性能
,指每条指令的时钟数

1
CPI=TC/IC

表示某个程序的所有指令的条数;TC表示执行某个程序所花费的时钟周期)

image
加深理解:
M【R【ebp】+8】指的是命令行参数首个地址,即char *str的地址,M【地址】等于在内存中取值,相当于这个就是strcpy的第二个实际参数str

而R【ebp】-16 意思就是buffer[0],即buffer的首地址

image

红线下面都是在CPU了里面进行操作

红线上面都是通过总线在外面进行操作

image

image

笔记:

取值令和PC+“1” 是并行的,(同时操作),“1”指一条指令的长度

在MIPS中,每个指令都是定长的,32位,占4位,因此实际上是PC+4

而在X86中,每个指令都不是定长的,是边长的,一定要在指令译码之后才能确定指令有多长

异常和指令区别:

异常指和处理中的这条指令有关的的问题

中断指和处理中的指令无关的问题

image

image

image

MDR:内存数据寄存器

MAR: 主存地址寄存器

image

GPR 8个通用寄存器 属于可见寄存器

EFLAGs 标志寄存器 属于半可见寄存器

EIP 指令指针 属于半可见寄存器

image

绿色的地址实际上是虚拟空间的地址。这里假定

取值令

取地址放到EIP中,再放到主存地址寄存器当中。55 89 e5 放在主存。

控制器会发出读命令(红线),存储器会根据读信号根据传入的地址寻找里面的数值

过一段时间后(取数时间) 数据就会放在数据线上。

指令译码

根据功能产生控制信号

image

R[esp]<-R[esp]-4 ESP处的地址-4 变成 bffefffc

M[R[esp]]<-R[ebp]

esp内容放到MAR

image

image

写信号,把要写的地址bffeffc 和写的内容(MDR中的bfff0020)传输到存储器中

image

image

而eax是0号寄存器,edx是2号寄存器

image

经过这条指令之后

image

结果变成这样

image

小结

image

练习答案

image

image

什么是指令寄存器?什么是程序计数器?

指令寄存器(IR,Instruction Register),是临时放置从内存里面取得的程序指令的寄存器,用于存放当前从主存储器读出的正在执行的一条指令。

什么是程序计数器PC?

程序计数器是用于存放下一条指令所在单元的地址的地方。

当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指令的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令。

访问存储操作与基本术语

imaeg

image

存储器的分类

按工作性质/存储方式分类

  1. Random Access Memory(RAM)

随机存取存储器

每个单元读写时间一样,与各单元所在位置无关,如内存

2.Sequential Access Memo在ry(SAM)

顺序采取存储器

数据按照顺序从存储载体的始端读出或者写入,因此存取时间长短与所在信息的位置有关。如磁带

image

其他分类方式

image

按功能/容量/速度/所在位置分类

寄存器:

封装在CPU中,用于存放当前执行的指令以及使用的数据

用触发器实现,速度快,x86 8个,MIPS 32个

高速存储(cache):

位于CPU内部或者附近,用来存放当前要执行的局部程序段和数据

用SRAM实现,速度可以与CPU匹配,容量小

image

内存与外存关系:

upload successful

存储器受CPU总线控制

存储器受CPU总线控制,总线就是链接CPU和存储器的数据线,地址线和控制线

由于地址线是36位,因此存储单元地址有2^36种可能性,即可以寻找地址的范围为0-2^32-1 即64GB

imaeg

Tmc>TA