计算机系统基础

运算器算术运算
实验目的

掌握ALU的算术运算原理,熟悉ALU数据传送通路和数据传送方式。

实验环境

微机,配置Windows操作系统、LC-3仿真机软件。

实验内容

ALU数据传送通路和数据传送方式;ALU的算术运算功能及其运算原理。

实验过程
一、LC-3中几个重要的寄存器

通用寄存器(GPR):R0~R7共8个,每个均为16bit
IR、PC:IR用来存放本次执行的指令,PC用来存放下一条指令所在的内存地址
条件码:LC-3中有3个位寄存器,为N、Z、P,一旦GPR的数据发生变化,条件码的对应一位就会发生变化:写入正数时,N置1;写入0时,Z置1;写入负数时,P置1。可以根据条件码的变化来控制指令执行的顺序。

二、指令介绍
算术运算操作指令:ADD
0001  001  100  000101        (1305)
ADD   R1   R4      R5        (R4+R5 -->R1)

0001  001  100  100101        (1325)
ADD  R1   R4      5        (R4+5 -->R1)

指令 ADD R1,R4,#5 执行的数据通路 如下图

一条指令是由操作码和操作数组成的。ISA指令集是由一组操作码、数据类型、和寻址模式定义的。寻址模式决定了操作数位于哪个位置。

15 14 13 12   11 10 9    8 7 6   5   4 3 2 1 0
0  0  0  1    0  0  1    0 1 0   0   0 0 1 0 1ADD          R1        R4              R5

bit[11:9]R1为目的寄存器,bit[8:6]R4是源寄存器,通过bit[5]来判断bit[4:0]的含义。
如果bit[5]为0,则bit[2:0]为是另一个源寄存器;
如果bit[5]为1,则bit[4:0]为指令携带的立即操作数,16位扩展后与源寄存器相加。
上面的例子就是操作码为ADD,寻址模式是寄存器模式的指令。该指令的操作是让计算机做二进制补码整数加法,计算机寻找的操作数的位置是位于通用寄存器中的。

三、具体实验测试

通过前面一些铺垫,对算术运算指令ADD有了一定的了解,接下来就举一些例子进行测试并具体分析。
(1) bit[5]来判断bit[4:0]

0001  010  001  000011           (x1443)
ADD   R2   R1       R3            (R2 = R1 + R3)
Set value R1=3,R3=2,则R2会被赋值为 5
bit[5]位是0,则011表示另一个源寄存器R3,也就是 R1+R3—>R2

测试截图
如果bit[5]是1,第二个源操作数就被包含在指令当中,第二个源操作数是在执行ADD操作之前,将bit[4:0]位执行符号扩展到16位得到的。

0001  010  001  100011           (x1463)
ADD   R2   R1        3           (R2 = R1 + 3)
Set value R1=3,R3=2,则R2会被赋值为 6

测试截图

ADD指令的立即操作数必须位于指令的bit[4:0]位中,也就说不是所有的二进制补码整数都可以是立即数。

(2)运算

0001  001  010  000011        (1283)
ADD  R1   R2      R3        (R1 = R2 + R3)
令  R2 = x8000, R3 = x8000
则R1 = 1 0000

测试截图如下,我们可以看到R1=0000,而并不是 10000,因为只能保留了四位,所以将最高位丢掉了。

0101  001  010  000011        (5283)
AND  R1   R2      R3        (R1 = R2 & R3)
令  R2 = x8000, R3 = x8000
则 R1 = 8000

测试截图如下,我们可以看到R1的确等于8000,即8000&8000的结果
以上两个指令,我再重新赋值给R2,R3
Set value R2 = xFFFF, R3 = x8000
ADD预测 R1 = 1 7FFF
ADD测试截图如下,R1 = x7FFF,运算溢出,只能保留四位,则丢了掉了最高位的1

AND测试截图如下,R1 = x8000



通过上面两组数据,可以看出ADD数据运算溢出是只保留4位,其余位都丢掉。

(3)实现减法 x-y

将y取反加1,得到其补码,再与x相加即为x+(-y)
x is in R0, y is in R1Set value R0 = 4 = x,R1 = 1 = y
1)求反码
1001  001  001 111111          (927F)
NOT    R1   R1                ( NOT(y)-->R1 )
2)得补码
0001  010  001  100001         (1461)
ADD   R2   R1       1        ( (-y)-->R2 )
3)做减法
0001  010  000  000010          (1402)
ADD    R2   R0      R2         ( x+(-y)-->R2 )

