【计算机系统1 】1 LC-3仿真器安装和使用

目录

碎碎念

目的与要求

内容与方法

步骤与过程

结论或体会


碎碎念

比起同学期跳级的计系2和算法,这课真的爽歪歪,没什么太鸡贼的设计。不过真心学完再搞计系2舒服点。

目的与要求

(1)掌握处理器仿真工具LC-3软件的安装和使用方法。

(2)学会在LC-3仿真环境下编辑程序和转换成可执行目标程序的方法 。

(2)学会在LC-3仿真环境下运行和调试程序的方法 。

内容与方法

利用提供的安装软件包和软件使用说明文档,完成以下试验内容:

(1)安装LC-3仿真器

(2)利用LC3EDIT输入机器代码程序(0/1模式)并创建可执行目标程序。

(3)利用LC3EDIT输入机器代码程序(hex模式)并创建可执行目标程序。

(4)利用LC3EDIT输入汇编代码程序并创建可执行目标程序。

(5)利用仿真器运用对应目标程序。

(6)学习和掌握断点,单步执行等调试方法和手段。

步骤与过程

(2)利用LC3EDIT输入机器代码程序(0/1模式)并创建可执行目标程序。

①打开LC3EDIT编辑器输入代码并保存为后缀.bin的二进制文件(图1)

图表 1 编辑二进制文件并保存

②编译二进制文件(图2)

图表 2 编译二进制文件sample1.bin  example1.bin

(3)利用LC3EDIT输入机器代码程序(hex模式)并创建可执行目标程序。

①新建文件并编写保存编译后缀为.hex的16进制文件(图3)

  

图表 3 新建编写保存编译16进制文件

(4)利用LC3EDIT输入汇编代码程序并创建可执行目标程序。

①汇编代码保存为.asm后缀(图4)

图表 4 汇编代码文件后缀asm

②编译(图5)

      

  

图表 5 编译

(5)利用仿真器运用对应目标程序。

1.sample

①打开LC3 Simulator运行软件,导入刚才编译成功的二进制文件(图6)

图表 6 导入可执行文件

②载入后界面,sample1求和10数(图7)

图表 7  载入后界面

③加载数据(十个数字)到内存,跳转至地址x3100设置对应的值(图8)

图表 8 加载数据

④为了方便将10个寄存器的值设置为0-9 (x0000-x0009),程序结果应该为45 (x002D) (图9)

图表 9 将10个数设置为0-9

⑤跳转至程序起始地址并设置断点,运行程序,寄存器R1存求和结果45,答案正确(图10)

 

图表 10 设置断点,运行程序

2.example1:乘法

①载入程序,设置断点,设值乘数为5和3(图11)

图表 11 example1程序设置

②运行程序结果为20,答案错误(图12) 

图表 12 程序结果有误

(6)学习和掌握断点,单步执行等调试方法和手段。

①将R5重新设为3,重新回到程序其实位置x3200(图13) 

图表 13

②按逐步调试,PC指向下一条指令x3201,IR存第一条指令x54A0,将R2清零。(图14)

图表 14 逐步调试1

③继续逐步调试,运行指令2,R2存5,正确;逐步调试完一个循环没有错误,直接换设置断点(图15)

图表 15 逐步调试指令2

④设置断点调试,在x3203设置断点,运行至x3203观察到R5变为2,R2变为5,状态(CC)为P(图16)

图表 16 断点调试1

⑤3次循环后,发现此时状态(CC)为Z置1,导致循环会多一次,使结果多加5,20(图17)

图表 17 错误处

⑥x3203处的指令有误,应该把BRZP改为BRP,当且仅当P=1时跳转,即第4条指令改为

0000 001 111111101 ;跳转到 location x3201 如果结果为正值(图18)

图表 18 将Z位置0

⑦保存后重新打开运行,答案正确(图19)

图表 19 修改后

3.example2

①运行程序(图20)

图表 20 example2

②结果有误(图21)

图表 21 结果有误

②是字符与数字的 转换问题,修改汇编程序(新添加的行显示为红体):

.ORIG  x3000 
LD     R6, ASCII 
LD     R5, NEGASCII 
TRAP   x23 ;输入 
ADD    R1,R0,x0 ;将第一个整数传给 R0 
ADD    R1,R1,R5 ;将第一个 ASCII 数字转换成数值 
TRAP   x23 ;另一个驶入 
ADD    R0,R0,R5 ;将另一个 ASCII 数字转换成数值 
ADD    R2,R0,R1 ;将这两个整数相加 
ADD    R2,R2,R6 ;将和转换成 ASCII 表示 
LEA    R0,MESG ;载入字符串的地址 
TRAP   x22 ;输出字符串 
ADD    R0,R2,x0 ;结果传给 RO 
TRAP   x21 ;显示结果 
HALT 
ASCII .FILL x30 ;mask:转换成 ASCII 
NEGASCII .FILL xFFD0 ;mask:-x30 
MESG   .STRINGZ "The sum of those two numbers is " 
.END

④运行结果正确(图22)

 图表 22 结果正确

结论或体会

       通过本次实验,我学会了如何利用LC3编译和调试二进制、16进制和汇编代码程序。学会通过逐步调试、断点设置、观察寄存器数据变化的方法调试程序。以及初次接触二进制和汇编代码,初步体验利用二进制代码和汇编代码实现一个小程序的具体过程,也确实能体验到虽然机器语言编写逻辑不如高级语言直接,但其操作会更加直接,没有冗余的步骤,直接深入机器层面进行运算,会更加高效,初步了解计算机内部几种简单运算的机器操作。

猜你喜欢

转载自blog.csdn.net/weixin_51695846/article/details/125355183