计算机系统实验二 LC-3机器码编程试验

Posted 上山打老虎D

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机系统实验二 LC-3机器码编程试验相关的知识,希望对你有一定的参考价值。

实验目的:

  1. 熟悉和理解LC-3的机器指令格式。
  2. 进一步掌握在LC-3仿真平台下机器代码的设计输入和调试过程。
  3. 掌握利用机器语言解决问题的思路,加深对底层硬件的理解。

实验内容:

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

实验要求:

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

实验步骤

1. 编写代码
由于要实现检测多少位有1,因此不难想到,可以利用检测正负的方法,检测最高位的数字是否为1,再讲左移一位,并继续检查,直至数值大小为零时,即检测结束。因此在LC3Edit中输入以下代码:

0011000000000000; 从0X3000开始
1010 001 000001001; LDI,R1,PC+9
0101 010 010 1 00000; AND R2 R2 #0
0001 001 001 1 00000; ADD R1 R1 #0
0000 010 000000100; BRz PC+4
0000 001 000000001; BRp PC+1
0001 010 010 1 00001;  ADD R2 R2 #1
0001 001 001 0 00 001; ADD R1 R1 R1
0000 111 111111010; 无条件跳回前5步
1011 010 000000010; STI R1,PC+0
1111000000100101; halt
0100000000000000; 0X4000
0100000000000001; 0X4001

程序运行思路如下:
即将要检测的数字从地址0X4000中放入R1中,用R2存放1的个数。
①将R2清零。
②判断R1正负,如果是正的R2就加一
③将R1左移一位
④判断如果R1等于零就结束程序,并将R2的值存入0X4000;若不为0则返回②


2. 运行代码
打开simulator,并运行

并使用Set Value给0X4000赋值,这里以56A1展示,并点击运行后得到如下结果:

即56A1中共有7个’1’答案正确。
程序顺利实现

实验结论:

通过本次实验对LC3代码的编写我掌握了处理器仿真工具LC-3软件的编码和使用方法,学会了在LC-3仿真环境下如果编写自己想要的程序,并实现程序运行的方法。
在实验中也遇到了一些困难,如最开始将地址错误的放入程序中,以至于地址被当成指令执行,经过对程序指令顺序的调整,成功解决了这一问题,最终程序顺利得以实现。

以上是关于计算机系统实验二 LC-3机器码编程试验的主要内容,如果未能解决你的问题,请参考以下文章

计算机系统实验三 汇编语言试验

计算机系统实验四 LC-3简单游戏设计

汇编试验二:用机器指令和汇编指令编程

ICS计算系统概论实验—Lab2-LC3实现斐波那契数列(变型式)

第十周作业

20199319 缓冲区溢出漏洞试验