CSAPP第4章 处理器体系结构

第4章 处理器体系结构(持续更新)

这一章CMU 15-213没有相应的课程,老教授直接略过,从第五章开讲。个人觉得这一章可以参考清华大学的计算机组成原理课(刘卫东教授),刘教授讲的还是蛮清晰的,主要是讲的MIPS指令系统,大同小异吧。
不知道本章要花多久,毕竟大几十页,要想快速看完还要吃透,难度不小,心急吃不成热豆腐。慢慢来,看了下课程15-213后面的就没有第三章这么详细了,基本一节课一章内容,最多不超过两节。还是稳扎稳打,理解总结梳理好再进行。
写博文,一是为了锻炼自己的总结能力;二是督促自己,记录每天的学习内容,做好笔记;三是纲举目张,毕竟长时间不看就会望,有这个在,就有一个纲在,能回忆好好想想,再不济回头翻书也好有个对应关系,知道哪是哪。

指令集体系结构:一个处理器支持的指令和指令的字节级编码。
本章使用的指令集为Y86-64,基本上是x86-64指令集的子集。
指令集的重要性质是字节编码必须有唯一的解释。

4.1Y86-64指令集体系结构
1.程序员可见状态
能提供的寄存器,15个程序寄存器,3个一位条件码,程序计数器PC(存放当前正在执行指令的地址),DMEM内存 ,Stat状态码。
CSAPP第4章 处理器体系结构
2.Y86-64指令
数据传送指令4个:irmovq、rrmovq、mrmovq、rmmovq。它们的第一个字母表示源的类型(立即数、寄存器或内存),第二个字母表示了目的类型(寄存器或内存)。
整数操作指令4个:addq、subq、andq和xorq。
跳转指令7个:jmp、jle、jl、je、jne、jge、jg。
条件传送指令6个:cmovle、cmovl、cmove、cmovne、cmovge和cmovq。
出入栈指令2个:pushq和popq
停止指令:halt
3.指令编码
CSAPP第4章 处理器体系结构
左侧为汇编码,右侧为字节级编码。指令有的只有一个字节长,有的有操作数,指令编码更长。如上图,指令编码后可能会有寄存器指示符字节,指定一个或两个寄存器,寄存器字段称为rA和rB。个别指令后跟8字节的常数字。最大长度为10字节。
每条指令的第一个字节表明指令的类型。该字节可分两步分,高4位为代码部分,低4位是功能部分。代码值为0~0xB
CSAPP第4章 处理器体系结构

寄存器标识符范围:0-0xE,不访问寄存器,用ID值0xF表示。
CSAPP第4章 处理器体系结构
采用绝对寻址。
4.异常
当遇到异常,处理器会调用一个异常处理程序,处理遇到的某种类型异常。
涉及到状态码Stat值,含义解释如下图
CSAPP第4章 处理器体系结构
5.Y86-64程序
主要是对比了以下x86-64与Y86-64在对同样的C代码进行汇编时的一些区别。
6.Y86-64指令的详情
pushq和popq指令需要特别注意
pushq %rsp和popq %rsp
pushq指令会把栈指针减8,并且将一个寄存器值写入到内存中。有两种不同的约定:1是压入%rsp的原始值,2是压入减去8的%rsp的值。
popq指令可以将%rsp置为从内存中读取出的值,也可以置为加了增量后的栈指针。

上一篇:《深入理解计算机系统》(CSAPP)读书笔记 —— 第三章 程序的机器级表示


下一篇:CSAPP 3e操作环境搭建