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

合集下载

基于复杂模型机两个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位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篇)

复杂模型机实验实验报告(共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中,实现两位乘法器是一个常见的需求,本文将介绍如何使用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位乘法器设计

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、从键盘输入一个带符号的十进制定点整数(-127 ~+127之间)2、从屏幕上分别显示其原码、补码、移码形式(8位带符号二进制形式)3、从键盘输入两个带符号十进制定点整数X和Y(-127 ~+127之间),屏幕上输出[X]原和[Y]和[X*Y]原。

要求画出程序的流程图三、思考1、计算机中数据是如何表示的?为什么数据要-127~+127 区间?2、原码一位乘的原理?3、先行进位的原理?实验步骤与预习:预习:计算机中的数据按表现形式可分为数字数据和模拟数据。

1、数字数据,如各种统计或量测数据。

数字数据在某个区间内是离散的值。

2、模拟数据,由连续函数组成,是指在某个区间连续变化的物理量,又可以分为图形数据(如点、线、面)、符号数据、文字数据和图像数据等,如声音的大小和温度的变化等。

数据的表现形式还不能完全表达其内容,需要经过解释,数据和关于数据的解释是不可分的。

原码一位乘的原理?在定点计算机中,两个原码表示的bai数相乘的运算规则是:乘du积zhi的符号位由两数的符号按异或运而乘积的数值部分则是两个正数相乘之积。

设n位被乘数和乘数用定点小数表示:被乘数[x]原= xf .x0 x1 x2 …xn乘数[y]原= yf .y0 y1 y2 …yn 则乘积[ z ]原= ( xf⊕yf ) . (0. x0 x1 x2 …xn)(0 . y1 y2 …yn)式中,xf为被乘数符号,yf为乘数符号。

乘积符号的运算法则是:同号相乘为正,异号相乘为负。

由于被乘数和乘数和符号组合只有(xf yf = 00,01,10,11),因此积的符号可按“异或”(按位加)运算得到。

数值部分的运算方法与普通的十进制小数乘法相类似,不过对于用二进制表达的数来说,其更为简单一些:从乘法y的最低位开始,若这一位为“1”,则将被乘数x写下;若这一位为“下全0。

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

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

计算机组成原理实验之基于复杂模型机两个8位二进制数乘法的实现本文将讨论计算机组成原理实验中基于复杂模型机实现两个8位二进制数乘法的方法和过程。

首先,我们需要了解什么是复杂模型机。

复杂模型机是一种指令集较为丰富的模型机,它可以对各种计算机组成原理相关的知识进行实验,包括数据传输、算术运算、控制逻辑等。

通过使用复杂模型机,我们可以更加直观地理解计算机的工作方式。

在该实验中,我们需要实现两个8位二进制数的乘法。

具体步骤如下:1.首先,我们需要设计一个乘法单元,该单元可以将两个8位的二进制数进行乘法运算,并输出结果。

乘法单元可以采用循环加法的方法实现,即将其中一个乘数逐位与另一个乘数相乘,并将结果累加。

在循环中,需要使用一个累加器来存储运算结果。

2.在乘法单元的设计中,我们需要考虑进位和溢出情况。

当两个二进制数相乘得到的结果超过8位时,我们需要保留最低的8位,并且判断是否有进位。

当运算结果超过8位时,我们需要对结果进行截断,并输出进位信息。

3.实现乘法单元时,还需要考虑符号位的处理。

由于本实验中我们只考虑无符号二进制数的乘法,因此我们可以忽略符号位的处理。

4. 实验中可以使用硬件描述语言(如VHDL或Verilog)进行乘法单元的设计和仿真。

利用仿真工具,我们可以对设计的乘法单元进行测试和调试,确保其功能正确。

5.在设计和实现完乘法单元后,我们可以将其集成到复杂模型机的指令集中。

具体实现方式可以根据复杂模型机的架构和指令集设计进行调整。

通过以上步骤,我们可以实现两个8位二进制数乘法的功能。

在实验中,我们可以通过提供不同的测试用例来验证乘法功能的正确性,并观察乘法单元的输出结果是否符合预期。

此外,我们还可以将乘法单元与其他指令进行组合,进一步实现复杂的运算和应用,以加深对计算机组成原理的理解。

总结起来,基于复杂模型机实现两个8位二进制数乘法的实验需要进行乘法单元的设计和实现,并将其集成到复杂模型机的指令集中。

ASIC系统设计实验报告八位乘法器

ASIC系统设计实验报告八位乘法器

八位乘法器的设计汪明 2080130204 信号与信息处理 乘法是算术运算中经常用到的一个运算单元,所以在算法实现中会经常用到乘法。

由于乘法器具有一定的复杂性,考虑到面积等因素,很多传统的处理器中都不包含乘法器单元,乘法则是通过算法换算成加法和移位在处理器中进行实现,针对这些处理器编写程序的时候应尽量少的应用乘法运算。

随着DSP 技术的逐步发展,目前大多数高性能的处理器中都包含了乘法器运算单元,但仍有很多小型的控制型处理器不包含这一单元,所以设计面积小、速度快、性能稳定的乘法器模块仍然很有意义。

本实验的目的是选用一种设计方案设计一个八位乘法器,利用XINLINX ISE 软件进行VHDL 程序的编写,然后对程序进行仿真验证,并对所设计的乘法器进行评价。

1 原理分析与方案选择乘法器的设计有多种方案,有模拟乘法器、数字乘法器两种类型,前者主要是利用模拟器件对模拟信号进行乘法的设计,复杂度较高,后者则是通过数字器件来实现数字信号的乘法。

本实验利用FPGA 设计数字乘法器件,根据数字信号的乘法运算准则,又有串行和并行两种设计方法,串行设计时被乘数从低位到高位串行输入,乘法结果从低位到高位串行输出,其常用的结构(四位乘法器)如下图(1)所示;并行乘法器的输入/输出采用并行的方式,通常情况下计算性能比串行的好。

图1 四位串行乘法器结构本文采用并行输入/输出方式来进行乘法器的设计。

下面以4位二进制数的乘法为例,对二进制乘法运算的过程(图2示)进行说明。

由图2可知,如果对中间部分一行一行的处理,则乘法部分由一个个的2输入与门与二输入全加器组成,将这些结构联合在一起组成如图3所示的结构。

)0()1()2()3()4()5()6()7(0313233302122232011121310010203001230123pro pro pro pro pro pro pro pro b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a a a a a b b b b ----------------------------------------+••••+••••+••••••••⨯K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K 图2 四位二进制乘法过程图3 四位二进制乘法结构图从图3可以看出,上述结构中顶层、底层、中间层分别采用不同的结构,而且中间层的三个层结构完全相同。

计算机组成原理实验教案(ly)

计算机组成原理实验教案(ly)

计算机组成原理实验教案李妍计算机学院计算机系前言学习《计算机组成原理》课程的目的,是让学生建立计算机系统的整机概念。

本实验的任务则侧重于:以基本模型机为对象,了解计算机系统的硬件组成。

在实验中涉及基本模型机的各主要部件的结构与功能任务;涉及微程序设计的方法与理论。

实验的开设是基于COP2000计算机组成原理教学实验系统,该系统的软硬件对用户的实验设计具有完全的开放特性。

COP2000 各实验模块的数据线、地址线与系统之间的挂接是通过三态门,而不是其它实验设备所采用的扁平连线方法,而数据线、地址线是否要与系统连通,则由用户连线控制,这样,就真实的再现了计算机工作步骤。

各寄存器、部件均有8 位数据指示灯显示其二进制值,两个8 段码LED 显示其十六进制值,清楚明了,两个数据流方向指示灯。

以直观反映当前数据值及该数据从何处输出,而又是被何单元接收的。

实验系统各部件可以通过J1、J2、J3 座之间不同的连线组合,可进行各部件独立的实验,也可进行各部件组合实验,再通过与控制线的组合,就可构造出不同结构及复杂程度的原理性计算机。

本实验台提供三种工作方式1、手动方式不连PC 机,通过COP2000 实验仪的键盘输入程序、微程序,用LCD及各部件的8 个状态LED,两个方向LED 观察运行状态和结果,手动进行实验;2、联机方式连PC 机,通过WINDOWS 调试环境及图形方式进行更为直观的实验。

在WINDOWS 调试环境中提供了功能强大的逻辑分析和跟踪功能,既可以以波形的方式显示各逻辑关系,也可在跟踪器中,观察到当前状态的说明及提示;3、模拟方式不需实验仪,仅需计算机即可进行实验。

系统的数据线、地址线、控制线均在总线插孔区引出,并设计了40 芯锁进插座,供用户进行RAM、8251、8255、8253、8259 等接口器件的扩展实验。

计算机组成原理实验教案1实验一寄存器实验一、实验目的1. 了解模型机中A, W寄存器结构、工作原理及其控制方法。

(VHDL)8位二进制乘法器电路程序

(VHDL)8位二进制乘法器电路程序

8位二进制乘法电路该乘法器是有由8位加法器构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。

用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。

直到所有的部分积都被加过一次。

例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下:下面分解8位乘法器的层次结构,分为以下4个模块:①右移寄存器模块:这是一个8位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。

②加法器模块:这是一个8位加法器,进行操作数的加法运算。

③1位乘法器模块:完成8位与1位的乘法运算。

④锁存器模块:这是一个16位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。

按照上述算法,可以得到下图所示之框图和简单流程图。

图中8位移位寄存器reg_8存放乘数a,从a的最低位开始,每次从reg_8中移出一位,送至1×8位乘法器multi_1中,同时将被乘数加至multi_1中,进行乘法运算,运算的结果再送至8位加法器adder_8中,同时取出16位移位寄存器reg_16的高8位与之进行相加,相加后结果即部分积存入reg_16中,进行移位后并保存。

这样经过8次对乘数a的移位操作,所以的部分积已全加至reg_16中,此时锁存器reg_16存放的值即所要求的积。

(1)8位移位寄存器reg_8的设计(A )电路框图(B8位移位寄存器是在时钟(r8_clk'event and r8_clk='1')信号作用下,当r8_load='1'时,将8位乘数加载进入;而当r8_load='0'时,对数据进行移位操作,同时定义一个信号reg8用来装载新数据及移位后的操作数,完成这些操作后,寄存器的最低位reg8(0)传送给r8_out 输出。

基于复杂模型机两个8位二进制数乘法的实现

基于复杂模型机两个8位二进制数乘法的实现

评语: 课中检查完成的题号及题数:成绩: 自评分:实验报告实验名称:基于复杂模型机两个8位二进制数乘法的实现日期:本人信息班级:学号:姓名:一、实验目的:1、综合运用所学计算机组成原理知识,设计并实现较为完整的计算机;2、理解计算机运行的原理以及微指令架构;3、掌握原码一位乘实现的控制流程和硬件配置。

二、实验内容:1、根据实验指导书提供的复杂模型机电路图连接电路,并校验电路2、装载示例程序并运行,分析理解所增加的微指令3、根据复杂模型机现有条件设计两个8位二进制相乘的程序三、项目要求及分析:要求:利用上述模型机通过编写程序实现两个8位二进制数的乘法运算。

分析:要求利用复杂模型机现有的指令系统以及硬件电路设计一段实现八位二进制数相乘的程序。

因为乘法在计算机中有多种算法实现,包括整数乘、小数乘、原码乘、补码乘等等,因为此次实验并不要求给出一个完整的实用乘法程序段,故实验程序只实现两个八位二进制整数无符号相乘运算。

采用算法如下:采用算法如下:乘数 A A7A6A5A4A3A2A1A0被乘数B乘积 C = B·A0 +2(B·A1+2(B·A2+ ……2·B·A7))))))其中Ai为0或者1,在机器中使用原码表示2*X是使X左移1位。

