4057|7

92

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教C语汇编程序,附代码 [复制链接]

本帖最后由 dontium 于 2015-1-23 13:27 编辑

在C语言写的主程序里定义如下:
extern int Multiply(x,y);

汇编写的函数程序:
     .def  _Multiply
     .global _x
     .global _y
     .global _TEMP
     .global _z
     .text
     
_Multiply:
     POPD   *+        ; return address
     SAR    AR0,*+    ; old frame pointer
     SAR    AR1,*     ; old stack pointer
     LAR    AR0,*+,AR1; assign new frame pointer
  ;;   SST    #1,*+     ; status register 1
  ;;   SST    #0,*+     ; status register 0
     
     LACL   _x            
     SACL   _TEMP
     LT     _y
     MPYU   _TEMP
     SACL   _z
     
     MAR    *,AR1      ;*=AR1=stack pointer
     MAR    *-         ;SP points to last data
     LST    #0,*-      ; status register 0
     LST    #1,*-      ; status register 1
     LAR    AR0,*-     ; restore old FP
     PSHD   *          ; return address
     RET
   在编译的时候提示:
line 11: [F095] parameter types missing from prototype of \'Multiply\'

line 11 就是指我在主程序里定义的extern int Multiply(x,y);
我的本意是实现两个数相乘,本来用Q格式写的,但是测试运算速度太慢,所以想用C调汇编写.

谢谢.

最新回复

参数的声明在汇编中如下:   .def  _Multiply _Multiply: ..... ...... 没有其他任何变量的声明了! -------------- 在C当中: extern  int Mulityply(int x,inty); -------------------------------------------------------------- CC中的C与汇编接口和KEIL C中的C与汇编接口基本类似.   详情 回复 发表于 2008-9-11 12:48
点赞 关注
 

回复
举报

92

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
本帖最后由 dontium 于 2015-1-23 13:27 编辑

extern int Multiply(x,y);
改为extern int Multiply(int x,int y); 试试。
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用:

extern int Multiply(x,y);
改为extern int Multiply(int x,int y); 试试。
这个我试过了,在汇编返回的时候就跑飞了.而且在单步运行时观察运行结果,发现连赋值功能都没

有实现.

现在很晕呢,写的浮点运算试都没敢拿来试,肯定太慢.IQ运算做个乘/除法也要17uS左右.用在PI

运算中速度是否跟得上也没有把握.

现在就是想做两个C调汇编的小程序,一个用来实现两个Q14相乘,一个实现两个Q14相除.应该是

非常简单的.不知道有没有好心人帮忙弄一个?感激涕零.
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

4
 
help!
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

5
 
有没有人帮我写一个C调汇编的程序?

搞不定呢.

拜谢.
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
参数地址不对,当C中调用了int Multiply(x,y)后,编译器的处理方法类似于下面代码:

MAR   *,AR2
LAR   AR2,#X
LACC *,AR1
SACL *+,AR2
LAR    AR2,#Y
LACC *,AR1
SACL  *+

  CALL  _Multiply
  MAR   *,AR1
  SBRK  #2

----------------------------------
编译器是将参数压入了堆栈当中,所以,这个有参数的函数的汇编代码要到堆栈当中去寻找两个乘数;

_Multiply:
     POPD   *+         ;FP-2
     SAR    AR0,*+    ;FP-1
     SAR    AR1,*     ;当前局部指针FP
     LAR    AR0,*+,AR1;
......................
.......................

    MAR  *,AR1
    MAR  *-
     LAR    AR0,*-     
     PSHD   *         
     RET
   

  所以,两个被乘数的位置在FP-3,和FP-4的位置;

  另外,
  
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

7
 
