计算机组成原理实验之基于复杂模型机两个8位二进制数乘法的实现
基于复杂模型机两个8位二进制数乘法的实现

评语: 课中检查完成的题号及题数:成绩: 自评分: 90实验报告实验名称:基于复杂模型机两个8位二进制数乘法的实现日期:本人信息班级:学号:姓名:同组同学信息班级:学号:姓名:一、实验目的:1. 综合运用计算机组成原理知识;2. 设计并实现完整的计算机功能;3. 掌握判断条件的使用;二、实验内容:1. 熟悉复杂机的原理指令系统和程序流程2. 利用上述模型机通过编写程序实现两个8位二进制数的乘法运算。
三、项目要求及分析:项目要求:利用复杂模型机通过编写程序实现两个8位二进制数的乘法运算。
分析:在计算机中乘法是通过加法和移位实现的。
我们决定采用原码一位乘实现相关操作。
采用一个寄存器R0存放部分和,R1一个寄存器存放乘数和部分和的低位;R2另一个寄存器存放执行操作的次数。
然后,利用指令系统和运算器实现求和及移位操作,每次执行后循环次数自减一,当循环次数为零时结束操作并将计算结果输出。
四、具体实现:1. 画出算法流程图部分和输入至R0,成熟输入R1,循环次数输入R2R1Λ01H去的乘数的最低位最低位为1NOYesR0+Y—>0取最低位:R0Λ01—>3,然后R3又环移R3将R0的最低位转移至最高位将R1右移一位,然后R1ORR3实现将部分和的最低位移至乘数的最高位将循环次数自减1NO循环次数为0YES将运算结果输出至out单元并停机2.根据算法实现,若需修改指令系统,画出修改后的微程序流程图将微程序流程图中的3B进行拓展RD->ARS->BA右移B位3.二进制代码表二进制数微代码表地址十六进制表示高五位S3-S0 A字段B字段C字段UA5-UA000 00 00 01 00000 0000 000 000 000 00000101 00 6D 43 00000 0000 110 110 101 00001103 10 70 70 00010 0000 111 000 001 11000004 00 24 05 00000 0000 010 010 000 00010105 04 B2 01 00000 1001 011 001 000 00000106 00 24 07 00000 0000 010 010 000 00011107 01 32 01 00000 0010 011 001 000 00000108 10 60 09 00010 0000 110 000 000 00100109 18 30 01 00011 0000 011 000 000 0000010A 10 60 10 00010 0000 110 000 000 010000 0B 00 00 01 00000 0000 000 000 000 000001 0C 10 30 01 00010 0000 011 000 000 000001 0D 20 06 01 00100 0000 000 011 000 000001 0E 00 53 41 00000 0000 101 001 101 000001 0F 00 00 CB 00000 0000 000 000 011 00101110 28 04 01 00101 0000 000 010 000 00000111 10 30 01 00010 0000 011 000 000 00000112 06 B2 01 00000 1101 011 001 000 00000113 00 24 14 00000 0000 010 010 000 01010014 05 B2 01 00000 1011 011 001 000 00000115 00 24 16 00000 0000 010 010 000 01011016 01 B2 01 00000 0011 011 001 000 00000117 00 24 18 00000 0000 010 010 000 01100018 04 32 01 00000 1000 011 001 000 000001 1B 00 53 41 00000 0000 101 001 101 000001 1C 10 10 1D 00010 0000 001 000 000 011101 1D 10 60 8C 00010 0000 110 000 010 001100 1E 10 60 1F 00010 0000 110 000 000 011111 1F 10 10 20 00010 0000 001 000 000 100000 20 10 60 8C 00010 0000 110 000 010 00110028 10 10 29 00010 0000 001 000 000 10100129 00 28 2A 00000 0000 010 100 000 101010 2A 04 E2 2B 00000 1001 110 001 000 101011 2B 04 92 8C 00000 1001 001 001 010 001100 2C 10 10 2D 00010 0000 001 000 000 101101 2D 00 2C 2E 00000 0000 010 110 000 101110 2E 04 E2 2F 00000 1001 110 001 000 101111 2F 04 92 8C 00000 1001 001 001 010 00110030 00 16 04 00000 0000 001 011 000 00010031 00 16 06 00000 0000 001 011 000 00011032 00 6D 48 00000 0000 110 110 101 00100033 00 6D 4A 00000 0000 110 110 101 00101034 00 34 01 00000 0000 011 010 000 00000135 00 00 35 00000 0000 000 000 000 11010136 00 6D 51 00000 0000 110 110 101 01000137 00 16 12 00000 0000 001 011 000 01001038 00 16 13 00000 0000 001 011 000 01001139 00 16 15 00000 0000 001 011 000 010101 3A 00 16 17 00000 0000 001 011 000 010111 3B 00 00 01 00000 0000 000 000 000 000001 3C 00 6D 5C 00000 0000 110 110 101 011100 3D 00 6D 5E 00000 0000 110 110 101 0111103E 00 6D 68 00000 0000 110 110 101 101000 3F 00 6D 6C 00000 0000 110 110 101 101100 地址十六进制表示高五位S3-S0 A字段B字段C字段UA5-UA04. 编写微程序;机器指令$P 00 60;IN R0 00H 初始部分和$P 01 00$P 02 21;IN R1 手动输入乘数$P 03 00$P 04 62;IN R2 循环次数$P 05 08$P 06 23;IN R3 手动输入被乘数$P 07 00$P 08 D3;STA,R3->MEM$P 09 00$P 0A 63;IN R3 01H(提取最低位)$P 0B 01$P 0C D3;STA,R3->MEM$P 0D 01$P 0E C3;LAD,MEM->R3$P 0F 01$P 10 17;R1与R3->R3 LOOP START$P 11 F0;BZC,FZ=0,E->PC$P 12 16$P 13 C3;LAD,MEM->R3$P 14 00$P 15 0D;R0+R3->R0$P 16 C3;LAD,MEM->R3$P 17 01$P 18 17;R1与R3->R3$P 19 AF;R3循环右移R3位->R3;$P 1A D3;STA,R3->MEM$P 1B 02$P 1C C3;LAD,MEM->R3$P 1D 01$P 1E BD;R1右移R3位->R1$P 1F C3;LAD,MEM->R3$P 20 02$P 21 9D;R1 OR R3->R1$P 22 C3;LAD,MEM->R3$P 23 01;$P 24 BC;R0右移R3位->R0 $P 25 8E;R2-1->R2;$P 26 F0;BZC R2$P 27 30$P 28 E0;JMP LOOP$P 29 10$P 30 30;OUT 40H$P 31 40$P 32 50;HALT;微指令$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 043201$M 1B 005341$M 1C 10101D$M 1D 10608C$M 1E 10601F$M 1F 101020$M 20 10608C$M 21 002422$M 22 02B201$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 001621$M 3C 006D5C$M 3D 006D5E$M 3E 006D68$M 3F 006D6C;//** End Of MicroController Data **//5. 编写机器指令验证联机装入调试:输入1111 和1100得到结果为:10110100五、调试运行结果:10110100六、所遇问题及解决方法:1原先的指令系统中不存在右移操作,首先对原指令系统的保留操作进行了修改2 将部分和的最低位移至乘数的最高位,我们进行了多步操作和想与相或操作进行了实现。
计算机组成原理实验报告

