计算机系统基础实验02运算器逻辑运算

计算机系统基础
运算器逻辑运算
实验目的

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

实验环境

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

实验内容

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

实验过程

运算指令对数据进行处理。常见的例子包括算术运算(加、减、乘、除)和逻辑运算(与、或、非、异或)。
LC-3有三个运算指令:加ADD、与AND、非NOT
这次实验主要是研究 逻辑运算(NOT、AND)

(一)指令介绍(逻辑运算指令)

NOT指令(1001)是唯一一个进行一元运算的指令,这个指令要求有一个源操作数。这个指令对一个16位的源操作数按位取反后把结果存入一个目标中。NOT对源操作数和目标操作数都采用寄存器寻址模式。[8:6]位对应的是源寄存器。[11:9]位对应的是目标寄存器,[5:0]位必须全部包含1。
例子:

R1存储的为0001010100001111(x150F   5391 )
15 14  13  12   11  10  9    8  7  6    5  4  3  2  1  0     
1  0   0   1     0   1  0    0  0  1    1  1  1  1  1  1     (947F)
    NOT             R2         R1 

预测  :R2中将会包含 1110101011110000  (xEAF0   -5392)  
测试截图 : 与预测值相符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述上图显示了用来执行NOT指令的数据通路的关键部分。NOT是一元运算,对于ALU,只有A输入是相关的。源操作数来自于R1,指挥ALU的控制信号是执行按位取反运算,ALU的输出被存储于R2中。

AND指令(0101) 执行一个二元运算,它需要两个16位的源操作数。AND指令对它的两个16位源操作数执行一次按位与运算,AND对其中一个源操作数和目标操作数采用寄存器寻址模式。bit[8:6]对应源寄存器,bit[11:9]对应目标寄存器。AND的第二个源操作数可以通过寄存器寻址模式或立即数模式得到,由bit[5]决定使用哪种方式。如果bit[5]为0,那么第二个操作数使用一个寄存器,bit[2:0]位对应着这个寄存器。bit[4:3]全部为0。如果bit[5]为1,第二个源操作数就被包含在指令当中,第二个源操作数是在执行AND操作之前,将bit[4:0]位执行符号扩展到16位得到的。

例子:

15 14 13 12   11  10  9    8  7  6    5  4  3  2  1  0  
0  1  0  1    0   1  0    0  1  0    1  0  0  0  0  0     (x54A0)
     AND         R2          R2                     0  
Set value R2 =8    
指令执行  :R2 = R2 & 0
预测:R2被清零

测试截图: 与预测值相符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(二)具体实验测试
(1)NOT指令

a)按位取反

Set value  R3 = 0010 0101 1100 0011   (x25C3  9667 ) 
指令:  1001  011  011  111111       (x96FF)
		NOT   R3   R3        
预测结果 : R3 = 1101 1010 0011 1100   (xDA3C  -9668)
测试截图 :与预测值相符

在这里插入图片描述在这里插入图片描述
b)求相反数 (~a+1)

Set value  R1 = 0000 0110 1000 0101    (x0685  )
指令: 1001  001  001  111111        (x927F)
       NOT  R1   R1          		 (R1 = ~R1)
       0001  001  001  100001        (x1261)
       ADD   R1   R1       1		  (R1 = R1+1)
预测结果: R1 = 1111 1001 0111 1011     (xF97B  -1669)
测试截图: 与预测值相符

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

(2)AND指令

a) 清0操作

Set value  R5 = 0001 1010 0000 0011     (x1A03   )
指令 : 0101  101  101  100000       (x5B60)
        AND  R5   R5       0       (R5 = R5 & 0)
预测: R5 = 0000 0000 0000 0000    R5清零
测试截图:与预测值相符

在这里插入图片描述在这里插入图片描述b)保留位

Set value  R1 = 0101 0101 1001 1001  (x5599  21913), 把R1的高八位清零,保留低八位
Set value   R2 = 0000 0000 1111 1111  (x00FF  255)
将R1和R2相与,则可以保留R1的低八位
指令:  0101  001  001  000010     (x5242)
        AND  R1   R1      R2     (R1 = R1 & R2)
预测 : R1 = 0000 0000 1001 1001  (x0099   153)
测试截图:与预测值相符

在这里插入图片描述
在这里插入图片描述
c)取余运算

Set value  R0 = 0000 0000 0000 1001   (x0009    9)
想要实现  R0 对4求余数, R0&3
指令 : 0101  001  000  100100    (x5223)
        AND  R1   R0       3
预测 : R1 = R0&3 = 1  
测试截图:与预测值相符

在这里插入图片描述
在这里插入图片描述

Set value  R3 = 0000 0000 0000 1010  (x000C  12)
想要实现 R3 对 8取余数, R3&7
指令  : 0101  010  011  100111    (x54E7)
  		 AND  R2   R3       7    (R2 = R3 & 7)
预测 : R2 = R3&7 = 4
测试截图 :与预测值相符

在这里插入图片描述在这里插入图片描述这个取余运算的方法只能计算2的次幂的余数,而且参加按位与的只能是2^n-1,因为这些数的二进制形式全是1。

小结

实验结论:
· 逻辑运算指令LC3只有:NOT 和 AND
· 算术运算指令LC3只有:ADD
· NOT指令是唯一一个进行一元运算的指令,从上述实验中可以看出这个指令对源操作数和目标操作数都采用的是寄存器寻址模式;NOT指令的数据通路部分,对于ALU,只有A输入是相关的。
· ADD和AND指令都执行一个二元运算:它们需要两个16位的源操作数。ADD指令对两个源操作数执行一个二进制补码的加法运算。AND对两个16位源操作数执行一次按位与运算。ADD和AND对其中一个源操作数和目标操作数采用寄存器寻址模式。
· ADD和AND的第二个源操作数可以通过寄存器寻址模式或立即数模式得到,由bit[5]决定使用哪种方式。

· NOT指令 逻辑非 :也就是取反
1变0,0变1 由“非门”电路实现
(我用NOT指令做了取反和取相反数,实验结果与预测结果相同。LC3没有减法指令,但是可以通过NOT和ADD实现减法:NOT取反,再ADD加1得到该数的负数,再于被减数ADD就可实现简单的减法运算)
AND指令 逻辑乘 : 就是“与”
1·1 = 1,1·0 = 0·1 = 0·0 = 0,由“与门” 电路实现
(我用AND指令做了简单的清零、保留位和取余运算,实验结果与预测结果相同。上一次实验一还做了ADD和AND数据相加、相与溢出时的不同结果,只保留四位,高位舍去。按位与运算我目前了解最多的就是用来清零和用来保留某些位,就用LC3实现了一下,以及取余运算,但这个取余运算的方法只能计算2的次幂的余数,而且参加按位与的只能是2^n-1,因为这些数的二进制形式全是1。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值