第六周

第四章 处理器体系结构

 

前言:指令集结构(ISA):一个处理器支持的指令和指令的字节级编码(不同处理器有不同的ISA)

 

4.1 Y86指令集结构

<4.1.1> Y86的处理器状态类似于IA32

        8个程序寄存器:

%eax

%esi

%ecx

%edi

   %edx

%esp

   %ebx

%ebp

(%esp被入栈,出栈,调用和返回指令作为栈指针)

3个一位的条件码:ZF SF OF

 

                 PC

 

程序计数器(PC)存放当前正在执行指令的地址

 

“程序员”:(1)用汇编代码写程序的人

          (2)产生机器级代码的编译器

程序员可见状态:如上表格Y86程序中每条指令都会读取或可修改处理器状态的某些部分。

存储器:Y86程序用虚拟地址来引用存储器位置(虚拟地址通过硬件和操作系统软件转化为物理地址)

状态码Stat(程序执行的总体状态)

 

<4.1.2>Y86指令(是IA32指令集的一个子集)

 

(1)IA32movl指令:

Irmovl

Rrmovl

Mrmovl

rmmovl

第一个字母表示源类型

(源:立即数I  寄存器r  存储器m)

 

Y86 4个整数操作指令 add1 sub1 and1 xor1(只对寄存器数据进行操作,而IA32还允许对存储器数据进行这些操作,这些指令会设置3个条件码 ZF SF OF (零  符号  溢出))

(2)7个跳转指令jmp jle jl je jne jge jg

(3)6个条件传送指令cmovle  cmovl  cmove

                      Cmovne cmovge cmovg

(4)call指令将返回地址入栈,然后跳转到目的地址

Ret指令从这样的过程调用中返回

(5)push1和pop1指令实现了入栈和出栈

(6)halt指令停止指令的执行

<4.1.3>指令编码

指令第一个字节:高四位代码部分  低四位功能部分

指令集的一个重要性质:字节编码必须有唯一的解释,任意一个字节序列要么是一个唯一的指令序列的编码,要么是一个合法的字节序列。

<4.1.4>Y86异常

状态码Stat代码的可能值

AOK

正常操作

HLT

处理器执行halt指令

ADR

遇到非法地址

INS

遇到非法指令

 

遇到上述异常时候,让处理器停止执行指令(通常在更完整设计中,处理器会调用一个异常处理程序)

l  阅读课本238页代码

4.2  逻辑设计和硬件控制语言HCL

与 a&&b

或 a||b

非 !a

<4.2.2>组合电路和HCL布尔表达式

将很多的逻辑门组合成一个网,就能构建计算块,称为:组合电路

注意: (1)两个或者两个逻辑门的输出不能连接在一起

       (2)这个网必须是无环的

l  阅读课本224页HCL表达式

<4.25> 时钟寄存器

          随机访问存储器

在HCL中,我们将所有字级的信号都声明为int,不指定字的大小

4.3 SEQ硬件结构

在SEQ中,所有硬件单元的处理都在一个时钟周期内完成

取值:将程序计数器寄存器作为地址,指令存储器读取指令的字节,PC增加器计算valp

译码:寄存器文件有两个端口A,B从这两个端口同时读寄存器值valA和valB

执行:将ALU用于不同的目的

访问:在执行访存操作时,数据存储器读出或写入一个存储器字

写回:寄存器文件有两个端口,端口E用来写ALU计算出来的值,两端口用来从数据存储器中读出的值

SEQ的时序

          SEQ的实现包括组合逻辑和两种存储设备:时钟寄存器

                                             随机访问寄存器

四个硬件单元需要对它们的时序进行明确的控制:程序计数器

                                            条件码寄存器

                                              数据存储器

                                              寄存器文件

第六周实验(存在复制粘贴内容)

2.构建YIS环境:

cd ~/Code/shiyanlou_cs413

wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar

tar -xvf sim.tar

cd sim

sudo apt-get install tk

sudo ln -s  /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so

sudo ln -s  /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so

make

4.YIS测试:

cd y86-code

进入测试代码,教材p239页代码为asuml.ys,可以通过

make asuml.yo

进行汇编,asuml.yo就是汇编后的结果,见教材p238。

make all

可以汇编运行所有代码结果。

参考: 课本231页至267页以及实验楼

心得:笔记整理的还是不够完整,前几章都有落下的内容,课后在笔记本上慢慢整理,包括测试后出错的题目。提交后会去优秀的博客仔细阅读(不提前阅读怕被别人的博客思维带走)。

 

posted @ 2015-10-18 17:21  20135331文艺  阅读(142)  评论(0编辑  收藏  举报