首页 百科知识 汇编与语言相互调用实例

汇编与语言相互调用实例

时间:2022-10-27 百科知识 版权反馈
【摘要】:(2)软件:μVision IDE for ARM集成开发环境,Windows 98/2000/NT/XP.程序只要遵守ATPCS相应规则,就可以使用不同的源代码编写程序.程序间的相互调用最主要的是解决参数传递问题.应用程序之间使用中间寄存器及数据栈来传递参数,其中,第一个到第四个参数使用R0~R3,多于四个参数的使用数据栈进行传递.这样,接收参数的应用程序必须知道参数的个数.但是,在应用程序被调

5.5 汇编与C语言相互调用实例

5.5.1 实验目的

(1)阅读S3C2410启动代码,观察处理器的启动过程.

(2)学会使用MDK集成开发环境辅助窗口来分析和判断调试的过程和结果.

(3)学会在MDK集成开发环境中编写、编译与调试汇编和C语言相互调用的程序.

5.5.2 实验设备

(1)硬件:PC.

(2)软件:μVision IDE for ARM集成开发环境,Windows 98/2000/NT/XP.

5.5.3 实验内容

使用汇编完成一个随机数产生函数,通过C语言调用该函数,产生一系列随机数,存放到数组里面.

5.5.4 实验原理

ARM过程调用ATPCS(ARM).

ATPCS是一系列用于规定应用程序之间相互调用的基本规则,这些规则包括:

支持数据栈限制检查;

支持只读段位置无关(ROPI);

支持可读/写段位置无关(RWPI);

支持ARM程序和Thumb程序的混合使用;

处理浮点运算.

使用以上规定的ATPCS规则时,应用程序必须遵守如下:

程序编写遵守ATPCS;

变量传递以中间寄存器和数据栈完成;

汇编器使用-apcs开关选项.

关于其他ATPCS规则,用户可以参考ARM处理器相关书籍或登录ARM公司网站.

程序只要遵守ATPCS相应规则,就可以使用不同的源代码编写程序.程序间的相互调用最主要的是解决参数传递问题.应用程序之间使用中间寄存器及数据栈来传递参数,其中,第一个到第四个参数使用R0~R3,多于四个参数的使用数据栈进行传递.这样,接收参数的应用程序必须知道参数的个数.

但是,在应用程序被调用时,一般无从知道所传递参数的个数.不同语言编写的应用程序在调用时可以自定义参数传递的约定,使用具有一定意义的形式来传递,可以很好地解决参数个数的问题.常用的方法是把第一个或最后一个参数作为参数个数(包括个数本身)传递给应用程序.

ATPCS中寄存器的对应关系如表5-2所列:

表5-2 ATPCS规则中寄存器列表

img193

续表

img194

5.5.5 实验操作步骤

(1)参考5.1.5小节实验的操作步骤建立一个新的工程,命名为explasm,注意在建立工程的过程中添加设备数据库中S3C2410芯片自带的启动代码,也可手动添加启动代码startup.s.

(2)参考5.1.5小节实验的步骤和实验参考程序编辑输入源代码,保存文件为randtest.c和random.s.

(3)在Project workspace工作区中右击target1→Source Group 1,在弹出菜单中选择" Add file to Group'Source Group 1'",在随后弹出的文件选择对话框中,选择刚才建立的源文件randtest.c和random.s.

(4)在Option for Target对话框Linker页Scatter File对话框中添加分散加载描述文件explasm.sct,文件内容与5.5.6小节CTest2.sct相同.

(5)选择菜单项Project→Build target或快捷键F7,生成目标代码.

(6)选择菜单项Debug→Start/Stop Debug Session或快捷键Ctrl+F5,即可进入调试模式.这里使用的是μVision3IDE中的软件仿真器.

(7)选择菜单项Debug→run或F5,即可运行代码.

(8)打开memory、register、watch、Local窗口,单步执行,并通过memory、register、watch、variable窗口分析判断结果.注意观察程序如何从跳转进主程序_main,在call stack窗口观察当前执行函数之间的调用.

(9)结合实验内容和相关资料,观察程序运行.

(10)理解和掌握实验后,完成实验练习题.

5.5.6 实验参考程序

(1)randtest.c参考源代码.

img195

(2)random.s参考源代码.

img196

img197

5.5.7 练习题

使用嵌入汇编语言实现R1+R2=R0的加法运算,运算结果保存在R0.调试时打开Register窗口,观察嵌入汇编语句运行前后R0、R1、R2、SP寄存器以及ATPCS寄存器对应的ARM寄存器内容的变化.

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