实验目的
- 分析和理解指定的需解决问题。
- 利用LC-3的机器代码设计实现相关程序。
- 通过LC-3仿真器调试和运行相关程序并得到正确的结果。
实验内容
利用LC-3的机器代码计算一个16位的字中有多少位是‘1’。
实验步骤与结果
1、代码思路
- 要统计二进制数中1的个数,只需不断左移二进制数,并判断最高位是否位1即可。
- 对于有符号数,最高位为符号位,判断二进制数符号即可判断最高位是否为1。
- 二进制中,左移操作相当于*2,可以用自身与自身相加实现。
将待统计数R1不断左移,判断移位后的正负号,若为负则结果+1,否则进入下一轮循环,当R1为0时终止(最多16次)。流程图如图 1所示。
2、代码实现
- 从x3100取出待操作值,存放至R1;
- R2清零,存储答案;
- 判断R1是否为0,为0则跳出循环;
- 判断R1是否为负数,为负数则R2+1;
- R1左移一位,重复步骤3、4、5;
- 将结果R2存储至x3101。
程序运行结果
手动为x3100赋值0xF641,预期运行结果为8。
可见,程序成功取出x3100的值,并统计出XF641有8位为1,结果存放至x3101。达到实验预期。
实验结论
通过本次实验,我掌握了基本的LC-3机器代码设计的方法。并使用机器代码编写了一个简单程序以完成实验需求,通过调试和运行得到正确结果。