若不采用循环模式而是直接使用指令将该算法的乘积等式直接表示出来,需要A,B,RL(结果低位),RH (结果高位)四个通用寄存器;而若使用循环模式,则需要除A、B、RL、RH外的CX (控制循环次数以及高低位相与寄存器)和AD(取中间结果高低位)的辅助。

此次实验为了充分的接触指令系统,采用循环模式。

由于复杂模型机中只有R0、R1、R2、R3四个通用寄存器,故一些原来计划使用的寄存器改为使用主存。

另外,因为低位结果相加可能进位,所以修改原微指令ADD为带进位加法。

四、具体实现:1. 画出算法流程图该流程图使用了以下6个寄存器CX, AD,A,B,RL,RH;其中CX作为计数以及辅助生成AD 的,CX变化为1000 0000 初始值0000 00010000 0010……1000 0000 程序结束0000 0000 初始值0000 0001 CX OR AD -> AD0000 0011……1111 1111另流程图中所用6个寄存器在实现中使用MEM代替,CX,AD,A,B使用R2作RL,R3作RH,左移1位等价右移7位。

八位串 并行乘法器设计

八位串 并行乘法器设计

八位串并行乘法器设计作品功能如下:1、输入方式:通过八位拨码开关输入相乘的八位二进制数,按键1和按键2控制乘法器锁存输入的八位二进制数,通过按键3来启动乘法运算。