计算机组成原理实验报告实验报告运算器实验⼀、实验⽬的掌握⼋位运算器的数据传输格式,验证运算功能发⽣器及进位控制的组合功能。
⼆、实验要求完成算术、逻辑、移位运算实验,熟悉ALU运算控制位的运⽤。
三、实验原理实验中所⽤的运算器数据通路如图2-3-1所⽰。
ALU运算器由CPLD描述。
运算器的输出FUN经过74LS245三态门与数据总线相连,运算源寄存器A和暂存器B的数据输⼊端分别由2个74LS574锁存器锁存,锁存器的输⼊端与数据总线相连,准双向I/O 输⼊输出端⼝⽤来给出参与运算的数据,经2⽚74LS245三态门与数据总线相连。
图2-3-1运算器数据通路图中A WR、BWR在“搭接态”由实验连接对应的⼆进制开关控制,“0”有效,通过【单拍】按钮产⽣的脉冲把总线上的数据打⼊,实现运算源寄存器A、暂存器B的写⼊操作。
四、运算器功能编码算术运算逻辑运算K23~K0置“1”,灭M23~M0控位显⽰灯。
然后按下表要求“搭接”部件控制路。
表2.3.2 运算实验电路搭接表算术运算1.运算源寄存器写流程通过I/O单元“S7~S0”开关向累加器A和暂存器B置数,具体操作步骤如下:2.运算源寄存器读流程关闭A、B写使能,令K18=K17=“1”,按下流程分别读A、B。
3.加法与减法运算令M S2 S1 S0(K15 K13~K11=0100),为算术加,FUN及总线单元显⽰A+B的结果令M S2 S1 S0(K15 K13~K11=0101),为算术减,FUN及总线单元显⽰A-B的结果。
逻辑运算1.运算源寄存器写流程通过“I/O输⼊输出单元”开关向寄存器A和B置数,具体操作步骤如下:2.运算源寄存器读流程关闭A、B写使能,令K17= K18=1,按下流程分别读A、B。
①若运算控制位设为(M S2 S1 S0=1111)则F=A,即A内容送到数据总线。
②若运算控制位设为(M S2 S1 S0=1000)则F=B,即B内容送到数据总线。
计算机组成原理之复杂模型机设计实验

)计算机与信息技术学院实验报告表各指令的助记符、功能和具体格式2、总体设计本模型机的数据通路框图如图。
根据机器指令系统要求,设计微程序流程图及确定微地址,如图。
《图数据通路框图按照系统建议的微指令格式,参照微指令流程图,将每条微指令代码化,译成二进制代码表,并将二进制代码表转换为联机操作时的十六进制格式文件,见表。
3、实验程序:[图微程序流程图三、实验步骤:}(1)按图连接实验线路,仔细查线无误后接通电源。
(2)写微程序与PC联机,将实验微程序装入实验装置中或脱机时手动将本实验微程序写入实验装置中,手动写入的具体方法如下:① 编程(4)运行程序①单步运行程序A、使编程开关处于“RUN”状态,“STEP”为“STEP”状态,“STOP”为“RUN”状态。
B、拨动总清开关CLR(1→0→1),微地址清零,程序计数器清零,程序首址为00H。
C、单步运行一条微指令,每按动一次START键,即单步运行一条微指令。
对照微程序流程图,观察微地址显示灯是否和流程一致。
②连续运行程序A、使“STATE UNIT”中的“STEP”开关置为“ECEX”状态,“STOP”开关置为“RUN”状态。
B、拨动CLR开关,清微地址及程序计数器,然后按动START,系统连续运行程序,稍后将STOP 拨至“STOP”时,系统停机。
图实验接线图四、实验结果分析实验运行如下代码能成功运行。
实验运行如下代码能成功运行。
程序助记符SP0044 IN 01 ,ROSP0146 IN 01 ,R2SP0298 ADC R2,R0SP0381 MOV R0,R1。
8位2进制乘法器电路设计.docx

