ISA:一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构ISA.
Y86是一个指令体系结构(ISA)寄存器、存储器、条件码、PC、程序状态。
halt:这个指令将会终止指令的执行。
nop:这是一个占位指令,它不做任何事情,后续为了实现流水线,它有一定的作用。
xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmovl指令,则代表将一个寄存器的值,赋给另外一个寄存器。
opl:操作指令,比如加法,减法等等。
jxx:条件跳转指令,根据后面的条件进行跳转。
cmovxx:条件传送指令,后面的xx代表的是条件。特别的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器。
call与ret:方法的调用和返回指令。一个将返回地址入栈,并跳到目标地址。一个将返回地址入PC,并跳到返回地址。
push与pop:入栈和出栈操作。Y86异常
对于Y86来说,程序猿可见的状态中就有stat状态码,它标识了程序执行的状态。Y86需要有能力根据stat去做一些处理。不过为了简单起见,这里除了正常执行之外,都将停止指令的执行。真实当中,会有专门的异常处理程序。
Y86有四种不同的状态码,AOK(正常)、HLT(执行halt指令)、ADR(非法地址)和INS(非法指令)。
Y86程序
书中给出了一个示例程序,来说明X86和Y86的区别,这里LZ就不详细分析这些汇编指令了,这种事情在第三章已经做的很多了,其实两者是非常相似的,毕竟Y86就是根据X86的结构YY出来的。区别就在于,有的时候Y86需要两条指令来达到X86一条指令就可以达成的目的。
比如对于X86指令中的 addl $4,%ecx 这样的指令,由于Y86当中的addl指令中不包含立即数,所以Y86需要先将立即数存入寄存器,即使用irmovl指令,然后再使用addl来处理加法运算。
总的来说,Y86就是一个X86的缩减版,它的目的是以简单的结构实现一个处理器,帮助我们了解处理器的设计和实现。
1、CISC(Complex Instruction Set Computing),RISC(Reduced Instruction-Set Computer),MIPS(Million Instructions Per Second)。
2、CISC编码是可变长度的,IA32的指令长度可以是1~15;RISC编码是固定长度的,通常所有的指令都是编码为4个字节。
3、在硬件设计中,电子电路被用来计算位的函数(function on bits),以及在各种存储元素中存储位。大多数现代电路技术都用信号线上的高电压或低电压来表示不同的位值。要实现一个数字系统需要三个主要的组成部分:计算位的函数的组合逻辑,存储位的存储器元素,以及控制存储器元素更新的时钟信号。
4、通常,处理一条指令包括很多操作。
1)取指(fetch):取指阶段从存储器读入指令,地址为程序计数器PC的值。从指令中抽取出指令指示符字节的两个四位部分,称为icode(指令代码)和ifun(指令功能)。
2)解码(decode):解码阶段从寄存器文件读入最多两个操作数,得到值valA or/and valB。
3)执行(execute):在执行阶段,算术/逻辑单元(ALU)要么执行指令指明的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。
4)访存(memory):访存阶段可以将数据写入存储器,或者从存储器读出数据。读出的值为valM。
5)写回(write back):写回阶段最多可以写两个结果到寄存器文件。
6)更新PC(PC update,程序计数器):将PC设置成下一条指令的地址。
5、指令执行过程,从PC中取出指令,然后沿着上述的几个步骤操作,周而复始的进行循环。
6、处理器从来不需要为了完成一条指令的执行而读由指令更新的状态。
参考资料:深入理解计算机系统,参考网站:
http://www.tuicool.com/articles/Zv6v6n