(4)求10个数的和
假设知道x3100到x3109这10个地址中储存的是整数,然后计算这10个整数的和。
第一步,我们先将10个数值存储到x3100到x3109这10个地址当中;
第二步,初始化变量,有三个变量:当前的和(R1初始化为0),没有被做加法的整数的个数(R4初始化为10),以及下一个被加整数的地址(R2初始化为第一个整数的地址,即x3100)。
然后加法开始执行。
这个程序重复一下过程:加载10个数中的一个到R3,加到R1中。每执行一次加法,就递增R2, R2指向下一个要被加的数据的地址,并且递减R4, 就知道还有多少数据等待被加。当R4等于0时,条件码Z被置为1,停止循环,即可得到计算结果R1。
流程图如下

指令分析如下
Set value x3100~x3109
x3000   0101  001  001  100000       (5260)AND  R1   R1       0          (R1&0  R1清零,存储和)
程序开始于PC=x3000的位置,第一条指令是清空R1,R1是保存累加的结果;
x3001   0101  100  100  100000       (5920)AND  R4   R4       0         (R4&0  R4清零,  R4作为计数器)
x3002   0001  100  100  101010       (192A)ADD  R4   R4      10        (R4 = R4+10  赋值数的个数为10)
第二、三条指令是将R4清零,并将10赋值给R4,R4记录的是有多少数据要被加,这个数字将会在做完每一步加法后被减1(由x3007实现);
x3003   1110  010  011111100         (E4FC)LEA   R2      x0FC           (R2-->PC+x0FC  x3100)
第四条指令,将R2加载为地址x3100(被增加了1的PC是x3004, 符号扩展的PC偏移量是x00FC);
x3004   0110  011  010  000000       (6680)LDR  R3   R2       0         (R2+0-->R3 )   loop
第五条指令,将R2中加载的x3100的内容赋值给R3;
x3005   0001  010  010  100001       (14A1)ADD  R2   R2       1         (R2 = R2+1  指向下一位数据)
第六条指令,将R2加1,R2指向了下一个被加数的地址;
x3006   0001  001  001  000011       (1243)ADD  R1   R1      R3         (R1 =  R1+ R3)
第七条指令,将取到的数据R3赋值累加到R1中;
x3007   0001  100  100  111111        (193F)ADD  R4   R4      -1          (R4 = R4 - 1,计数器减一)
x3008   0000  001  111111011          (03FB)BR    P                      (BRP  loop  x3004)
x3009   1111  000000100101            (F025)TRAP   HALT                   (TRAP   halt)
小结

ALU
算术逻辑单元 (arithmetic and logic unit)
组成:
1)内部组成: 加法器AU、逻辑运算器、移位器、求补器
2)外部组成: 两个输入缓冲器A和B、输出缓冲器SUM、进位标志CF、溢出标志OF、符号标志SF、零标志ZF

串行加法器:
我们手算加法的时候,总是先个位相加,选出结果和进位,再十位相加并加上进位,再算出结果和进位… 这就是一个链式的过程,每一位(除第一位外)其结果的得出都依赖于前一位的进位,并且该位运算完的进位需要提供给下一位才能得出下一位结果和进位,下一位的进位再…

基本逻辑单元:全加器FA


两个本位加数 Ai和Bi;
低位进位Ci-1;
本位和Si
向高位的进位 Ci
Si = Ai XOR Bi XOR Ci-1
Ci = Ai·Bi + (Ai+Bi)·Ci-1(逻辑加OR 与 逻辑乘AND)
记Gi=Ai·Bi称为本位进位
记Pi=Ai+Bi称为传递条件,Pi·Ci-1称为传递进位
可见:Ci = Gi + Pi·Ci-1
多个FA串接起来,就组成了串行加法器。
当然除了这些还有并行加法器等。