8位二进制乘法电路选题目的:学会使用quarter 软件设计电路及仿真,实现8位二进制乘法电路。
设计目的:学习应用移位相加原理设计8位乘法器实现方案:由于其原理是利用8位二进制乘法采用移位相加的方法。
即用乘数的 各位数码,从低位开始依次与被乘数相乘,毎相乘一次得到的积称为部分积,将 第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的 部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结 果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0 )和乘数(N7N6N5N4N3N2N1N0)分别为 11010101 和 10010011,其计算过程如下:N0与被乘数相乘的部分积,部分积右移一位 N1与被乘数相乘的部分积两个部分积Z 和,部分积Z 和右移一位 N2与被乘数相乘的部分积与前面部分积之和相加,部分积之和右移一 N4与被乘数相乘的部分积N7与被乘数相乘的部分积 与前面部分积Z 和相加 右移一位得到最后的积设计过程:从逻辑图及其乘法操作时序图图(示例中的相乘数为9FH 和FDH )上可以清楚地看出此乘法器的工作原理。
逻辑波形图中, START 信号的上跳沿及其高电平有两个功能,即16位寄存器清零和 被乘数A[7..O]向移位寄存器SREG8B 加载;它的低电平则作为乘法 使能信号。
CLK 为乘法时钟信号。
当被乘数被加载于8位右移寄存 器SREG8B 后,110 10 10 1 X 1 0 0 1 0 0 1 1110 10 10 1 110 10 10 1 + 110 10 10 1 10 0 1111111 10 0 1111111 + 000000000 10 0 1111111 0 10 0 1111111 + 000000000 10 10 10 01 10 10 0 10 0随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
复杂模型机实验实验报告(共9篇)

