初学2407汇编想做个和C混合编程,就是传递个参数,请高手帮

[复制链接]
2814|0
 楼主| iwillbe001 发表于 2007-4-28 17:37 | 显示全部楼层 |阅读模式
c代码如下:<br />extern&nbsp;int&nbsp;read_flash(int);&nbsp;/*&nbsp;declare&nbsp;external&nbsp;asm&nbsp;function&nbsp;*/<br />main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i=0,temp=0;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;temp=read_flash(0);&nbsp;/*&nbsp;call&nbsp;function&nbsp;normally&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;temp=read_flash(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;temp=read_flash(2);<br /><br />}<br /><br />汇编代码如下:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.global&nbsp;_read_flash<br />Rg_CAL_TEMP:&nbsp;&nbsp;&nbsp;&nbsp;.bss&nbsp;CAL_TEMP,1<br />_read_flash:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;保护现场的语句<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POPD&nbsp;*+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAR&nbsp;AR0,*+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAR&nbsp;AR1,*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LAR&nbsp;AR0,#1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LAR&nbsp;AR0,*0+,AR2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;读取一个字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDP&nbsp;#Rg_CAL_TEMP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SACL&nbsp;CAL_TEMP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;LACL&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;#0FFFFh<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDP&nbsp;#TABLE;取得刚写入的数表的首地址<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;LAR&nbsp;AR3,#TABLE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;MAR&nbsp;*,AR3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;ADD&nbsp;*,AR3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LACC&nbsp;#TABLE;取得表中第一个数的地址放到ACC的低16位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADD&nbsp;CAL_TEMP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;#0FFFFh<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDP&nbsp;#Rg_CAL_TEMP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TBLR&nbsp;CAL_TEMP&nbsp;&nbsp;&nbsp;&nbsp;;CAL_TEMP取得表头第一个值80h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LACL&nbsp;CAL_TEMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;与C语言兼容的程序代码部分<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAR&nbsp;*,AR1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SBRK&nbsp;#2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LAR&nbsp;AR0,*-<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PSHD&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET<br />TABLE:&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;128,131,138,145,152,159,167,176,185,194,204,214,224,236,247,260<br />我就是想做个由C传递给汇编要在数表TABLE中查询的数值的位置,再由汇编把这个数值反送回来,我知道是ACC中实现的参数传输,可是一执行到ADD&nbsp;CAL_TEMP这句,ACC中的数值就乱变,有时是AR0中的数值,有时是IMR中的数值,这是为什么啊?高手救我,我都搞了两天了,因为以前一直用C,现在发现C不能直接访问2407的FLASH单元才这么混合编程的,我汇编实在是菜鸟一个,请各位大侠帮忙。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部