计算机组成原理课程设计:在复杂模型机上编写机器指令与微程序计算海伦公式

本文介绍了一项实验,旨在设计并实现一个完整的计算机模型,以计算海伦公式。实验涉及模型机指令设计、微程序流程、数据通路设计等,通过累加法实现乘法,最终成功计算三角形面积的平方。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验内容

1. 实验目的

综合运用所学计算机组成原理知识,设计并实现较为完整的计算机。

2. 实验目标

在充分理解复杂模型机原理的基础上,自行编写机器指令及其对应的微程序,达到使用复杂模型机计算海伦公式的目标。

3.实验设备

PC机一台,TD-CMA实验系统一套。

二、实验原理

1)数据格式

此次使用的模型机规定采用定点补码表示法表示数据,字长为8位,8位全用来表示数据(最高位不表示符号),数值表示范围是:0≤X≤28-1。

2)指令设计

根据海伦公式计算中所需要的指令,设计三大类模型机指令共十五条,其中包括运算类指令、控制转移类指令、数据传送类指令。

运算类指令包含三种运算,算术运算、逻辑运算和移位运算,设计有 6 条运算类指令,分别为:ADD、AND、DEC、SUB、OR、SAR,所有运算类指令都为单字节,寻址方式采用寄存器直接寻址。

控制转移类指令有三条 HLT、JMP、BZC,用以控制程序的分支和转移,其中HLT 为单字节指令,JMP和BZC为双字节指令。

数据传送类指令有IN、OUT、MOV、LDI、LAD、STA 共 6 条,用以完成寄存器和寄存器、寄存器和I/O、寄存器和存储器之间的数据交换,除 MOV指令为单字节指令外,其余均为双字节指令。

3)指令格式

所有单字节指令(ADD、AND、DEC、SUB、OR、SAR、HLT和MOV)格式如下:

7 6 4 53 21 0
OP-CODERSRD

其中,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,并规定:

RS或RD选定的寄存器
00R0
01R1
10R2
11R3

IN和OUT的指令格式为:

7 6 5 4 (1)3 2 (1)1 0 (1)7-0(2)
OP-CODERSRDP

其中括号中的 1 表示指令的第一字节,2 表示指令的第二字节,OP-CODE 为操作码,RS为源寄存器,RD 为目的寄存器,P为 I/O 端口号,占用一个字节,系统的 I/O地址译码原理见图1(在地址总线单元)。
 I/O地址译码原理图
图1 I/O地址译码原理图

由于用的是地址总线的高两位进行译码,I/O地址空间被分为四个区,如表1所示:

表1 I/O地址空间分配

A7 A6选定地址空间
00IOY000-3F
01IOY140-7F
10IOY280-BF
11IOY3C0-FF

系统设计五种数据寻址方式,即立即、直接、间接、变址和相对寻址,LDI指令为立即寻址,LAD、STA、JMP和BZC指令均具备直接、间接、变址和相对寻址能力。

LDI的指令格式如下,第一字节内容与上文同,第二字节为立即数。

7 6 5 4 (1)3 2 (1)1 0 (1)7-0(2)
OP-CODERSRDdata

LAD、STA、JMP和BZC指令格式如下。

7 6 5 4 (1)3 2 (1)1 0 (1)7-0(2)
OP-CODEMRDdata

其中M为寻址模式,具体见表2,以R2作为变址寄存器RI。

表2 寻址方式

寻址模式M有效地址E说明
00E=D直接寻址
01E=(D)间接寻址
10E=(RI)+DRI变址寻址
11E=(PC)+D相对寻址

4)指令系统

根据实验计算海伦公式的目标,设计的15条基本指令如下,包括指令的格式、汇编符号、指令功能。

表3 指令描述

在这里插入图片描述

三、总体设计

模型机的数据通路框图如图2所示。
在这里插入图片描述

图2 数据通路框图