2、LCD直接显示之前运算的结果。

3、系统时钟采用实验板上提供的50MHz时钟信号源提供时钟的测频基准时间信号。

4、设计成同步电路模式。

一、设计目的:1)熟悉EDA环境下的复杂逻辑模块的设计方法、设计过程及其注意事项;2)学习EDA软件Quartus-II的使用;3)学习硬件描述语言VHDL/Verilog HDL并进行编程;4)学习串并-行乘法器的基本原理和LCD显示的基本原理、控制流程。

二、设计要求:1、采用硬件描述语言VHDL/Verilog HDL设计八位串并行乘法器模块及LCD显示控制模块,并在Quartus-II环境下编译;2、在Quartus-II环境下编辑仿真激励波形,并模拟;3、在MAX-II实验板下载调试;4、撰写设计报告。

三、设计方案:VerilogHDL设计流程:注:1.总体方案是芯片级的2.软件仿真用来检测程序上的逻辑错误3.硬件仿真要根据需要搭成硬件电路,检查逻辑和时序上的错误设计八位串-并行乘法器分为以下三个模块:锁存(按键控制),乘法器(移位相加),LCD显示模块。

拨码开关控制输入数据,key1和key2键进行输入锁存,key1键锁存数据data1,key2键锁存数据data2,等待执行乘法运算,key3键实现乘法的开始运算,结果锁存到数据overcome。

