深圳大学-计算机系统(1)实验-LC-3机器码编程试验

实验目的与要求

· 分析和理解试验指定的需解决问题。
· 利用LC-3的机器代码设计实现相关程序。
· 通过LC-3仿真器调试和运行相关程序并得到正确的结果。

实验内容

利用LC-3的机器代码计算一个16位的字中有多少位是’1’,程序从x3000开始,需计算的字存储在x3100,计算的结果存储在x3101

实验步骤与过程

  1. 思路: 要计算16位的字中有多少个是1其实很简单,让它分别与1,10,100.···相与,若与值为1,则表示该数的对应位上有1,然后答案加1即可。
  2. 代码总体思路如下:
    (1)从 x3100 加载数据到寄存器 R1。
    (2)清零寄存器 R2、R3 和 R4,R3置为1,将R4设置为15。
    (3)使用 AND 指令将 R1 和 R3 的值进行逻辑与操作,并将结果存储在 R5 中。
    (4)检查 R5,如果结果为零(BRz),则R4 减1。
    (5)如果没有跳转,则 R2 加1,R4 减1。
    (6)检查 R4 的结果,如果为负(BRn),即遍历结束,将 R2 的值存储到 x3101 地址。
    (7)如果没有跳转,则 R3 值翻倍,然后清零寄存器 R5,不影响下一次循环。
    (8)最后执行 TRAP 指令。
  3. 在lc-3Editor中输入如以下代码并编译:
    在这里插入图片描述
  4. 该代码对应的汇编语言是:
    在这里插入图片描述
  5. 在lc-3Simulator中运行.obj文件,如图:
    在这里插入图片描述
  6. 设置地址x3100的数据,此处以88为例子,它对应二进制0000 0000 0101 1000
    在这里插入图片描述
  7. 运行程序,结果如下:
    在这里插入图片描述
    R2寄存器中的数据更新为3, 与88的二进制表示中0000 0000 0101 1000有三个1匹配,在地址x3101中存放着3,答案正确。
    在这里插入图片描述

实验结论或体会

(1) 二进制数的左移可通过自身与自身相加,然后将结果存储在自身来实现。
(2) 对一个新的寄存器进行ADD操作前需将其清空,可通过与上0实现。
(3) 通过分析和理解实验内容,学会了通过设计机器代码解决相应的问题。
(4) 熟悉了对lc3Editor和lc3Simulator的使用,加深了对lc3指令的理解。

实验代码

0011000000000000
0010001011111111
0101010010100000
0101011011100000
0001011011100001
0101100100100000
0001100100101111
0101101011000001
0000010000000001
0001010010100001
0001100100111111
0000100000000011
0001011011000011
0101101101100000
0000111111111000
0011010011110010
1111000000100101
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值