复杂模型机实验实验报告(共9篇)_复杂模型机实验报告计算机组成原理实验报告实验题目:一台模型计算机的总体设计之复杂模型机设计实验目的:(1)在掌握部件单元电路实验的基础上,进一步将其组成系统,构造一台复杂模型计算机,建立一台基本完整的整机。
(2)为其定义至少五条机器指令,并编写相应的微程序,通过联机调试,观察计算机执行指令:从取指令、指令译码、执行指令等过程中数据通路内数据的流动情况,进一步掌握整机概念。
实验设备TDN-CM+教学实验系统一套、微型计算机一台、排线若干。
实验原理:(1)数据格式及指令系统:①数据格式模型机规定数据采用定点整数补码表示,字长为8位,其格式如下:其中,第7位为符号位,数值表示范围是-27 ≤X≤27-1 ②指令格式模型机设计4大类指令共16条,其中包括算术逻辑指令、I/O 指令、访问及转移指令和停机指令。
A.算术逻辑指令设计九条算术逻辑指令并用单字节表示,寻址方式采用寄存器直接寻址,其格式如下:其中,OP-CODE为操作码,RS为源寄存器,RD为目标寄存器,并规定:九条算术逻辑指令的助记符、功能和具体格式见表5.2-1。
B.访问及转移指令:模型机设计两条访问指令,即存数(STA)、取数(LDA),两条转移指令,即无条件转移(JMP)、结果为零或有进位转移(BZC),指令格式如下:其中,OP-CODE为操作码,RD为目的寄存器地址(LDA、STA 指令使用)。
D为位移量(正负均可),M为寻址模式,其定义如下:本模型机规定变址寄存器RI指定为寄存器R2。
C.I/O指令:输入(IN)和输出(OUT)指令采用单字节指令,其格式如下:其中,addr=01时,选中“INPUT DEVICE”中的开关组作为输入设备,addr=10时,选中“OUTPUT DEVICE”中的数码块作为输出设备。
D.停机指令:停机指令格式如下:HALT指令,用于实现停机操作。
③指令系统:本模型机共有16条基本指令,其中算术逻辑指令七条,移位指令两条,访问内存指令和程序控制指令四条,输入/输出指令两条,其它指令一条。
《计算机组成原理》课程设计_两个数的乘法运算