最后,将data1,data2,overcome结果显示到LCD屏幕上。

四、设计过程:1、锁存器模块设计:(参见文件中的reg_bbit.v)module reg_bbit(clk,rst,dain,en,data_reg);input clk,rst,en;input[8:1]dain;output[8:1]data_reg;reg[8:1]data_reg=0;always@(posedge clk or negedge rst)if(!rst)data_reg=8'b 00000000;else if(!en)data_reg=dain;else data_reg=data_reg;endmodule逻辑关系表:仿真图如下:(参见文件中的reg_bbit.vwf)电路图实现:2、乘法运算模块:(参见文件中的mult_8gate.v)module mult_8gate(clk,rst,en,a,b,overcome);parameter size=8;input clk,rst,en;input[8:1]a,b;output[16:1]overcome;reg[16:1]overcome=0;reg[16:1]overcome1=0;integer i=1;always@(posedge clk or negedge rst)begin if(~rst)begin i=1;overcome1=16'b 0000000000000000;end else begin if(i==1)overcome1=16'b 0000000000000000;if(b[i]&&i=8&&!en)begin overcome1=overcome1+(a(i-1));i=i+1;end if(~b[i]&&!en&&i=8)begin overcome1=overcome1;i=i+1;end if(i=8&&en)begin i=1;end if(i 8&&!en)begin overcome1=overcome1;end if(en)begin i=1;overcome1=overcome1;end end end always@(posedge en) begin overcome=overcome1;i=1;end/*always@(negedge en)begin overcome1=0;for(i=1;i=size;i=i+1)if(b[i])overcome1=overcome1+(a(i-1));else overcome1=overcome1;end always@(posedge en)overcome=overcome1;*/endmodule仿真图如下:(参见文件中的mult_8gate.vwf)3、乘法运算和锁存器综合模块:(参见文件中的mul.v)电路实现图Verilog HDL语言编程:module mul(clk,rst,start,en1,en2,daina,dainb,overcome,a,b);input clk,rst;input en1,en2,start;output[8:1]a,b;wire[8:1]a,b;input[8:1]daina,dainb;output[16:1]overcome;reg_bbit u0(clk,rst,daina,en1,a);reg_bbit u1(clk,rst,dainb,en2,b);mult_8gate u2(clk,rst,start,a,b,overcome);endmodule仿真图如下:(参见文件中的mul.vwf)en1是key1键,en2是key2键,start是key3键。

计算机组成原理实验指导书-8位算术逻辑运算实验

计算机组成原理实验指导书-8位算术逻辑运算实验

从本页开始至最后一页,要求每人必须打印从本页开始至最后一页,要求每人必须打印从本页开始至最后一页,要求每人必须打印从本页开始至最后一页,要求每人必须打印8位算术逻辑运算实验一、实验目的1、掌握算术逻辑运算器单元ALU(74LS181)的工作原理。

2、掌握简单运算器的数据传送通路组成原理。

3、验证算术逻辑运算功能发生器74LSl8l的组合功能。

4、按给定数据,完成实验指导书中的算术/逻辑运算。

二、实验内容1、实验原理实验中所用的运算器数据通路如图1.1所示。

其中运算器由两片74LS181以并/串形成8位字长的ALU构成。

运算器的输出经过一个三态门74LS245 (U33)到ALUO1插座,实验时用8芯排线和内部数据总线BUSD0~D7插座BUSl~6中的任一个相连,内部数据总线通过LZDO~LZD7显示灯显示;运算器的两个数据输入端分别由二个锁存器74LS273(U29、U30)锁存,两个锁存器的输入并联后连至插座ALUBUS,实验时通过8芯排线连至外部数据总线EXD0~D7插座EXJl~EXJ3中的任一个;参与运算的数据来自于8位数据开并KD0~KD7,并经过一三态门74LS245(U51)直接连至外部数据总线EXD0~EXD7,通过数据开关输入的数据由LD0~LD7显示。

