计算机组成原理课程设计 |
您所在的位置:网站首页 › 汇编lad指令 › 计算机组成原理课程设计 |
视频演示地址:计组课程设计-8位无符号二进制数乘除_哔哩哔哩_bilibili 计算机组成原理课程设计 目录 一、实验目的 二、实验内容 三、实验原理(16分) 3.1、指令系统及分析(4分) 3.2、指令框图及分析(4分) 3.3、指令系统对应微程序二进制代码及分析(4分) 3.4、机器程序及分析(4分) 四、实验步骤(4分) 4.1、微程序写入及校验(2分) 4.2、机器程序写入及校验(2分) 五、实验结果及分析(16分) 5.1、演示程序一(8分) 5.2、演示程序二(8分) 六、实验问题及思考(4分) 七、实验验收答辩环节问题和解答(20分) 一、实验目的综合运用所学计算机组成原理知识,设计并实现较为完整的计算机。 二、实验内容 设计并实现一套完整的指令系统;设计并实现完整的计算机(采用上述指令系统);利用该计算机实现 8位无符号二进制数乘除 (比如数组累加和等)。三、实验原理(16分) 数据通路图如下图1: DR:数据缓冲器 IR:指令寄存器 PC:程序计数器 AR: 数据地址计数器 R0-R3:通用寄存器 PSW:状态字寄存器 图1数据通路图 实际连接图如下图2 3.1.1机器指令分析; 模型机设计三大类指令共十五条,其中包括运算类指令、控制转移类指令,数据传送类指令。 运算类指令包含三种运算,算术运算、逻辑运算和移位运算,设计有 6 条运算类指令,分别为:ADD、AND、INC、SUB、OR、RR,所有运算类指令都为单字节,寻址方式采用寄存器直接寻址。控制转移类指令有三条 HLT、JMP、BZC,用以控制程序的分支和转移,其中 HLT为单字节指令,JMP 和 BZC 为双字节指令。数据传送类指令有 IN、OUT、MOV、LDI、LAD、STA 共 6 条,用以完成寄存器和寄存器、寄存器和 I/O、寄存器和存储器之间的数据交换,除MOV 指令为单字节指令外,其余均为双字节指令。 所有单字节指令(ADD、AND、DEC、SUB、OR、SAR、HLT和MOV)格式如下表1: I7 I6 I5 I4 I3 I2 I1 I0 OP-CODE RS RD 表格 1单字节指令格式 在表1中,I7~I0分别为指令字节的8位(I7为高位,I0为地位)。其中,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,RS或RD选定的寄存器如下表2所示: RS或RD 选定的寄存器 00 R0 01 R1 10 R2 11 R3 表格 2 RS或RD选定的寄存器 IN和OUT的指令格式为: 7 6 5 4 3 2 1 0 7—0 OP-CODE RS RD P 表格 3 IN和OUT的指令格式 其中括号中的 1 表示指令的第一字节,2 表示指令的第二字节,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,P 为 I/O 端口号,占用一个字节。 系统设计五种数据寻址方式,即立即、直接、间接、变址和相对寻址,LDI 指令为立即寻址,LAD、STA、JMP 和 BZC指令均具备直接、间接、变址和相对寻址能力。 LDI 的指令格式如下表4,第一字节同前一样,第二字节为立即数。 7 6 5 4 3-2 1-0 7-0 OP-CODE RS RD Data 表格 4 LDI指令格式 LAD、STA、JMP和BZC指令格式如下表5 7 6 5 4 3-2 1-0 7-0 OP-CODE M RD D 表 5 LAD、STA、JMP和BZC指令格式 其中M为寻址模式,具体见表6,以R2做为变址寄存器RI 寻址模式M 有效地址E 说明 00 E=D 直接寻址 01 E=(D) 间接寻址 10 E=(RI)+D RI变址寻址 11 E=(PC)+D 相对寻址 表6 寻址模式 本模型机共有 15 条基本指令,表 7中 列出了各条指令的格式、汇编符号、指令功能, 下表7为双字长指令的格式和具体功能: 表7 双字长指令指令 下表8为单字长指令的格式和具体功能和注解: 表8 单字长指令指令 3.1.2微指令分析 微指令字长共24位,格式如下表10,A字段含义如下表11,B字段含义如下表12,C字段含义如下表13. 其中,MA5-MA0为6位的后续微地址,A,B,C为3个译码字段,分别由三个控制位译码得到多种指令,S3--S0选择运算功能,WR,RD控制读写。 23 22 21 20 19 18~15 14~12 11~9 8~6 5~0 M32 M22 WR RD IOM S3~S0 A字段 B字段 字段C MA5~MA0 表10微指令格式 A字段 14 13 12 选择 0 0 0 NOP 0 0 1 LDA 0 1 0 LDB 0 1 1 LDRO 1 0 0 保留 1 0 1 LOAD 1 1 0 LDAR 1 1 1 LDIR 表11 A字段格式 B字段 11 10 9 选择 0 0 0 NOP 0 0 1 ALU_B 0 1 0 RS_B 0 1 1 RD_B 1 0 0 RI_B 1 0 1 保留 1 1 0 PC_B 1 1 1 保留 表12 B字段格式 C字段 8 7 6 选择 0 0 0 NOP 0 0 1 P 0 1 0 P 0 1 1 P 1 0 0 保留 1 0 1 LDPC 1 1 0 保留 1 1 1 保留 表13 C字段格式 3.2、指令框图及分析(4分)指令框图如下图3所示,参考实验书中复杂机模型的微程序流程图,列出了了可以实现的15条微程序的指令框图,操作数准备用于确定寻址方式,p测试用于确定指令功能,P测试用于判断标志位。 可知,MOV指令2个CPU周期,SUB指令3个CPU周期,ADD指令3个CPU周期。下指令框图中一个方框代表一个CPU周期,菱形符号用于表示判别或测试。 图3指令框图 3.3、指令系统对应微程序二进制代码及分析(4分)未对该微程序进行修改,微程序对应二进制代码表如下表14。 表14 微指令二进制表 多个微指令组成的序列可以用来实现微程序,参考指令框图对应实现。 分析:因未对其进行修改,便不多做分析了,这边右环移指令是本次课设中我使用较多的指令,可以发现右环移指令和左环移指令其实互通。 含义如下: $M 00 000001 ; NOP $M 01 006D43 ; PC->AR, PC加1 $M 03 107070 ; MEM->IR, P $M 04 002405 ; RS->B $M 05 04B201 ; A 加B->RD $M 06 002407 ; RS->B $M 07 013201 ; A 与B->RD $M 08 106009 ; MEM->AR $M 09 183001 ; IO->RD $M 0A 106010 ; MEM->AR $M 0B 000001 ; NOP $M 17 002418 ; RS->B $M 18 02B201 ; A 右环移->RD $M 1B 005341 ; A->PC $M 1C 10101D ; MEM->A $M 1D 10608C ; MEM->AR, P $M 1E 10601F ; MEM->AR $M 1F 101020 ; MEM->A $M 20 10608C ; MEM->AR, P $M 28 101029 ; MEM->A $M 29 00282A ; RI->B $M 2A 04E22B ; A 加B->AR $M 2B 04928C ; A 加B->A, P $M 2C 10102D ; MEM->A $M 2D 002C2E ; PC->B $M 2E 04E22F ; A 加B->AR $M 2F 04928C ; A 加B->A, P 完整机器指令如下,旁边有其注解。 $P 00 21; $P 01 00; $P 02 63; $P 03 01; $P 04 17;R1与R3-->R3; $P 05 F0;00乘法,01除法 $P 06 B0;FZ=1,乘法指令开始 ;;;;-----------------------------除法功能开始------------------------------------------ ;初始化: $P 07 20 $P 08 00 ;被除数存入R0 $P 09 22 $P 0A 00 ;除数存入R2 $P 0B 61 ;R1初始化为00.用于被除数扩展的高八位 $P 0C 00 $P 0D 63 $P 0E F8 $P 0F D3 ;F8存入A0中,用于控制除法结束,过程中会发生变化 $P 10 A0 $P 11 63 $P 12 07 $P 13 D3 $P 14 A1 ;07存入A1,用于左移;过程中不改变 $P 15 E0; $P 16 1E; $P 1E D0 ;被除数存入A2中,过程中会改变 $P 1F A2 $P 20 D2 ;除数存入A3中,过程中不改变 $P 21 A3 $P 22 D1 $P 23 A4 ;商存入A4中,过程中会改变 ;判断大小 $P 24 88; R0-R2->R0 $P 25 F0; 则继续计算 $P 28 A2 ; R0取回被除数,此时FC不等于1,FZ也不等于1,进入循环体 ;循环体: $P 29 C3 $P 2A A4 ;重新从A4取出商R3 $P 2B 62 $P 2C 07 $P 2D AB ;1011;R3右移7位 $P 2E C2 $P 2F A3 ;重新从A3取出除数R2 $P 30 D3 ;商更新后存回A4 $P 31 A4 $P 32 C3 ;取出07 $P 33 A1 $P 34 AD ;1101,R1右移7位,实现左移功能 $P 35 AC ;1100,R0右移7位,实现左移功能 $P 36 63 $P 37 01; 避免FC标志位的影响 $P 38 0F; ADD 1111 $P 39 63 $P 3A 01; R3 00000001 $P 3B 1F; AND 1111 避免RR指令中FZ的影响 $P 3C 13; AND 0011 R0与R3-->R3,取低八位的最低位作为高八位的最低位 $P 3D F0; FZ=1则跳转,即最低位为0 $P 3E 46; S4 ;S5; FZ不等于1,最低位为1,R3=00000001 $P 3F 9D; 1101 R3 或R1---R1,R1低位置1 $P 40 63; R3=11111110 $P 41 FE $P 42 1F; AND 111111 避免FZ的影响 $P 43 1C; AND 1100 R3与R0--R0,低位置0,可能影响FZ $P 44 E0; 跳到S6,开始减法 $P 45 4A ;s4: R0低位为0 $P 46 63 ;R3=11111110 $P 47 FE $P 48 1D ;AND 1101 R3 R1-->R1 ,低位置0 $P 49 1C ;AND 1100 R3,R0-->R0,低位置0,可能影响FZ,开始减法 ;S6: $P 4A 63;R3=00000001 $P 4B 01; $P 4C 0F;ADD ,使不进位 $P 4D 63 $P 4E 01; $P 4F 1F;AND ,不为0,避免上一步的fc=1,FZ=1造成的影响 ;R3=00000001 $P 50 D1;先把R1存在A5 $P 51 A5; $P 52 89; SUB 1001 R1-R2-->R1 $P 53 C3 ; R3取出现在的商A4位置 $P 54 A4; $P 55 F0;若R1r2,不会产生进位,FC不会等于1,FZ有可能=1 $P 57 62 ;r2=10000000 $P 58 80 $P 59 9B; 1011 r2 或 r3=r3 高位变成1 $P 5A D3;商更新后便存回去A4位置 $P 5B A4; $P 5C C3;重新A0取出计数值数存到R3中, $P 5D A0; $P 5E 1F;R3与R3,使FZ不等于1 $P 5F 73; 0011 R3++ $P 60 F0;判断是否加满8次,FC=1则跳转到结束 $P 61 82;END $P 62 D3;未结束,则更新后的值存回A0位置 $P 63 A0 $P 64 E0;回到循环体中;此时R1更新了 $P 65 29;循环体 ;S7:R1R1,更新高八位 ;;;C1 $P C1 63; R3=01H $P C2 01; $P C3 AD;1101 R1循环右移1位--r1 $P C4 AE;1110 R2循环右移1位--r2 $P C5 63; R3=7F 0111111 $P C6 7F; R2最低位已经使用过,现在挪到了最高位,置0 $P C7 1E;AND 1110 R3与R2-->R2 $P C8 63;R3=10000000 $P C9 80; $P CA 17;AND 0111 R1与R3-->R3, $P CB 9E;OR 1110 R3或R2--->R2 $P CC 63; R2的最高位变为R1的最高位,原先的最低位,把低位放入R2 $P CD 01;R3=01 $P CE AF;RR 1111 ,使得FZ不等于1 $P CF F0; 判断相加的过程中是否产生了进位,产生了则高位置1 $P D0 E0;溢出; $P D1 63;R3=01111111 $P D2 7F; $P D3 1D;AND 1101 R3yuR1-->R1,否则高位置0 $P D4 63; $P D5 01; $P D6 AF; 1111使得FZ不等于1 $P D7 C3;取出计数值到R3 $P D8 F0; $P D9 73;计数值++ $P DA F0;加到第九次产生进位,FC=1,输出结果 $P DB E5;结束 $P DC D3; $P DD F0; $P DE E0; $P DF BA;循环体; ;;;;溢出 $P E0 63;进位置1 $P E1 80; $P E2 9D; $P E3 E0;跳到 $P E4 D4; $P E5 34; $P E6 40; $P E7 34; $P E8 40; $P E9 34; $P EA 40; $P EB 34; $P EC 40; $P ED 38; $P EE 40; $P EF 50; 规定运算类型和对应输入为下表15: 乘法 除法 R0初始值 R1初始值 R2初始值 R3初始值 00H 01H 操作数a 输入 操作数b 01H 表15 输入格式 选择指令(地址从00--06),流程图如下图4: 图4 选择流程图 即先靠输入选择对应运算,R0存输入选择. R1与R3(01),结果存入R3中,若等于0,则跳转Z1(即输入的为00,选择乘法)。若不等于0,不跳转(即输入的为01),进行除法。以此实现选择运算功能。 乘法模块流程图5,指令地址从07--97: 图5 乘法流程图 除法思想: 除法模块流程图如下,指令地址从B0--EF: 图6乘法流程图 四、实验步骤(4分)选择联机软件的“ 【转储】—【装载】 ”功能,在打开文件对话框中选择上面所保存的文件,软件自动将机器程序和微程序写入指定单元。 选择联机软件的“ 【转储】—【刷新指令区】 ”可以读出下位机所有的机器指令和微指令,并在指令区显示,对照文件检查微程序和机器程序是否正确,如果不正确,则说明写入操作失败,应重新写入,可以通过联机软件单独修改某个单元的指令,以修改微指令为例,先用鼠标左键单击指令区的‘微存’TAB 按钮,然后再单击需修改单元的数据,此时该单元变为编辑框,输入 6 位数据并回车,编辑框消失,并以红色显示写入的数据。 4.1、微程序写入及校验(2分)微程序载入。已校验,无错误。 $M 00 000001; $M 01 006D43; $M 03 107070; $M 04 002405; $M 05 04B201; $M 06 002407; $M 07 013201; $M 08 106009; $M 09 183001; $M 0A 106010; $M 0B 000001; $M 0C 103001; $M 0D 200601; $M 0E 005341; $M 0F 0000CB; $M 10 280401; $M 11 103001; $M 12 06B201; $M 13 002414; $M 14 05B201; $M 15 002416; $M 16 01B201; $M 17 002418; $M 18 02B201; $M 1B 005341; $M 1C 10101D; $M 1D 10608C; $M 1E 10601F; $M 1F 101020; $M 20 10608C; $M 28 101029; $M 29 00282A; $M 2A 04E22B; $M 2B 04928C; $M 2C 10102D; $M 2D 002C2E; $M 2E 04E22F; $M 2F 04928C; $M 30 001604; $M 31 001606; $M 32 006D48; $M 33 006D4A; $M 34 003401; $M 35 000035; $M 36 006D51; $M 37 001612; $M 38 001613; $M 39 001615; $M 3A 001617; $M 3B 000001; $M 3C 006D5C; $M 3D 006D5E; $M 3E 006D68; $M 3F 006D6C; 4.2、机器程序写入及校验(2分)已成功写入,但未截图。已检查,机器指令已在主存内存好,已校验,没有错误。 五、实验结果及分析(16分) 5.1、演示程序一(8分)数据(3分): 先输入00选择乘法功能,单指令运行几次后,输入被乘数, 乘数01,被乘数01: 结果(2分):先闪现积的高八位,最终显示积的低八位,高八位存R1,低八位存R2,OUT单元先输出八位01,如下图,高八位00,输出正确. 分析(3分): 01H*01H=0001H,结果正确,已实现八位二进制数的乘法功能 5.2、演示程序二(8分)数据(3分):先输入01选择除法功能,单指令运行几次后,输入被除数, 除数。如下图所示被除数为C3(H)=197(D),除数为03(H),为3(D),已输入到R0,R2中, 结果(2分):最终显示商的低八位,存在R3中未41(H)=65(D) OUT单元输出为41H: 分析(3分): 197/3=65.667,舍去小数,结果为65(D)=41(H) 结果正确,已实现八位二进制数的除法功能。 六、实验问题及思考(4分)1、当前所实现计算机,是否完整?如果不完整,还缺少哪些部件? 不完整,没有改过微指令,有些功能无法直接实现,例如左移、和自减。 2、当前所实现计算机,是否能实现除法运算?如果能,可通过哪些指令实现除法运算? 不可以,只能通过许多微指令序列实现,本实验就有除法功能,具体可参考实验的机器指令实现除法功能。 3、当前所实现计算机,还能实现哪些更复杂的计算?请举例说明 还能计算除法所得的余数,但是本实验中没有存该余数,因为机器指令过长了。 4、当前所实现计算机,指令系统的双字长指令是如何实现的? 双字长指令指令字长度等于两个机器长度的指令。 看指令长度。指令长32位,(注意下面还有位移量16位),因此是双字长。 所有的运算类指令都是单字节指令,AND,ADD,INC,SUB,OR,RR,它们的寻址方式都是直接寻址。数据传输类指令IN,OUT,MOV,LDI,LAD,STA除了MOV外,都是双字节指令。LDI为立即寻址,LAD为直接寻址,STA为间接寻址,JMP为变址寻址,BZC为相对寻址。 七、实验验收答辩环节问题和解答(20分)①通路图中的T4是什么:执行指令的第4个节拍。 ②寄存器R0-R3的作用:用于存放运算数。 ③P,P测试框的含义: 菱形框p测试用于确定指令功能,P测试用于判断标志位,以实现条件转移。 八、实验收获以下是实现思想文字描述: 8.1.1乘法功能算法思想: 实现原理:被乘数(设为A7A6A5A4A3A2A1A0)存入R0,乘数存入R2(设为B7B6B5B4B3B2B1B0)中,判断乘数和被乘数是否为0,有一个为0则直接输出积为0,程序结束;若两个数都不为0,则(R1初始值为00H): (1)先判断B的末位为1还是0,若为1,则R0+R1->R1,更新R1的值,进位标志ZF改变;若为0,R1不做处理。 (2)R1,R2均循环右移1位,将R1的最高位(原先最低位)转到R2的最高位中,若加法过程中,不产生进位(ZF=0),则R1最高位置为0.若产生进位(ZF=1),则R1最高位置为1。 (3)重复2步骤8次,输出结果R1存的为积的高八位,R2存的为积的第低八位。 8.1.2除法功能算法思想: 实现原理:被除数(设为A7A6A5A4A3A2A1A0)存入R0,除数存入R2(设为B7B6B5B4B3B2B1B0)中,先判断被除数是否小于等于除数,若等于除数,则直接输出商为1;若小于除数,则直接输出商为0;若大于除数,则: (1)R1存入00H,和R0(被除数)构成16位被除数A,R1为高位,R0为低位。 (2)被除数A左移一位,成为被除数A*,再将B与A*的高八位比较,若A*的高八位大于等于B,则商Si为1,A*的高八位更新为高八位与B的差;反之,商Si为0;(i=7,6,5,4,3,2,1,0) (3)重复2操作8次后,即可得到商S=S7S6S5S4S3S2S1S0 实现难点: (1)微指令只能实现循环右移,如何将两个8位二进制数构成的16位进制数左移:逻辑上,8位二进制左移x位=右移8-x位。 (2)寄存器不够用:不断地放入内存,修改,再放入内存。 (3)过多的BZC指令,判断前需要把影响该判断FZ,FC变为0: 有许多的跳转,也有许多影响FZ,FC标志的指令,每次判断之前都使FC,FZ变无效。 8.2.1整个的乘法的实现: 设被乘数为A,对应二进制数为A7A6A5A4A3A2A1A0,初始存入R0 乘数为B ,对应二进制数为B7B6B5B4B3B2B1B0,初始存入R2 8位二进制数乘以八位二进制数最后的积是16位数二进制数, 所以需要两个寄存器存储最后的结果,一个寄存器存高八位, 一个寄存器存低八位。 本程序中R1存高八位,R2存低八位,R1初始为00,R2初始为B. 根据乘法思想,乘数被乘数都只有8位,所以乘8次即可,所以整个 程序的循环体循环8次。 这是循环体: 先得到 B与上00000001(b)(01H)的结果,即取出乘数的最低位b, 根据最原始计算两数相乘的原理,若此时b=1,则把更新R1,把R0+R1存入 R1(此时记录是否有进位,若有进位,则CF=1,无进位则CF=0);b=0,则R1不更新。 R1和R2(乘数)都循环右移一位,即把最低位移到了最高位,现最高位为原最低位。 R2(乘数)的原最低位已经用过了,可以不再使用,所以把R1的原最低位移入R2的现最高位,为了使R1和R2实现存储16位的积;若更新R1时CF=1(即产生了进位),则把R1高位置1,若更新R1时CF=0(不产生进位),则把R1高位置0。 判断是否循环了8次,已经循环了8次后跳出循环,输出结果 未循环8次则跳入循环体。 8.2.2整个除法的实现: 设被除数为A,对应二进制数为A7A6A5A4A3A2A1A0,初始存入R0 除数为B , 对应二进制数为B7B6B5B4B3B2B1B0,初始存入R2 8位二进制数相除最后的到的商也是8位,只用一个寄存器就可以存商 本程序中,商的结果精确到个位,采用舍入原则。 为了使除法方便进行,先把A扩展为16位,使用R1扩展,初始为00H, R1和R0构成新的被除数A*,除8次即可,所以在R0>R2的情况下,整个程序的循环体循环8次。 若R0=R2,直接输出01结束,若R0R2情况下的循环体: 先把A*(被除数)左移一位: (具体实现方法为:分别将R1和R0都循环右移7次,实现循环左移1次的功能,此时, R0的原最高位变为现最低位,R1也是,我们希望实现的效果是把R0的原最高位移入R1的原最低位中实现被除数的左移,所以,此时把R0的现最低位移入R1的现最低位,再把R0的最低位置为0,实现左移一位的功能 ) 此时,R1和R0中的数据都有所更新,变为左移后的高八位和低八位, 比较R1和R2的大小,若R1(被除数高八位)>=R2,则得到商的一位为1,R1更新为R1-R2的值若R1 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |