实验目的:
熟悉和理解LC-3的机器指令格式。
进一步掌握在LC-3仿真平台下机器代码的设计输入和调试过程。
掌握利用机器语言解决问题的思路,加深对底层硬件的理解。
实验内容:
利用LC-3的机器代码计算一个16位的字中有多少位是’1’程序从x3000开始,需计算的字存储在x4000,计算的结果存储在x4001
实验要求:
分析和理解试验指定的需解决问题。
利用LC-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+2 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仿真环境下如果编写自己想要的程序,并实现程序运行的方法。
在实验中也遇到了一些困难,如最开始将地址错误的放入程序中,以至于地址被当成指令执行,经过对程序指令顺序的调整,成功解决了这一问题,最终程序顺利得以实现。