《计算机组成原理》课程设计报告课程设计题目:两个数的乘法运算小组成员:….完成日期:第十一周模型机设计实验一、实验目的综合运用所学计算机原理知识,设计并实现较为完整的模型计算机。
其功能为:输入两个数,进行两个正数(二进制4位)的乘法运算,输出结果。
二、实验内容编写程序,运行程序,观察并记录运行结果。
三、实验仪器1、ZY15CompSys12BB计算机组成原理及系统结构教学实验箱一台2、排线若干3、PC机一台四、预备知识1、数据格式8位,其格式如下:其中第7位为符号位,数值表示范围是:-1≤X<127。
2、指令格式模型机设计四大类指令共十六条,其中包括算术逻辑指令、I/O指令、访问存储器、转移指令和停机指令。
(1)算术逻辑指令规定:算术逻辑指令的名称、功能和具体格式见表2—3。
(2)访存指令及转移指令模型机设计2条访存指令,即存数(STA)、取数(LAD),2条转移指令,即无条件转移(负均可)本模型机规定变址寄存器RI指定为寄存器R2。
(3)I/O指令其中,在IN 指令中,addr=01,选中“输入”中的开关组作为输入设备,在OUT指令中,addr=10时,表示选中“输出单元”中的数码块作为输出设备。
(4)停机指令HALT指令,机器码为60H,用于实现停机操作。
3、指令系统复杂模型机共有16条基本指令,其中算术逻辑指令7条,访问内存指令和程序控制指令4条,输入输出指令2条,其它指令1条。
表2-3列出了各条指令的格式、汇编符号、指令功能。
我们依然采用复杂模型机指令系统中的部分指令。
五、实验的机器指令程序如下:地址内容助记符说明00 14 IN R0 ; 作计数器用,00000001→R001 15 IN R1 ; 输入X的值,0000xxxx→R102 05 STA R1 ; X→22H03 2204 15 IN R2 ; 输入Y→R2,0000xxxx→R205 06 STA R2 ; R2→23H06 2307 42 CLR R2 ; R2清零08 06 STA R2 ; 存入结果R2→24H09 240A 02 LAD R2 ; 提取[23H]→R20B 230C 6A RRC R2,R2 ; R2带进位右循环一位→R2 0D 06 STA R2 ; 循环结果→23H0E 230F 02 LAD R2 ; 提取结果S,[24H]→R210 2411 0C BZC [15H] ; 有进位跳转到15H12 1513 08 JMP [18H] ; 无条件跳转到[18H]14 1815 01 LAD R1 ; 提取X→R116 2217 56 ADC R1,R2 ; R1+R2→R218 6A RRC R2,R2 ; R2带进位右循环一位→R219 06 STA R2 ; 循环结果→24H1A 241B70 RLC R0,R0 ; R0带进位左循环一位→R0 1C 0C BZC [20H] ; 有进位跳转到20H1D 201E 08 JMP [0AH] ; 无条件跳转到[0AH]1F 0A20 2A OUT R2 ; 输出R2中的结果21 60 HATL ; 停机22 XX23 XX24 XX六、程序机器指令和微程序以上程序的机器指令如下:$P0014 $P0115 $P0205 $P0322$P0416 $P0506 $P0623 $P0772$P0806 $P0924 $P0A02 $P0B23$P0C6A $P0D06 $P0E23 $P0F02$P1024 $P110C $P1215 $P1308$P1418 $P1501 $P1622 $P1756$P186A $P1906 $P1A24 $P1B70$P1C0C $P1D20 $P1E08 $P1F0A$P202A $P2160微程序如下$M00018108 $M0101ED82 $M0200C050$M0300A004 $M0400E098 $M0501B406$M06959B41 $M07298838 $M0801ED8A$M0901ED8C $M0A00A01E $M0B018001$M0C00201F $M0D019801 $M0E19880F$M0F019801 $M1001ED83 $M11001001$M12030401 $M13018016 $M143D9A01$M1501A205 $M16318207 $M1731820E$M18009001 $M19028401 $M1A05DB81$M1B0180DC $M1C018001 $M1D05DB8D$M1E070A08 $M1F068A09七、复杂模型机的数据通路框图WE图2-7复杂模型机数据通路框图八、复杂模型机实验接线图接到指令单元接到开关单元九、复杂模型机实验流程图十、课程设计总结1、成员总结体会…2、遇到的问题和解决的方法等1)寄存器不够用。
两位乘法 verilog hdl

