您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 计算机系统结构实验 3.1 微程序版CPU 赖晓铮
计算机系统结构实验系列一、微程序版CPU二、硬布线版CPU三、流水线版CPU四、嵌套中断CPU赖晓铮博士华南理工大学laixz@scut.edu.cnQQ:68046508(一)微程序版CPU实验实验内容:●设计一个微程序版CPU,包括微程序控制器、运算器、存储器、寄存器堆及外部IO接口。定义一套较完备的机器指令集,编写每条机器指令对应的微程序,在CPU电路上运行基于上述机器指令集的机器语言程序,并且用汇编助记符加以注释。实验目的:●掌握基于微程序控制器的CPU结构,了解CPU中断工作机制。●熟悉CPU微指令设计,掌握机器指令的微程序实现方法。微程序版CPU电路图微程序版CPU架构CPU指令集(OP码表)OP码(I7I6I5I4)指令助记符OP码(I7I6I5I4)指令助记符0111IRET1111OR/ORI0110MOV1110AND/ANDI0101OUT/OUTA1101ADD/ADDI0100IN1100SUB/SUBI0011SET1011XOR/XORI0010SOP(INC/DEC/NOT/THR)1010SHT(RLC/LLC/RRC/LRC)0001JMP/JMPR/Jx/JxR1001STO/PUSH0000NOP/HLT1000LAD/POP一、系统指令:汇编语言功能I7I6I5I4I3I2I1I0NOP;无操作(延时4个T)00000/0x/0HLT;停机(断点)00000/0x/1IRET;中断返回BP_PCPC;BP_PSWPSW01110/0x/x汇编语言注释I7I6I5I4I3I2I1I0MOVRA,RB;(RB)RA0110RARBSETRA,IMM;IMMRA0011RAx/xIMM二、寄存器及I/O操作指令:汇编语言功能I7I6I5I4I3I2I1I0INRA,PORTx;(PORTx)RA0100RAPORTxOUTRA,PORTx;(RA)PORTx0101RA0/PORTxOUTARA,PORTx;(RA)PORTx0101RA1/PORTx汇编语言功能I7I6I5I4I3I2I1I0LADRA,[ADDR];[ADDR]RA1000RA0/0ADDRPOPRA,[RB];[RB]RA1000RARBSTORA,[ADDR];(RA)[ADDR]1001RA0/0ADDRPUSHRA,[RB];(RA)[RB]1001RARB三、存储器及堆栈操作指令:汇编语言功能I7I6I5I4I3I2I1I0JMPADDR;ADDRPC00010/00/0ADDRJMPRRB;(RB)PC00010/0RBJCADDR;IFCF=1,ADDRPC00010/10/0ADDRJCRRB;IFCF=1,(RB)PC00010/1RBJZADDR;IFZF=1,ADDRPC00011/00/0ADDRJZRRB;IFZF=1,(RB)PC00011/0RBJSADDR;IFSF=1,ADDRPC00011/10/0ADDRJSRRB;IFSF=1,(RB)PC00011/1RB四、跳转系列指令:五、算术逻辑运算指令:汇编语言功能I7I6I5I4I3I2I1I0RLCRA;(RA)右逻辑移位1010RA0/0LLCRA;(RA)左逻辑移位1010RA1/0RRCRA;(RA)右循环移位1010RA0/1LRCRA;(RA)左循环移位1010RA1/1汇编语言功能I7I6I5I4I3I2I1I0INCRA;(RA)+1RA0010RA0/0DECRA;(RA)-1RA0010RA0/1NOTRA;#(RA)RA0010RA1/0THRRA;(RA)RA0010RA1/1五、算术逻辑运算指令:汇编语言格式功能I7I6I5I4I3I2I1I0ADDRA,RB;(RA)+(RB)RA1101RARBADDIRA,IMM;(RA)+IMMRA1101RA0/0IMMSUBRA,RB;(RA)-(RB)RA1100RARBSUBIRA,IMM;(RA)-IMMRA1100RA0/0IMMANDRA,RB;(RA)∧(RB)RA1110RARBANDIRA,IMM;(RA)∧IMMRA1110RA0/0IMMORRA.RB;(RA)∨(RB)RA1111RARBORIRA,IMM;(RA)∨IMMRA1111RA0/0IMMXORRA,RB;(RA)⊕(RB)RA1011RARBXORIRA,IMM;(RA)⊕IMMRA1011RA0/0IMM初始化过程1)时钟信号CLK接手动开关MANUAL=0,启动仿真,使能复位信号#RESET=0;2)手动按钮MANUAL开关“010”,然后令信号#RESET=1.注:初始化完成后,若时钟信号CLK继续接开关MANUAL,则CPU进入手动模式,手动MANUAL开关,生成时钟信号CLK,程序单步执行;若时钟信号CLK接信号源AUTO-CLK(主频10Hz),则CPU进入自动模式,程序自动运行,直到HLT指令的“断点”处暂停。重启过程(跳出“断点”)1)时钟信号CLK接开关MANUAL=0,手动令复位信号端#RESET的状态“101”变化,即重启完成,跳出“断点”继续执行。注:跳出“断点”后,CPU进入HLT指令的后续下一条指令的取指周期。实验步骤(顺序结构程序):1)在微程序版CPU项目工程的子文件夹PROGRAMS里,存放着机器指令的示例源程序(asm文件)。除了JS、SOP_JZ和INT_IRET三个源程序外,其他源程序都是顺序结构的程序。2)编译ADD指令示例程序ADD.asm,生成hex文件烧写到CPU的存储器ROM,如后页所示。(编译和烧写asm文件的方法参见“2.6存储器实验”)3)手动执行程序,对照ADD指令流程图及其微指令代码表,观察每次手动单步执行结果,记录寄存器AR、IR、PC、通用寄存器Rx及总线BUS上的数据变化。4)自动运行程序,采用HLT指令在程序需要调试的位置设置“断点”,观察“断点”暂停时刻,寄存器AR、IR、PC、通用寄存器Rx及总线BUS上的数据(注意:增加HLT指令“断点”会出现跳转指令的目标地址偏移问题)。5)参照上述过程,编译、烧写、手动、或自动运行在文件夹PROGRAMS中(除了JS和SOP_JZ外)所有机器指令示例程序。汇编助记符(M地址:机器指令)SETR0,03H00H:0011000001H:00000011SETR1,30H02H:0011010003H:00110000SETR2,F0H04H:0011100005H:11110000ADDR0,R106H:11010001ADDR2,R107H:11011001HLT08H:00000001ADD实验步骤(分支结构程序):1)条件跳转指令验证程序JS是典型的分支结构程序,其功能类似于汇编语言的“CMP”语句,实现了比较寄存器R0和R1所存数据的大小,输出较大的数据到IO端口外挂设备(数码显示管),代码如后页所示:2)编译、烧写、自动运行JS源程序。观察程序自动运行过程中两个“断点”的暂停时刻,寄存器R0和R1的数据变化。3)修改JS源程序,赋予R0和R1不同大小的值,记录寄存器R0和R1在程序运行过程中的数据变化,并且观察IO接口外挂的数码管显示。4)请问本程序中的ADD指令起什么作用?如果要求比较的过程不能改动R0和R1的值,那JS源程序需要如何修改?5)编译、执行后页所示的源程序ADD0_SUB0.asm。试问0+0=0和0-0=0,为何两个运算后执行JC的结果不一致?(一个跳转,另一个不跳转)汇编助记符(M地址:机器指令)SETR0,04H00H:0011000001H:00000100SETR1,03H02H:0011010003H:00000011HLT04H:00000001SUBR0,R105H:11000001JS0CH06H:0001110007H:00001100ADDR0,R108H:11010001OUTR0,PORT009H:01010000JMP0DH0AH:000100000BH:00001101OUTR1,PORT00CH:01010100HLT0DH:00000001JS汇编助记符(M地址:机器指令)SETR0,000H:0011000001H:00000000SETR1,002H:0011010003H:00000000ADDR0,R104H:11010001JC0CH05H:0001010006H:00001100OUTR0,PORT007H:01010000SUBR0,R108H:11000001JC0CH09H:000101000AH:00001100OUTR0,PORT00BH:01010000HLT0CH:00000001ADD0_SUB0实验步骤(循环结构程序):1)单操作数运算指令验证程序SOP_JZ是典型的循环结构程序,其功能类似于汇编语言的“LOOP”语句,实现了“1+2+…+9+10”的连续十次相加求和,代码如后页所示。2)编译、烧写、自动运行程序SOP_JZ。观察自动运行过程中的“断点”暂停时刻,寄存器R0、R1和R2的数据变化。3)请问R0和R1总共循环相加了几次?为何统计次数的R2=09?最后R0输出的结果是多少?“THRR2”指令执行的意义是什么?能否只使用两个通用寄存器完成连续相加求和的任务?如果可以,程序要如何修改?汇编助记符(M地址:机器指令)SETR0,01H00H:0011000001H:00000001SETR1,02H02H:0011010003H:00000010SETR2,09H04H:0011100005H:00001001HLT06H:00000001ADDR0,R107H:11010001DECR208H:00101001INCR109H:00100100SOP_JZ汇编助记符(M地址:机器指令)THRR20AH:00101011JZ0FH0BH:000110000CH:00001111JMP07H0DH:000100000EH:00000111OUTR0,PORT00FH:01010000HLT10H:00000001实验步骤(中断程序):1)INT_IRET是基于中断向量二次跳转实现的单级中断程序,主程序功能是寄存器R0的数值累加,而中断子程序则是显示中断时刻R0数值并且清零。代码如后页所示:2)编译、烧写、自动运行中断程序INT_IRET,随机触发INTERRUPT按钮(模拟外部中断),观察R0的变化。3)在程序中设置HLT“断点”,在“断点”暂停时刻,信号CLK改用手动单步执行,触发INTERRUPT按钮,模拟外部中断,观测记录中断处理过程中,寄存器PC、BP_PC、PSW、BP_PSW及总线BUS的变化。4)在本实验中,中断出现会令寄存器R0清零,改变主程序的参数。因为中断是随机发生的,不确定中断发生时刻主程序运行的位置。所以,应该尽量使中断子程序和主程序的参数(主要是寄存器)互相独立。请问在寄存器资源有限情况下,可以采用什么方法实现?汇编助记符(M地址:机器指令)JMP08H00H:0001000001H:00001000;vector02H:00000011HLT;sub03H:00000001OUTR0,PORT004H:01010000SETR0,005H:0011000006H:00000000IRET07H:01110000SETR0,02H;main08H:0011000009H:00000010ADDIR0,02H0AH:110100000BH:00000010INT_IRET汇编助记符(M地址:机器指令)JMP0AH0CH:000100000DH:00001010HLT0EH:00000001思考题:●中断返回指令IRET只能在中断子程序出现,不允许在主程序使用。请说明原因,并且设计一个硬件电路的保护机制:若在主程序中出现IRET指令,则CPU不执行打入PC的操作,避免
本文标题:计算机系统结构实验 3.1 微程序版CPU 赖晓铮
链接地址:https://www.777doc.com/doc-3897810 .html