1. 课程设计简介
综合运用所学的计算机组成原理知识,掌握计算机各条指令运行的过程,
设计并实现较为完整的计算机运算过程。设计并实现任意两个八位二进制数的原码一位乘法,实现带有符号位的运算。
2. 实验设备
TDN—CM+ 计算机组成原理实验教学系统一台, 排线若干。
3. 总体思路
(1) 完成接线, 实现基本的复杂模型机
(2) 设计实现八位二进制数的原码一位乘法的汇编指令
(3) 运行并调试程序
4. 基本概念及原理
4.1 数据格式
模型机规定采用定点补码表示法表示数据,且字长为8位,其格式如下:
4.2 指令格式
模型机设计四大类指令共十六条,其中包括算术逻辑指令、I/O指令、访问及转移指令和停机指令。
(1) 算数逻辑指令
设计9条算术逻辑指令并用单字节表示,寻址方式采用寄存器直接寻址,其格式如下:
其中,OP-CODE为操作码,rs为源寄存器,rd为目的寄存器,并规定:
(2)访存指令及转移指令
模型机设计2条访存指令――存数(STA)和取数(LDA),2条转移指令指,即无条件转移指令(JMP)
和结果为零或有进位转移指令(BZC),指令格式为:
其中,OP-CODE为操作码,rd为目的寄存器地址(LDA、STA指令使用)。
D为偏移量(正负均可),M为寻址模式,其定义如下:
本模型机规定变址寄存器RI指定为寄存器R2
(3)I/O指令
输入(IN)和输出(OUT)指令采用单字节指令,其格式如下:
其中,addr=01时,选中“INPUT DEVICE”中的开关组作为输入设备,
addr=10时,选中“OUTPUT DEVICE”中的数码块作为输出设备。
(4)停机指令
指令格式如下:
HALT指令用于实现停机操作.
4.3 指令系统
本模型机共有16条基本指令,其中算术逻辑指令7条,访存指令和程序控制指令4条,
输入输出指令2条,其它指令1条,表列出了各条指令的格式、汇编符号、指令功能。
4.4 接线图
5. 总体流程
5.1 流程图
实现过程:
(1)向寄存器R0中存入10000000,向寄存器R1中存入被乘数X,清零R2,将R0与R1中存入的X值进行与操作,
求得X的符号位,将X的符号位存入到F0H,将R1中存入的先左移再右移获得|X|(存入到F1H).
(2)同上面的操作取得Y的符号位(存入到F2H)和|Y|(存入到F3H)。
(3)将X和Y的符号位取异或操作,得到最终的符号位存入到F6H中
(4)输入移位循环次数到R0寄存器中,将R2清零,初始化部分积,保存到F7H中.
(5)清零cy,将乘数|Y|取出存到R1中,右移,判断最低位是0还是1.如果是0,则执行(6),如果是1,则执行(7).
(6)从F7H中取出部分积到R1中,从F3H中取出部分积到R2,然后右移部分积,右移|y|,
将结果有保存到相应的地址中.执行跳转指令,执行(9)
(7)取部分积到R1,取|X|到R2然后求部分积加|X|,结果保存到F7H中,然后将|y|右移并保存,清零R1,清零cy.
(8)将计数次数右移,判断是否循环结束,若结束则向下执行,若未结束则跳转到(5).
(9)将部分积与最终符号位相加.
(10)输出高八位R1,第八位R2,停机结束。
5.2 实现原码一位乘的微指令
汇编指令 助记符 注释
$ P0044 IN 01,R0 输入10000000
$ P0145 IN 01,R1 输入x
$ P0272 CLR00,R2 清零R2
$ P03F5 RLC R1,R1 左移X,移出符号位
$ P04EA RRC R2,R2 右移R2,获得8位符号位
$ P0506 STA R2 将x符号位存到F0H
$ P06F0
$ P07EA RRC R2,R2 清零cy
$ P08E5 RRC R1,R1 右移x获得|x|
$ P0905 STA R1 存|x|到F1H
$ P0AF1 F1H
$ P0B45 IN 01,R1 输入y
$ P0CF5 RLC R1,R1 左移Y移出符号位
$ P0DEA RRC R2,R2 右移R2获得8位符号位
$ P0E06 STA R2 将Y符号位存到F2H
$ P0FF2 F2H
$ P10EA RRC R2,R2 清零cy
$ P11E5 RRC R1,R1 右移y获得|y|
$ P1205 STA R1 存|y|到F3H
$ P13F3 F3H
$ P1401 LDA R1 取x的符号位到R1
$ P15F0 F0H
$ P1602 LDA R2 取y的符号位到R2
$ P17F2 F2H
$ P18D4 COM R1,R0 求x的反
$ P19C8 AND R2,R0 求(x的反)和y的与
$ P1A04 STA R0 存(x的反)和y的与的结果到F4
$ P1BF4 F4H
$ P1CD8 COM R2,RO 求Y的反
$ P1DC4 AND R1,R0 求(Y的反)和X的与
$ P1E04 STA R0 存(Y的反)和X的与的结果到F5H
$ P1FF5 F5H
$ P2001 LDA R1 取(x的反)和y的与的结果到R1
$ P21F4 F4H
$ P2202 LDA R2 取(y的反)和x的与的结果到R2
$ P23F5 F5H
$ P2470 CLR R0 清零R0
$ P25E0 RRC R0,RO 清零cy
$ P2696 ADC R1,R2 获得最终的符号位
$ P2706 STA R2 存最终符号位到F6H
$ P28F6 F6H
$ P2944 IN 01,R0 输入移位次数
$ P2A72 CLR R2 清零R2
$ P2B06 STA R2 保存部分积到F7H
$ P2CF7 F7H
$ P2DEA RRC R2,R2 清零cy
$ P2E01 LDA R1 取|y|到R1
$ P2FF3 F3H
$ P30E5 RRC R1,R1 |Y|右移一位
$ P310C BZC 00,00 判断最低位是0还是1
$ P323F 3FH 跳转地址3FH
$ P3301 LDA R1 取部分积到R1
$ P34F7 F7H
$ P3502 LDA R2 取|y|到R2
$ P36F3 F3H
$ P37E5 RRC R1,R1 右移部分积
$ P38EA RRC R2,R2 右移|y|
$ P3905 STA R1 保存右移后的部分积到F7H
$ P3AF7 F7H
$ P3B06 STA R2 保存右移后的|y|到F3H
$ P3CF3 F3H
$ P3D08 JMP 00,00 跳转指令
$ P3E4E 4EH 跳转地址4EH
$ P3F01 LDA R1 取部分积到R1
$ P40F7 F7H
$ P4172 CLR R2 清零R2
$ P42EA RRC R2,R2 清零cy
$ P4302 LDA R2 取|x|到R2
$ P44F1 F1H
$ P4596 ADC R1,R2 求部分积加|x|
$ P46EA RRC R2,R2 右移相加后的部分积
$ P4706 STA R2 保存部分积到F7H
$ P48F7 F7H
$ P4902 LDA R2 取|y|到R2
$ P4AF3 F3H
$ P4BEA RRC R2,R2 右移|y|
$ P4C06 STA R2 保存右移后的|y|到F3H
$ P4DF3 F3H
$ P4E71 CLR R1 清零R1
$ P4FE5 RRC R1,R1 清零cy
$ P50E0 RRC R0,R0 右移计数次数
$ P510C BZC 00,00 判断循环是否结束
$ P5257 57H
$ P5371 CLR R1 清零R1
$ P54E5 RRC R1,R1 清零cy
$ P5508 JMP 00,00 跳转指令
$ P562F 2FH
$ P5701 LDA R1 取部分积到R1
$ P58F7 F7H
$ P5902 LDA R2 取最终符号到R2
$ P5AF6 F6H
$ P5B70 CLR R0 清零R0
$ P5CE0 RRC R0,R0 清零cy
$ P5D96 ADC R1,R2 求符号位加数值位
$ P5E5A OUT R2 输出高8位
$ P5F01 LDA R1 取出低八位到R1
$ P60F3 F3H
$ P6159 OUT R1 输出低八位
$ P6260 HALT 待机