闂傚倸鍊搁崐椋庣矆娓氣偓楠炴牠顢曢妶鍡椾粡濡炪倖鍔х粻鎴犲閸ф鐓曢柟閭﹀灱閸ゅ鏌ら弶鎸庡仴闁哄本绋戦埥澶娾枎閹邦喚鈻忛梺璇插閼归箖藝娴兼潙桅闁告洦鍨扮粻鎶芥煕閳╁啨浠﹀瑙勬礈缁辨捇宕掑▎鎴濆濡炪們鍔屽Λ婵嬪极閸愵喖顫呴柣妯虹仛濞堟儳鈹戞幊閸婃洟骞婃惔銏犲姅闂傚倷绀侀悿鍥ь浖閵娧呯焼濞达綀顫夐崣蹇涙煏閸繍妲归柣鎾跺枛閺岋絽顫滈埀顒佺鐠轰警鐎堕柣鎴eГ閻撴洟鏌¢崒婵囩《缂佺姷绮妵鍕閿涘嫭鍣板Δ鐘靛仜椤戝寮崒鐐村殟闁靛濡囪ぐ銊╂⒑鐠囨煡顎楅柛妯荤矒瀹曟垿骞樼紒妯煎幈闂佸綊鍋婇崢濂稿礉閵堝棛绠鹃柛顐墯鐎氾拷闂傚倸鍊搁崐宄懊归崶顒佸剭妞ゆ劧绠戦獮銏ゆ煃鏉炴壆鍔嶆い鏂垮缁辨捇宕掑顑藉亾閸濄儳鐭欓柛鏇ㄥ灠缁狀垶鏌ㄩ悤鍌涘闂傚倸鍊搁崐鐑芥嚄閸洖绠犻柟鍓х帛閸嬨倝鏌曟繛鐐珕闁稿顑夐弻锝夊箛椤掍焦鍎撻梺缁樺笒閻忔岸濡甸崟顖氱闁规惌鍨遍弫楣冩煟鎼淬垻鍟查柟鍑ゆ嫹濠电姷鏁告慨鐑藉极閹间礁纾绘繛鎴旀嚍閸ヮ剦鏁囬柕蹇曞Х椤︻噣鎮楅崗澶婁壕闂佸憡娲﹂崑澶愬春閻愮儤鈷戦悹鎭掑妼濞呮劙鏌熼崙銈嗗
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
闂傚倸鍊搁崐椋庣矆娓氣偓楠炴牠顢曢妶鍡椾粡濡炪倖鍔х粻鎴犲閸ф鐓曢柟閭﹀灱閸ゅ鏌ら弶鎸庡仴闁哄本绋戦埥澶娾枎閹邦喚鈻忛梺璇插閼归箖藝娴兼潙桅闁告洦鍨扮粻鎶芥煕閳╁啨浠﹀瑙勬礈缁辨捇宕掑▎鎴濆濡炪們鍔屽Λ婵嬪极閸愵喖顫呴柣妯虹仛濞堟儳鈹戞幊閸婃洟骞婃惔銏犲姅闂傚倷绀侀悿鍥ь浖閵娧呯焼濞达綀顫夐崣蹇涙煏閸繍妲归柣鎾跺枛閺岋絽顫滈埀顒佺鐠轰警鐎堕柣鎴eГ閻撴洟鏌¢崒婵囩《缂佺姷绮妵鍕閿涘嫭鍣板Δ鐘靛仜椤戝寮崒鐐村殟闁靛濡囪ぐ銊╂⒑鐠囨煡顎楅柛妯荤矒瀹曟垿骞樼紒妯煎幈闂佸綊鍋婇崢濂稿礉閵堝棛绠鹃柛顐墯鐎氾拷闂傚倸鍊搁崐宄懊归崶顒佸剭妞ゆ劧绠戦獮銏ゆ煃鏉炴壆鍔嶆い鏂垮缁辨捇宕掑顑藉亾閸濄儳鐭欓柛鏇ㄥ灠缁狀垶鏌ㄩ悤鍌涘闂傚倸鍊搁崐鐑芥嚄閸洖绠犻柟鍓х帛閸嬨倝鏌曟繛鐐珕闁稿顑夐弻锝夊箛椤掍焦鍎撻梺缁樺笒閻忔岸濡甸崟顖氱闁规惌鍨遍弫楣冩煟鎼淬垻鍟查柟鍑ゆ嫹濠电姷鏁告慨鐑藉极閹间礁纾绘繛鎴旀嚍閸ヮ剦鏁囬柕蹇曞Х椤︻噣鎮楅崗澶婁壕闂佸憡娲﹂崑澶愬春閻愮儤鈷戦悹鎭掑妼濞呮劙鏌熼崙銈嗗
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
福禄克有奖直播:高精度测温赋能电子制造 报名中!
直播时间:2025年2月28日(周五)上午10:00
直播主题:高精度测温赋能电子制造
小伙伴们儿快来报名直播吧~好礼等你拿!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表