一、介绍Verilog HDL(硬件描述语言)是一种用于建模电子系统的硬件描述语言,常用于数字电路设计和验证。
在Verilog HDL中,实现两位乘法器是一个常见的需求,本文将介绍如何使用Verilog HDL设计和实现一个两位乘法器。
二、两位乘法器的原理两位乘法器是用于计算两个二进制数的乘积的电路。
对于两个n位的二进制数A和B,它们的乘积可以使用shift-and-add算法来计算。
具体来说,可以将A拆分为A[0]和A[1],B拆分为B[0]和B[1],然后计算A[0]*B[0]、A[0]*B[1]、A[1]*B[0]和A[1]*B[1],最后将它们的和相加即可得到A*B的结果。
三、Verilog HDL的实现使用Verilog HDL可以轻松地实现两位乘法器。
以下是一个简单的Verilog HDL代码实现:```verilogmodule two_bit_multiplier(input [1:0] A, // 两位输入input [1:0] B,output [3:0] result // 四位输出);reg [3:0] temp; // 临时变量用于保存计算的结果always (A or B) begintemp[0] = A[0] B[0]; // 计算A[0]*B[0]temp[1] = A[0] B[1]; // 计算A[0]*B[1]temp[2] = A[1] B[0]; // 计算A[1]*B[0]temp[3] = A[1] B[1]; // 计算A[1]*B[1]result = {temp[3],temp[2]+temp[1],temp[0]}; // 将计算结果相加并输出endendmodule```上述Verilog HDL代码描述了一个两位乘法器模块。
模块有两个2位输入A和B,以及一个4位输出result。
通过使用always块来计算A 和B的乘积,并将结果存储在temp变量中;将temp中的值相加并输出到result中。
8位乘法器设计