实验使用的模型机指令多,寻址方式多,指令译码电路需要复杂设计。图3所示在IR单元的INS-DEC中实现。

在这里插入图片描述
图3 指令译码原理图

本实验中要用到四个通用寄存器R3~R0,而对寄存器的选择是通过指令的低四位,为此还得设计一个寄存器译码电路,在IR单元的REG_DEC(GAL16V8)中实现,如图4所示。

在这里插入图片描述
图4 寄存器译码原理图

根据设计的机器指令要求,设计微程序流程图及确定微地址,如图5所示。

按照系统建议的微指令格式,见表4,参照微指令流程图,将每条微指令代码化,译成二进制代码表,如表5,并将二进制代码表转化为联机操作时的十六进制格式文件。

表4 微指令格式
在这里插入图片描述
在这里插入图片描述

图5 微指令流程图

表5 二进制码表

地址十六进制表示高五位S3-S0A字段B字段C字段UA5-UA0
00000001000000000000000000000001
01006D43000000000110110101000011
03107070000100000111000001110000
04002405000000000010010000000101
0504B201000001001011001000000001
06002407000000000010010000000111
07013201000000010011001000000001
08106009000100000110000000001001
09183001000110000011000000000001
0A106010000100000110000000010000
0B000001000000000000000000000001
0C103001000100000011000000000001
0D200601001000000000011000000001
0E005341000000000101001101000001
0F0000CB000000000000000011001011
10280401001010000000010000000001
11103001000100000011000000000001
12063201000001100011001000000001
13002414000000000010010000010100
1405B201000001011011001000000001
15002416000000000010010000010110
1601B201000000011011001000000001
17002418000000000010010000011000
18033201000000110011001000000001
1B005341000000000101001101000001
1C10101D000100000001000000011101
1D10608C000100000110000010001100
1E10601F000100000110000000011111
1F101020000100000001000000100000
2010608C000100000110000010001100
28101029000100000001000000101001
2900282A000000000010100000101010
2A04E22B000001001110001000101011
2B04928C000001001001001010001100
2C10102D000100000001000000101101
2D002C2E000000000010110000101110
2E04E22F000001001110001000101111
2F04928C000001001001001010001100
30001604000000000001011000000100
31001606000000000001011000000110
32006D48000000000110110101001000
33006D4A000000000110110101001010
34003401000000000011010000000001
35000035000000000000000000110101
36006D51000000000110110101010001
37001612000000000001011000010010
38001613000000000001011000010011
39001615000000000001011000010101
3A001617000000000001011000010111
3B000001000000000000000000000001
3C006D5C000000000110110101011100
3D006D5E000000000110110101011110
3E006D68000000000110110101101000
3F006D6C000000000110110101101100

根据实验计算海伦公式的目标,以及基于此设计的机器指令,在模型机实现以下运算:从IN单元读入三角形三边(要求输入三边一定能构成三角形),求此三角形的面积平方,将所求结果存于61H单元,机器指令流程图如图6。
在这里插入图片描述
图6 机器指令流程图

根据流程图设计表6程序,地址和内容均为二进制。

表6 机器指令程序

