2019年10月14日
1.指令集体系结构(Instruction-Set Architecture, ISA):一个处理器支持的指令和指令的字节级编码.
2.硬件控制语言(Hardware Control Language, HCL):一种描述硬件系统控制部分的简单语言.
4.1 Y86-64指令集体系结构
状态单元、指令集和他们的编码、一组编程规范、异常事件处理
4.1.1 程序员可见的状态
4.1.2 Y86-64指令
1.Y86-64 vs x86-64:
Y86-64指令集是x86-64的子集,只包含8字节(q)操作
前者简单,后者紧凑(常数值编码灵活、字段不固定)
2.Y86-64指令
(1)movq指令:irmovq,rrmovq,mrmovq,rmmovq(格式为: 源+目的+movq,源和目的包括i(instant number),r(register),m(memory);注意,不允许immovq或mmmovq)
(2)4个整数操作:addq,subq,andq,xorq(注意,只对寄存器操作,同时设置条件码ZF、SF、OF)
(3)7个跳转指令:jmp,jle,jl,je,jne,jge,jg
(4)6个条件传送指令:cmovle,cmovl,cmove,cmovne,cmovge,cmovg(注意:只能寄存器->寄存器)
(5)call,ret
(6)pushq,popq
(7)halt指令:停止指令的执行,并设置状态码Stat为HLT
注:目的地址Dest为8字节常数,使用绝对寻址(注意小端法)
4.1.3 指令编码
1.指令的字节级编码
(1)指令类型——第一个字节:高4位是代码部分code(0x0~0xB),低4位是功能部分function(见图4-3)
(2)寄存器指示符字节register specifier byte——第二个字节/无:存放寄存器标识符(register ID)——15个寄存器(0x0~0xE)、无寄存器(0xF)(见图4-4)
(3)常数字constant word——8字节:立即数V、地址指示符的偏移量D、目的地址Dest(见图4-3)
例:指令rmmovq %rsp, 0x123456789abcd(%rdx)的字节编码为4042cdab896745230100.
2.指令集重要性质:无二义性
3.CISC(复杂指令集计算机=x86-64)指令集 vs RISC(精简指令集计算机)
Y86-64 = CISC(x86-64)的采用 + RISC的简化
4.1.4 Y86-64异常——状态码Stat
遇到异常时更完整的处理:处理器调用异常处理程序(exception handler)(详见第8章)
4.1.5 Y86-64程序
YAS汇编器,YIS指令集模拟器
4.1.6 一些Y86-64指令的详情
x86-64处理器上:pushq %rsp总是压入%rsp的原始值,popq %rsp总是弹出%rsp的原始值.
4.2 逻辑设计和硬件控制语言HCL
硬件控制语言HCL(Hardware Control Language)
4.2.1 逻辑门
1.逻辑门:数字电路的基本计算单元
2.AND - &&, OR - ||, NOT - !
4.2.2 组合电路和HCL布尔表达式
4.2.3 字级的组合电路和HCL整数表达式
1.组合电路combinational circuits:很多逻辑门组合成一个网所构建的计算块(computational block)
2.简单的组合电路例子
(1)单个位的相等检测电路
HCL表达式:bool eq = (a && b) || (!a && !b);
(2)单个位的多路复用器(multiplexor)电路
HCL表达式:bool out = (s && a) || (!s && b);
(3)字级相等检测电路
HCL表达式:bool Eq = (A == B);
(4)字级多路复用器电路
HCL表达式:
word Out = [
s: A; //case (s==1): Out = A;
1: B; //default: Out = B;
];
(5)四路复用器
HCL表达式:
word Out4 = [
!s1 && !s0 : A; # 00
!s1 : B; # 01
!s0 : C; # 10
1 : D; # 11
];
(6)找最小值
HCL语言:
word Min3 = [
A <= B && A <= C : A;
B <= A && B <= C : B;
1 : C;
];
3.算术/逻辑单元(ALU)
4.2.4 集合关系
1.判断集合关系的通用格式:iexpr in {iexpr1, iexpr2, ..., iexprk}
其中,被测试的值iexpr和待匹配的值iexpri都是整数表达式.
4.2.5 储存器和时钟
1.时序电路(sequential circuit):有状态并且在这个状态上进行计算的系统
2.时钟:周期性信号,决定什么时候把新值加载到存储设备当中
3.存储设备:按位存储信息的设备
(1)时钟寄存器/寄存器:存储单个位或字
(2)随机访问存储器/内存:存储多个字,用地址来选择该读或该写哪个字
i. 处理器的虚拟内存系统
ii.寄存器文件:寄存器标识符作为地址(硬件寄存器vs程序寄存器)
4.硬件寄存器和时钟
“大多数时候,寄存器都保持在稳定状态(用 x 表示),产生的输出等于它的当前状态。信号沿着寄存器前面的组合逻辑传播,这时,产生了一个新的寄存器输人(用 y 表示),但只要时钟是低电位的,寄存器的输出就仍然保持不变。当时钟变成高电位的时候,输人信号就加载到寄存器中,成为下一个状态 yÿ 直到下一个时钟上升沿,这个状态就一直是寄存器的新输出。”
Y86-64 处理器会用时钟寄存器保存程序计数器(PC)ÿ 条件代码(CC)和程序状态(Stat)
5.寄存器文件
两个读端口(A和B), 一个写端口(W)