EDA大作业基于VHDL的8位乘法器设计1.乘法器原理8位乘法器可用移位和加法来实现,两个8位数相乘,总共需要执行8次加法运算和8次移位运算,由乘数的末位值确定被乘数是否与原部分积相加,从乘数的最低位开始,若乘数为1,加被乘数,然后右移一位,形成新的部分积,乘数同时右移一位;若乘数为0,加上零值,然后右移一位,形成新的部分积,乘数同时右移一位,直到乘数的最高位为止,从而得出最终的乘积结果。
实现原码一位乘法的硬件逻辑结构图如下图所示。
用寄存器R0存放部分积;R0存放乘数Y,并且最低位Yn作判断为;R0和R1都具有右移功能并且是连通的;寄存器R2存放被乘数X,加法器完成部分积与位积求和,计数器记录相加移位的操作次数。
8位乘法器的顶层设计主要分成四大功能模块,并可根据分解的层次进行设计,各个功能模块作用介绍如下:1)右移寄存器模块:是指寄存器中所存的代码能够在移位脉冲的作用下依次左移或右移,本设计采用的一个8位寄存器,能存放8位二进制代码,需用8个触发器来构成,它可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
2)加法器:本设计用到一个8位加法器,主要进行操作数的加法运算。
3)乘1模块:主要实现8位与1位的乘法运算。
4)锁存器:它所实现的功能是把当前的状态锁存起来,使CPU送出的数据在接口电路的输出端保持一段时间锁存后状态不再发生变化,直到解除锁定。
本次设计采用16位锁存器,同时也是一个右移寄存器,在时钟信号作用下,进行输入值的移位与锁存。
2.乘法器设计流程本设计采用移位和加法来实现两个8位二进制数相乘。
由乘数的末尾值来确定被乘数是否与原部分积相加,然后右移一位,形成新的部分积;同时,乘数也右移一位,由次低位作新的末位,空出最高位放部分积的最高位。
例如被乘数为00000101,乘数为01101111,初始条件下,部分积为0,乘数最低位为1,加被乘数,和为00000101,使其右移一位,形成新的部分积为00000010,乘数同时右移一位,原和最低位1被放到乘数的最高位,此时,乘数最低位为1,加00000101,和为00000111,使其右移一位,形成新的部分积为0000011,依次类推,循环8次,总共需要进行8次相加和8次移位操作,最终得出乘积结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
评语: 课中检查完成的题号及题数:课后完成的题号与题数:成绩: 自评分: 必填实验报告实验名称:基于复杂模型机两个8位二进制数乘法的实现日期:2011.12.29班级:学号:姓名:班级:学号:姓名:一、实验目的:1. 综合运用所学计算机组成原理知识,设计并完成较为完整的计算机2. 掌握原码一位乘实现的控制流程和硬件配置二、实验内容:利用复杂模型机编写程序实现两个8位二进制的乘法运算三、项目要求及分析:本程序要求编写程序实现两个8位二进制的乘法运算并将结果输出。
两数相乘,可视为加法和移位两种运算,因为在模型机中规定字长全部用来表示数据,数值全为正,故不需要考虑符号,因此在设计编写时需要考虑的问题有:(1)乘数、被乘数以及每次加法移位运算后的临时数据存放位置;(2)在做加法运算时,如何取出乘数的末位以确定临时数据与0相加或与被乘数相加;(3)加法运算时,若两数相加产生溢出,如何判断溢出;(4)移位运算时,如何控制乘数与临时数据的右移位。
这里,需要考虑如何实现:a).对于乘数,右移后将被乘数的末位移至乘数的高位;b).对于临时数据,右移后若先前相加时产生溢出,则将被乘数高位补1,若无溢出,则高位补0;(5)如何控制程序的结束。
对于问题(1),将临时数据存放在R0寄存器,乘数存放在R1寄存器,因为被乘问题(2)中,将乘数与01相与结果再减1,若末位为0,则产生借位,FC=1,P<4>测试时直接进行下步的移位运算;若末位为1,则不产生借位,FC=0,P<4>测试时进行临时数据与被乘数相加,再进入下步的移位运算。
判断溢出的目的是为了在下步移位运算时确定临时数据的高位补1或是不0,因此问题(3)的判断方法可类似问题(2),将进位信息存入寄存器R2中后减1,再次存入R2。
若进位为0,则产生借位,FC=1;若进位为1,则不产生借位,FC=0。
问题(4)先进行乘数的移位,将乘数与(FE)十六进制相与,从而将乘数末位变为0,再将临时数据与(01)十六进制相与,取出临时数据的末位,最后将两个相与的结果相或后右环移,就实现临时数据的末位移至乘数的高位的运算。
进行临时数据的移位时,将临时数据与(FE)十六进制相与,从而将临时数据末位变为0,然后结果右环移,根据问题(3)溢出判断的结果选择与(80)十六进制或与(00)十六进制相或,就实现临时数据的移位。
问题(5)中,因为两个8位二进制数的乘法需要移位运算8次,故可设一个计数器,八次运算后结束程序。
四、具体实现:1、画出算法流程图开始输入 00 ~ 07: 载入被乘数与乘数,分 别 存入 主存的60、61位置初始化 08-0B :置计数值为08H ,存入主存 0C-0D :初始和00=>R0, 0E-0F: 乘数=>R1判断乘数末位 10-11: 被乘数=>R212-15: 01AND[R1]再减1,判断乘数末位是否为016 ~ 17: FC==1 ?相加 18: [R0]+[R1]=>[R0]部分积与被乘数相加 移位 21-23:[R0]部分积右移一位24: [R1]乘数右移一位,FC 标记移出的数判断循环次数 3A-43:计数值=>[R2],自减1,再存入主存44-45: FZ==1 ?4E: 算法完成, 停机Y (乘数末位为0)N(乘数末位为1)判断溢出 19-20 : 若FC==1,有溢出,00=>R2 否则 01=>R2修正[R1]最高位 25-2E:若FC==1移位前[R0]最低位为1,80AND[R1]=>[R1],[R1]最高位置1, 否则 7FAND[R1]=>[R1],[R1]最高位置0 即将[R0]最低位移到[R1]最高位修正[R0]最高位 2F-39:[R2]自减1若FC==1,[R2原为0],有溢出80AND[R0]=>[R0],[R0]最高位置1, 否则 7FAND[R0]=>[R0],[R0]最高位置0Y (循环8次)N(循环不足8)存数 46-49:低八位[R1]存入主存64单元 高八位[R0]存入主存65单元输出 4A-4D红色为改动过的微程序代码红色为改动过的微程序代码$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 02B201 ; 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 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加14. 编写机器指令验证$P 00 20 ; START: IN R0,00H 从IN单元读入被乘数$P 01 00 ;$P 02 D0 ; STA 00 60H,R0 存入主存#60$P 03 60 ;$P 04 20 ; IN R0,#00H 从IN单元读入乘数$P 05 00 ;$P 06 D0 ; STA 00 61H,R0 存入主存#61$P 07 61 ;$P 08 60 ; LDI R0,08H 计数值08$P 09 08 ;$P 0A D0 ;STA 00 62H,RO 将计数值存入主存$P 0B 62 ;$P 0C 60 ;LDI R0,00H 载入初始和00$P 0D 00 ;$P 0E C1 ;LAD 00 61H,R1 读乘数到R1$P 0F 61 ;$P 10 C2 ;LAD 00 60H,R2 读乘数到R2$P 11 60 ;$P 12 63 ;LDI R3,01H 载入校验数01$P 13 01 ;$P 14 17 ;AND R3,R1 取乘数的最低位$P 15 73 ;DEC R3 R3自减1$P 16 F0 ;BZC 00 21H 最低位为0则跳转$P 17 21 ;$P 18 08 ;ADD R0,R2 相加$P 19 F0 ;BZC 00 1FH 溢出则跳转$P 1A 1F ;$P 1B 62 ;LDI R2 01H R2作为溢出标志,不溢出为1 $P 1C 01 ;$P 1D E0 ;JMP 00 21$P 1E 21 ;$P 1F 62 ;LDI R2 00H 溢出置0$P 21 63 ;LDI R3 00H 移位位数$P 22 00 ;$P 23 AD ;RR R1,R3 R1右移0位$P 24 AC ;RR R0,R3 R0右移0位$P 25 F0 ;BZC 00 2CH R0移出的是1则跳转$P 26 2C ;$P 27 63 ;LDI R3,01111111B 载入屏蔽字$P 28 7F ;$P 29 1D ;AND R1,R3 给R1最高位置0$P 2A E0 ;JMP 00,2F$P 2B 2F ;$P 2C 63 ;LDI R3 10000000B 载入屏蔽字$P 2D 80 ;$P 2E 9D ;OR R1,R3 给R1最高位置1$P 2F 72 ;DEC R2 R2自减1$P 30 F0 ;BZC 00 37H 18步有溢出则跳转$P 31 37 ;$P 32 63 ;LDI R3,01111111 置入屏蔽字$P 33 7F ;$P 34 1C ;AND R0,R3 给R0高位置0$P 35 E0 ;JMP 00,3AH$P 36 3A ;$P 37 63 ;LDI R3,10000000 置入屏蔽字$P 38 80 ;$P 39 9C ;OR R0,R3 给R0高位置1$P 3A C2 ;LAD 62H,R2 取计数值$P 3B 62 ;$P 3C 72 ;DEC R2 计数值自减1$P 3D D2 ;STA 62H,R2 存计数值$P 3E 62 ;$P 3F 63 ;LDI R3,01H 载入检验数$P 40 01 ;$P 41 8E ;SUB R2,R3 判断是否循环8次$P 42 F0 ;BZC 00 46H 执行到第八次时00-01有借位,跳转$P 43 46 ;$P 44 E0 ;JMP 00 10H 返回继续循环$P 45 10 ;$P 46 D1 ;STA 64H,R1 低位存入主存#64H$P 47 64 ;$P 48 D0 ;STA 65H,R0 高位存入主存#65H$P 49 65 ;$P 4A 34 ;OUT 40H,R1 显示低位$P 4B 40 ;$P 4C 30 ;OUT 40H,R0 显示高位$P 4E 50 ;HLT 停机联机装入调试五、调试运行结果:⨯=H H H03030009⨯=01FFH FFH FE H六、所遇问题及解决方法:设计中的主要问题就是上述问题分析时遇到的问题,这些问题的解决花费了很长一段时间。