地址内容助记符说明
0000000000100000IN R0,00H读入a
0000000100000000
0000001000100001IN R1,00H读入b
0000001100000000
0000010000100010IN R2,00H读入c
0000010100000000
0000011011010000STA 60H,R0将a存入60H
0000011101100000
0000100000000100ADD R0,R1a+b存入R0
0000100100001000ADD R0,R2a+b+c存入R0
0000101001100011LDI R3,01H将1存入R3
0000101100000001
0000110010101100SAR R0,R3a+b+c向右移一位,R0=P
0000110101000011MOV R3,R0将p移入R3
0000111010000100SUB R0,R1R0=P-B
0000111101001101MOV R1,R3将P存入R1
0001000010001001SUB R1,R2P-C存入R1
0001000101000010MOV R2,R0将R0移入R2,作为乘数准备
0001001001110001DEC R1将另一个乘数减1,做好准备
0001001111110000BZC RESULT判断
0001010000011011
0001010100001000LOOP:ADD R0,R2开始乘法
0001011001110001DEC R1
0001011111110000BZC RESULT判断
0001100000011011
0001100111100000JMP LOOP回到LOOP开始
0001101000010101
0001101101001101MOV R1,R3将P存回R1
0001110001110001DEC R1将另一个乘数减1,做好准备
0001110111110000BZC RESULT判断
0001111000100110
0001111101000010MOV R2,R0将R0移入R2,作为乘数准备
0010000000001000LOOP:ADD R0,R2开始乘法
0010000101110001DEC R1
0010001011110000BZC RESULT判断
0010001100100110
0010010011100000JMP LOOP回到LOOP开始
0010010100100000
0010011011000001LAD 00 R1,60H将a重新放入R1
0010011101100000
0010100010000111SUB R3,R1R3=P-A
0010100101001101MOV R1,R3R3->R1
0010101001000010MOV R2,R0R0->R2
0010101101110001DEC R1
0010110011110000BZC RESULT判断
0010110100110100
0010111000001000LOOP:ADD R0,R2开始乘法
0010111101110001DEC R1
0011000011110000BZC RESULT判断
0011000100110100
0011001011100000JMP LOOP回到LOOP开始
0011001100101110
0011010011010000STA 61H,R0将所得结果存入61H
0011010101100001
0011011000110000OUT 40H,R0将所得结果输出
0011011101000000

四、实验步骤

1. 按图6连接实验线路,仔细检查连线后打开实验箱电源。

在这里插入图片描述
图7 实验连线图

2. 写入实验程序,并进行校验。

联机软件提供了微程序和机器程序下载功能,以代替手动读写微程序和机器程序,但是微程序和机器程序得以指定的格式写入到以TXT为后缀的文件中,本次实验程序如下,程序中分号';'为注释符,分号后面的内容在下载时将被忽略掉。 TXT文件如下:

; //*************************************** // 
; //                                 // 
; //       复杂模型机实验指令文件    // 
; //                                 // 
; //       By TangDu CO.,LTD         // 
; //                                 // 
; //*************************************** // 
; //****** Start Of Main Memory Data ****** //
$P 00 20	;IN R0,00H
$P 01 00	
$P 02 21	;IN R1,00H
$P 03 00	
$P 04 22	;IN R2,00H
$P 05 00	
$P 06 D0	;STA 60H,R0
$P 07 60	
$P 08 04	;ADD R0,R1
$P 09 08	;ADD R0,R2
$P 0A 63	;LDI R3,01H
$P 0B 01	
$P 0C AC	;SAR R0,R3
$P 0D 43	;MOV R3,R0
$P 0E 84	;SUB R0,R1
$P 0F 4D	;MOV R1,R3
$P 10 89	;SUB R1,R2
$P 11 42	;MOV R2,R0
$P 12 71	;DEC R1
$P 13 F0	;BZC RESULT
$P 14 1B	
$P 15 08	;LOOP:ADD R0,R2
$P 16 71	;DEC R1
$P 17 F0	;BZC RESULT
$P 18 1B	
$P 19 E0	;JMP LOOP
$P 1A 15	
$P 1B 4D	;MOV R1,R3
$P 1C 71	;DEC R1
$P 1D F0	;BZC RESULT
$P 1E 26	
$P 1F 42	;MOV R2,R0
$P 20 08	;LOOP:ADD R0,R2
$P 21 71	;DEC R1
$P 22 F0	;BZC RESULT
$P 23 26	
$P 24 E0	;JMP LOOP
$P 25 20	
$P 26 C1	;LAD 00 R1,60H
$P 27 60	
$P 28 87	;SUB R3,R1
$P 29 4D	;MOV R1,R3
$P 2A 42	;MOV R2,R0
$P 2B 71	;DEC R1
$P 2C F0	;BZC RESULT
$P 2D 34	
$P 2E 08	;LOOP:ADD R0,R2
$P 2F 71	;DEC R1
$P 30 F0	;BZC RESULT
$P 31 34	
$P 32 E0	;JMP LOOP
$P 33 2E	
$P 34 D0	;STA 61H,R0
$P 35 61	
$P 36 30	;OUT 40H,R0
$P 37 40	
; //***** End Of Main Memory Data *****// 

