LC3环境下的汇编语言程序调试攻略

LC3是一款较为成熟的16位汇编程序运行调试软件,2003年时由美国得克萨斯州立大学的 Yale N. Patt 和伊利诺伊大学香槟分校的 Sanjay J. Patel 两位计算机科学教授开发完成,旨在创造一个便捷的汇编语言开发、编译以及调试环境。LC3本身是一个参考了计算机的冯诺依曼架构的模拟16位指令执行器,但是通过它写的汇编程序略经修改也能用于其它计算平台,它还能研究C语言的编译优化等问题,非常适合汇编初学者或者从事汇编工作者使用。 关于LC3的更多详细资料请参考:https://en.wikipedia.org/wiki/LC-3

本软件也可以从以下链接获取:https://pan.baidu.com/s/1jJ9dyB0http://highered.mheducation.com/sites/0072467509/student_view0/lc-3_simulator.html (LC3官网)

该软件由一个编辑器(LC3Edit.exe)和一个模拟器(Simulate.exe)组成。由于该软件为绿色软件,因此Windows平台下载后即可直接使用。Unix版本请自行上官网下载安装。

LC3汇编程序编辑器的使用

首先,打开LC3Edit.exe编写汇编程序,输入如下代码:

.ORIG x3000
ADD R1 R0 R1
LDR R2 R3 0
.END

此处,.ORIG x3000表示程序的第一行从内存地址x3000处开始执行。 ADD句表示将存储器(Register)R0和R1中数值的求和结果保存在R1当中(仅限于对于16位有符号数字的加法运算) LDR句意思略复杂,它表示从 以R3存储器存储的值作为地址a,将地址a + 0处存储的值加载到R2存储器中。此处R3后面的0表示地址位移数(offset),取值范围-32至31。 .END表示程序结束。

然后,点击程序界面右边的按钮“asm”,LC3就会在保存程序后将该汇编程序翻译成二进制和十六进制的机器语言,并生成.obj文件,以供模拟器运行调试使用。

输入图片说明

打开编译程序所在的文件目录,可以看到此处二进制机器码、十六进制机器码等都已经自动根据16位架构标准翻译完成。

输入图片说明

点击工具栏从左至右第二个黄色打开按钮,选择HelloAsembly.bin,即可查看该汇编程序对应的二进制机器码,效果如下:

输入图片说明

扫描二维码关注公众号,回复: 75091 查看本文章

备注:如果用户有二进制或十六进制的机器码,也可以直接点击“->B”或者“->X”按钮生成模拟器可用的obj文件。

用LC3调试汇编程序

打开Simulate.exe,点击最左边的黄色按钮,并将弹出的文件对话框路径切换到刚才程序所在目录,并选中需要调试的.obj文件。

输入图片说明

打开之后,刚才的汇编程序会被加载到LC3指令执行器,效果如图。

输入图片说明

点击界面上方R0和R1,输入两个待求和数(范围 -2 ^ 16到2^15 + 1),本例分别为2和3。

输入图片说明

之后,在程序结束的x3002这个内存位置左边点一下,从而表示程序调试终止点。然后,点击R3,输入任意一个想存储数据的内存地址(本例使用x3010,注意不得使用程序本身所在内存位置,此处为x3000 - x3002的位置)。并点击该地址,输入任意一个short变量范围内的数字(本例为20)。全部完成后,效果如图:

输入图片说明 输入图片说明

由于此程序有两条汇编指令,因此点击从左到右第三个按钮(即step over按钮,逐句调试)两次。可以看到效果如下:

输入图片说明

可以发现存储器R1已经正确存储了2 + 3的结果,而R2也正确加载了R3中的地址加位移为0处的数据,调试环境也正确提示了程序结束。因此本程序调试成功。

这样,我们就迈出了学习汇编的第一步了。

参考资料:

Patt, Yale N.; Patel, Sanjay (2003). Introduction to Computing Systems: From Bits and Gates to C and Beyond. New York, NY: McGraw-Hill Higher Education. ISBN 0-07-246750-9. Retrieved 6 October 2010.

猜你喜欢

转载自my.oschina.net/Samyan/blog/1614174