图1.1中算术逻辑运算功能发生器74LS18l(U3l、U32)的功能控制信号S3、S2、Sl、S0、CN、M并行相连后连至SJ2插座,实验时通过6芯排线连至6位功能开关插座UJ2,以手动方式用二进制开关S3、S2、S1、S0、CN、M来模拟74LSl8l(U31、U32)的功能控制信号S3、S2、S1、S0、CN、M;其它电平控制信号LDDRl、LDDR2、ALUB’、SWB’以手动方式用二进制开关LDDRl、LDDR2、ALUB、SWB 来模拟,这几个信号有自动和手动两种方式产生,通过跳线器切换,其中ALUB’、SWB’为低电平有效,LDDRl、LDDR2为高电平有效。

8位二进制乘法器设计报告

8位二进制乘法器设计报告

EDA课程设计报告------8位二进制乘法器设计班级:学号:姓名:目录一.八位乘法器的设计要求与设计思路••2.1 设计目的••2.2 设计要求••二.八位乘法器的综合设计••3.1 八位乘法器功能••3.2 八位乘法器设计方案••3.3 八位乘法器各功能模块VHDL描述及仿真图形••3.4 八位乘法器顶层模块VHDL设计及下载验证••心得体会••参考文献••一、八位乘法器的设计要求与设计思路1.1实验目的学习并掌握应用8位二进制乘法器的原理、设计、分析和测试方法1.2实验内容利用移位相加原理设计一个8位二进制乘法器。

1.3实验要求用VHDL编写代码,下载验证,并用8段数码管显示乘数和乘积。

二、八位乘法器的综合设计2.1 八位乘法器功能通过调节实验板,输入8位二进制的A和B,八位乘法器能实现其乘积,并在数码管上面显示出来其结果。

2.2乘法器设计方案该乘法器是有由8 位加法器构成的以时序方式设计的8 位乘法器,采用逐项移位相加的方法来实现相乘。

用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。

直到所有的部分积都被加过一次。

例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下图(a)下面分解8 位乘法器的层次结构,分为以下4 个模块:①右移寄存器模块:这是一个8 位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。

②加法器模块:这是一个8 位加法器,进行操作数的加法运算。

③1 位乘法器模块:完成8 位与1 位的乘法运算。

④锁存器模块:这是一个16 位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。

8位二进制乘法器

8位二进制乘法器

8位二进制乘EDA实验法器学号:********[2013.12.15] 班级:021151姓名:***指导老师:***一.设计要求8位二进制乘法采用移位相加的方法。

即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加,直到所有的部分积都被加过一次。

例如:11010101和10010011相乘,计算过程如下:二.设计方法按照这种算法,可以得到下图所示之框图和简单流程图。

按照这种算法,可以得到下图所示之框图和简单流程图。

图中Y寄存器存放被乘数M,B寄存器存放乘数N,A累加器存放部分积。

A和Y中的数据在加法器中相加后送入A 中,而A和B相级联又构成了一个16bit的移位寄存器,当它工作于移位模式时,可以实现数据的右移。

由于乘数的每一位不是0就是1 ,对应的部分积不是0就是被乘数本身,所以实际作部分积相加这一步时,只要根据乘数的对应位判断:如该位为1 ,则将累加器中的数据加上被乘数再移位;如该位为0时,就不加被乘数而直接移位。

运算时首先将累加器A清零,并将被乘数M和乘数N分别存入寄存器Y和B,然后依据寄存器B中最右一位B0(数据N0)确定第一个部分积。

将此部分积送入A累加器以后,将A连同寄存器B右移一位,部分积的最低位被移进寄存器B的最左位,乘数的最低位N0被移出寄存器B,而乘数的次低位N1被移至寄存器B的B0位。

第二次仍然依据B0位的数据(N1)来确定第二个部分积,将部分积与累加器中的数据相加后右移一位,N1又被移出寄存器,数据N2被移到B0位置。

这样,经过8次部分积相加位的操作,完成1次乘法运算,乘数N恰好被移出寄存器B,寄存器B中保存的就是运算积的低8位数据。

移位相加的次数应用一个计数器来控制,每移位一次,计数器计一个数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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六、所遇问题及解决方法:设计中的主要问题就是上述问题分析时遇到的问题,这些问题的解决花费了很长一段时间。

相关文档
最新文档