LC-3机器码编程试验

计算机系统 实验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

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值