教材学习内容总结
Y86指令集体系结构
定义一个指令集体系结构,包括定义各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理。
•Y86处理器状态类似于I32。可以访问和修改程序寄存器、条件码、程序计数器和存储器,状态码指明程序是否运行正常。
(1)RF:程序寄存器 %eax,%ecx,%edx,%ebx,%esi,%edi,%esp,%ebp
(2)CC:条件码 ZF、SF、OF(都是一位条件码,用来保存最近的算术或逻辑指令所造成影响的有关信息。)
(3)PC:程序计数器 存放当前正在执行的指令
(4)DMEM:存储器 很大的字节数组,保存着程序和数据。Y86程序用虚拟地址来引用存储器位置
•IA32的movl指令分成了4个不同的指令:irmovl、rrmovl、mrmovl和rmmovl。分别显示地指明源和目的的格式。
•指令编码长度从1个字节到6个字节不等,一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。字段fn指明是某个整数操作(OPL)、数据移动条件(cmovXX)或是分支条件(jXX)。所有数值都用十六进制表示
指令编码
•每条指令的第一个字节表明指令的类型。这个字节分为两个部分,每部分4位:高4位是代码部分,低4位是功能部分。功能值只有在一组相关指令共用一个代码时才有用。
•分支指令里代码部分均为7,-传送指令里代码部分均为2
•指令集的一个重要性质就是字节编码必须有唯一的解释。这个性质保证了处理器可以无二义性地执行目标代码程序。即使代码嵌入在程序的其他字节中,只要从序列的第一个字节开始处理,我们仍然可以很容易地确定指令序列。反过来说,如果不知道一段代码序列的起始位置,我们就不能准确地确定怎样将序列划分成单独的指令。
•Y86代码与IA32代码的主要区别:
1、Y86可能需要多条指令来执行一条IA32指令所完成的功能。
2、Y86没有伸缩寻址模式。
•执行pushl和popl指令时,处理器的行为是不确定的,因为要入栈的寄存器会被同一条指令修改。通常有两种约定:
压入/弹出%esp的原始值
压入/弹出%esp-/+4后的值
逻辑设计和硬件控制语言HCL
数字系统三个主要组成部分
1、计算对位进行操作的函数的组合逻辑
2、存储位的存储器元素
3、控制存储器元素更新的时钟信号
Y86异常
a.状态码Stat,描述程序执行的总体状态
b.代码值1,命名为AOK,表示程序执行正常
c.代码值2,命名为HLT,表示处理处执行一条halt指令
d.代码值3,命名为ADR,表示处理器试图从一个非法存储器地址读或者向一个非法存储器地址写,可能是当取指令的时候,也可能是当读或者写数据的时候。
e.异常处理程序、信号处理程序。