计算机系统基础实验01运算器算术运算相关推荐

  1. 计算机系统基础实验报告

    计算机系统基础实验报告 语言 C++ 编译器 Dev C++ 实验一:数的机器级表示 编写无符号数的转换: unsigned int unsignedToValue(char binary[],int ...

  2. 计算机系统基础实验-LinkLab实验

    这是大三时的实验课,很久以前的东西,应要求放出来,做的不是很好.linux永远都是很重要的,希望我和大家都记得这个.实际上做到第五阶段我就不会了. 实验课程名称:计算机系统基础 实验项目名称:Link ...

  3. 华中科技大学计算机系统基础实验3报告,华中科技大学计算机系统基础实验报告...

    华中科技大学计算机系统基础实验报告 1 课 程 实 验 报 告 课程名称: 计算机系统基础 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 2016年 5月 24 日 计算机科学与技术学院2 ...

  4. 华中科技大学计算机系统基础实验3报告,华中科技大学计算机系统基础实验报告.doc...

    文档介绍: 课程实验报告课程名称:计算机系统基础专业班级:学号:姓名:指导教师:报告日期:2016年5月24日计算机科学与技术学院目录实验1: 2实验2: 9实验3: 22实验总结 30 实验1:数据 ...

  5. 北京邮电大学计算机系统基础实验,第1章 计算机系统基础85666.ppt

    第1章 计算机系统基础85666 盘青梅 gdpqm@126.com 总结:计算机的发展阶段 冯·诺依曼计算机模型(P14) 总线系统结构图 总线(Bus)是计算机各部件传输信息的公共通道.有数据总线 ...

  6. 计算机系统基础实验:认识logisim软件、门电路逻辑功能测试(仿真)

    通过logisim对逻辑电路进行分析 文章目录 目录 文章目录 前言 一.使用工具 二.实验过程 1.门电路绘制 2.真值表 总结 前言 计算机系统基础也开了实验课,实验内容是利用logisim软件进 ...

  7. Wireshark抓包和ipconfig命令(ip网络基础实验01)

    文章目录 一.实验名称 二.实验目的 三.实验原理 四.实验要求 五.实验步骤 六.实验结果 七.课后思考题 一.实验名称 网络基础实验 二.实验目的 1.通过本实验,掌握双绞线制作的基本原理和方法以 ...

  8. 计算机系统基础实验 - 同符号浮点数加法运算/无符号定点数乘法运算的机器级表示

    实验3 同符号浮点数加法运算/无符号定点数乘法运算的机器级表示 实验序号:3 实验名称:同符号浮点数加法运算/无符号定点数乘法运算的机器级表示 适用专业:软件工程 学 时 数:2学时 一.实验目的 1 ...

  9. 计算机系统基础实验1---基本工具的使用

    实验准备 安装debian,并完成相关配置 1)更换apt源 2)配置SSH 在virtualBox网络选项卡中设置端口转发,名称SSH,主机端口22,子系统端口22 3)安装aptitude并用其代 ...

最新文章

  1. 单片机c语言慧尾灯编码,(参考)基于单片机的智能尾灯开发文档.doc
  2. codeforces1452 E. Two Editorials
  3. apache camel_发掘Apache Camel的力量
  4. 文本分析工具 数据科学_数据科学工具
  5. ibm mq qname java_IBMMQ 从队列获取消息并将消息发送到特定主题上面
  6. python装饰器两层和三层_2020 python学习第十六天————三层装饰器与迭代器
  7. 批量执行newman
  8. 教学管理系统数据库设计Mysql_教务管理系统数据库设计方案.docx
  9. 【视觉SLAM14讲】【汇总】
  10. 一些压制视频参数记录
  11. (个人笔记)英语语法之动词时态
  12. [转载]论张三丰与道教太极拳的发展演变——陈理圣
  13. ERP软件高效排产计划:如何解决企业排产难题
  14. 8.系统研发中的领导意志
  15. 对销售代表的100个忠告
  16. [转]PROE传动链条的装配教程
  17. Vultr centost7一键安装BBR工具教程
  18. 泛函分析--from BBS 水木清华站
  19. FFMPEG 压缩视频文件
  20. python制作物联网控制软件下载_基于Python和Django框架的物联网智能设备管理系统的设计与实现...

热门文章

  1. Xstart远程连接Linux图形用户界面
  2. 5.7黄金价格行情走势预测、原油价格走势及非农现价喊单
  3. 《Python数据分析与挖掘实战》第8章——Apriori关联规则
  4. 树莓派重启DHCP报错Warning: The unit file, source configuration file or drop-ins of docker.service changed
  5. HCNP——Hello报文
  6. Jquery 上传文件(不通过form表单提交)
  7. iText7高级教程之构建基础块——1.引入字体实践
  8. 素人做课会踩的3大坑,你中了几个?
  9. Visio 2016 MSI 与 Office 2016 Click-to-Run 冲突导致无法安装的解决方法
  10. VB面向对象的三要素理解。