目录
一:在c语言中调用汇编语言
代码写入
调试
二:修改参考代码功能
代码写入
调试
一:在c语言中调用汇编语言
代码写入
创建新工程:
建立新工程后,添加一项新项目(New item)。点击第一项C File(.c),因为是写main函数(main.c)。
勾选如下:
在新创建的main.c函数中写入如下程序:
再添加一项新项目,不过这次选择Asm File(.s)项,因为写Func.s函数,写入汇编语言
在Func.s函数中写入如下汇编语言:
AREA My_Function,CODE,READONLY EXPORT Init_1 Init_1 MOV R1,#0 ;设R1寄存器是i MOV R2,#0 ;设R2寄存器是j LOOP ;写在最左边的是程序名的段名,执行跳转程序时要用到 CMP R1,#10 ;比较R1和10的大小 BHS LOOP_END ;如果R1大于或等于10.则跳转到LOOP_END程序段 ADD R2,#1 ;j++ ADD R1,#1 ;i++ B LOOP ;执行一次循环后,无条件再次进入循环判断,即是跳转到LOOP段 LOOP_END NOP END
汇编程序如上,观测程序,程序结束时R1和R2的值应是十进制的10。
然后点击左上角构建,正常情况下应如下图所示
然后点击魔法棒,为了之后的调试再修改几项设置。
将“Create HEX File”一项打勾:
将“Use Simulator”一项打勾,并且修改Diglog DLL和Parameter如下图所示:
调试
然后点击调试按钮,进入调试页面:
观测左侧寄存器,R1和R2的初始状态都是0;
然后点击单步运行,一边点击一边观察。
发现,R1和R2的最终值固定在十六进制的A,相当于十进制的10。与预先估计值相同。
二:修改参考代码功能
现在加一点难度,修改参考代码,要求将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100。 请编程实现,并仿真跟踪调试;
代码写入修改汇编语言,将之前的循环删除,只写将整型数加100的语句:
汇编程序Func.s代码如下:
修改main.c函数,因为和刚才比增加了调用函数操作,所以将调用函数的参数加上。并且加上输出返回值的语句。
c语言函数main.c如下:
从程序中可以看到,在主函数中的实参为10,即调用的函数的初始值为10,然后经过Func.s函数的处理,处理值应该是110。则在调试中,R0寄存器的初始值应是十六进制的A,终值应是十六进制的6E。
编译构建如下:
调试
进入调试页面:
单击单步调试,在单击一次后可以看到,R0的初始值变成了A。
单击第二次后,可以看到,R0的终值变成了6E。
符合预期估计。



