计算机系统 实验2
实验目的:
1.分析和理解试验指定的需解决问题。
2.利用LC-3的机器代码设计实现相关程序。
3.通过LC-3仿真器调试和运行相关程序并得到正确的结果。
实验内容与实验要求:
利用LC-3的机器代码计算一个16位的字中有多少位是’1’
程序从x3000开始
需计算的字存储在x4000(内存编辑提前写入)
计算的结果存储在x4001
要求对以下四个数据测试并得到正确结果:
X0000 0
XFFFF 16
X1234 5
X0FF0 8
实验步骤:
1.在内存x4000提前存入一个16位的字
用数据文件.hex代码存入:
到LC3Edit.程序,输入下面16进制代码:
4000 ;数据在内存地址X4000处开始
0000 ;从此处开始,添加数字
到LC3Edit.程序,输入下面16进制代码:
4000 ;数据在内存地址X4000处开始
FFFF ;从此处开始,添加数字
到LC3Edit.程序,输入下面16进制代码:
4000 ;数据在内存地址X4000处开始
1234 ;从此处开始,添加数字
到LC3Edit.程序,输入下面16进制代码:
4000 ;数据在内存地址X4000处开始
0FF0 ;从此处开始,添加数字
2.在内存x3100提前存入数x4000
用数据文件.hex代码存入:
到LC3Edit.程序,输入下面16进制代码:
3100 ;数据在内存地址X3100处开始
4000 ;从此处开始,添加数字
3.编写代码并运行:
0011 0000 0000 0000 ;程序的起始位置在x3000
0101 001 001 1 00000 ;清R1
0001 001 001 1 00001 ;R1+1,用来当“与”项
0101 010 010 1 00000 ;清R2
0010 010 011111100 ;R2存储为地址x4000,为pc(x3004)+252
0101 011 011 1 00000 ;清R3
0110 011 010 000000 ;R3存储为x4000中一个16位的字
0101 101 101 1 00000 ;清R5,用来记录1的个数
0101 100 100 1 00000 ;清R4
0101 100 011 000 001 ;R4来存储R3和R1相“与”的结果
0000 010 000000001 ;条件跳转,如果R4不是非0,PC+2
0001 101 101 1 00001 ;如果R4为非0,R5+1
0001 001 001 000 001 ;R1=R1+R1
0000 101 111111011 ;如R1非0,PC-5
0111 101 010 000001 ;将R5中的数存到x4001中
1111 0000 00100101 ;停止
实验思路:
程序的起始位置在x3000
1. 清R1,R1+1(将R1初始化为x0001)
2. 用R1来当“与”项
3. 清R2,用R2存储为地址x4000,为pc(x3004)+252 (以方便后续R3对x4000中数据的读取和R5将计算结果写到x4001)
4. 清R3,用R3存储为x4000中一个16位的字
5. 清R5,用来记录1的个数
6. 清R4
7. 用R4来存储R3和R1相“与”的结果
8. 条件跳转,如果R4不是非0,PC+2(用R4作为计算的结果,进行条件码的判断,来确定是否当前判断的bit上是否为1,是就可以执行9,不是就跳过9,执行10)
9. R5+1
10.R1=R1+R1(使R1=R1*2,保持二进制数上从小到大只有一个bit为1,以方便对“一个16位的字”进行每个bit的逐一判断)
11.条件跳转,如R1非0,PC-5(只要R1还没有溢出就让其循环,返回7)
12.将R5中的数存到x4001中
13.停止
实验结论:
本次实验的计算的结果存储在x4001:
X0000的运行结果为R5=0 , x4001为x0000
X1234的运行结果为R5=16 ,x4001为x0010
X1234的运行结果为R5=5 ,x4001为x0005
X0FF0的运行结果为R5=8 ,x4001为x0008