; //** Start Of MicroController Data **//
$M 00 000001    ; NOP   
$M 01 006D43    ; PC->AR, PC加1   
$M 03 107070    ; MEM->IR, P<1>   
$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 0C 103001    ; MEM->RD   
$M 0D 200601    ; RD->MEM   
$M 0E 005341    ; A->PC   
$M 0F 0000CB    ; NOP, P<3>   
$M 10 280401    ; RS->IO   
$M 11 103001    ; MEM->RD   
$M 12 063201    ; A减1->RD   
$M 13 002414    ; RS->B   
$M 14 05B201    ; A减B->RD   
$M 15 002416    ; RS->B   
$M 16 01B201    ; A或B->RD   
$M 17 002418    ; RS->B   
$M 18 033201    ; A右移->RD   
$M 1B 005341    ; A->PC   
$M 1C 10101D    ; MEM->A   
$M 1D 10608C    ; MEM->AR, P<2>   
$M 1E 10601F    ; MEM->AR   
$M 1F 101020    ; MEM->A   
$M 20 10608C    ; MEM->AR, P<2>   
$M 28 101029    ; MEM->A   
$M 29 00282A    ; RI->B   
$M 2A 04E22B    ; A加B->AR   
$M 2B 04928C    ; A加B->A, P<2>   
$M 2C 10102D    ; MEM->A   
$M 2D 002C2E    ; PC->B   
$M 2E 04E22F    ; A加B->AR   
$M 2F 04928C    ; A加B->A, P<2>   
$M 30 001604    ; RD->A   
$M 31 001606    ; RD->A   
$M 32 006D48    ; PC->AR, PC加1   
$M 33 006D4A    ; PC->AR, PC加1   
$M 34 003401    ; RS->RD   
$M 35 000035    ; NOP   
$M 36 006D51    ; PC->AR, PC加1   
$M 37 001612    ; RD->A   
$M 38 001613    ; RD->A   
$M 39 001615    ; RD->A   
$M 3A 001617    ; RD->A   
$M 3B 000001    ; NOP 
$M 3C 006D5C    ; PC->AR, PC加1   
$M 3D 006D5E    ; PC->AR, PC加1   
$M 3E 006D68    ; PC->AR, PC加1   
$M 3F 006D6C    ; PC->AR, PC加1 

3. 运行程序

进入软件界面,选择菜单命令"【实验】—【CISC 实验】",打开相应的数据通路图,选择相应的功能命令,即可联机运行、监控、调试程序。

按动CON单元的总清按钮CLR,然后通过软件运行程序,当模型机执行完OUT指令后,检查OUT单元显示的数是否正确。在数据通路图和微程序流中观测指令的执行过程,并观测软件中地址总线、数据总线以及微指令显示和下位机是否一致。

五、实验结果

考虑到模拟机的硬件约束,因此采用边长分别为3、4、5的三角形来测试程序。

按程序步骤依次输入3、4、5后,程序最终输出24H(即十进制36),结果符合预期,可认为机器指令及对应的微程序设计正确,模型机可按海伦公式计算三角形面积的平方。
在这里插入图片描述
图8 实验结果图

六、实验中遇到的问题与分析

海伦公式的实现需要用到乘法,程序中使用累加的方式实现乘法,但乘数一开始是从原数开始累加,而不是从0开始累加,因此需要在乘法前就需要将另一个乘数减1,否则执行乘法时会多加一次。

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值