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