5527|2

2

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

线性汇编数组问题 [复制链接]

最近刚开始接触,有个问题想请教一下各位大大们
我如何在线性汇编中调用C语言中已经定义的数组 例如:int A[3]={0,1,2};B[2][3]={{0,1,2},{0,1,2},{0,1,2}}
如果在线性汇编中如何定义数组并赋值(一维、二维、三维),如何调用数组
针对结构体如何写成线性汇编?有没有针对线性汇编程序设计的书,现在基本都是从C6000系列的教材去看 介绍的不是很全面,求指导
请给个简单示例再次谢谢各位大大们
我这样写哪里有问题?编译通过但是结果不正确。。。。。。。。。。。。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
extern float dotprod(const int nx);
                                                       
      void main(void)
      
      {
         int N=4,i;
   int sum;
        sum=dotprod(N); 
        printf("OUT:%f\n",sum);
      }
   
线性汇编文件
   
.data
x  .float  0x00f0, 0x1234, 0x0000, 0x0000
y  .float  0x1234, 0x4567, 0x0000, 0x0001
    .text
    .global _dotprod
_dotprod   .cproc   nx
.ref _x
.ref _y
    .reg sum1,x0,y0,prod0
    .reg x1,y1
       ZERO           sum1
       MVKL    x,   x1
    MVKH    x,   x1
       MVKL    y,   y1
    MVKH    y,   y1
loop:
       LDW           *x1++,       x0          
       LDW           *y1++,       y0          
       MPYSP          x0,         y0,       prod0; 
       ADDSP          sum1,       prod0,    sum1 
       SUB            nx,         1,        nx   
  [nx] B            loop
    .return sum1                     
    .endproc

最新回复

loop:        LDW           *x1++,       x0                 LDW           *y1++,       y0           NOP 4             MPYSP          x0,         y0,       prod0; NOP 1        ADDSP          sum1,       prod0,    sum1        SUB            nx,         1,        nx      [nx] B            loop     .return sum1       你再试下                   .endproc  详情 回复 发表于 2012-6-18 10:56

点评

loop: LDW *x1++, x0 LDW *y1++, y0 NOP 4 MPYSP x0, y0, prod0; NOP 1 ADDSP su  详情 回复 发表于 2012-6-18 10:56
点赞 关注
 

回复
举报

61

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

回复 楼主 r0500s2005 的帖子

loop:
       LDW           *x1++,       x0         
       LDW           *y1++,       y0     
     NOP 4     
       MPYSP          x0,         y0,       prod0;
NOP 1
       ADDSP          sum1,       prod0,    sum1
       SUB            nx,         1,        nx   
  [nx] B            loop
    .return sum1      

你再试下              
    .endproc
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
结果不正确啊 估计和我x,y数组值定义出了问题
想问一下 数组定义成float x[4]={1,1,1,1}

x .float 0x3F800000, 0x3F800000, 0x3F800000, 0x3F800000

这样写对吗?

在C里面定义好 然后从线性汇编里调用,报错 如何解决求指教
"C:\Users\ADMINI~1\AppData\Local\Temp\0012010", ERROR!   at EOF: [E0300]
         The following symbols are undefined:
1 Assembly Error, No Assembly Warnings
  y
  x

Errors in Source - Assembler Aborted

>> Compilation failure




#include <stdio.h>
#include <stdlib.h>
#include <math.h>
extern int dotprod(const int nx);
int y[4]={0,0,0,0};
int x[4]={0,0,0,0};
                                                        
void main(void)
{
    int N=4,i;
float sum;
sum=DSPF_sp_dotprod(N);
printf("OUT:%f\n",sum);

}
 
 
 
 
.ref _x
.ref _y
    .global _dotprod
_dotprod   .cproc   nx

    .reg sum1,x0,y0,prod0
    .reg x1,y1
    ZERO           sum1
    MVKL    x,   x1
    MVKH    x,   x1
    MVKL    y,   y1
    MVKH    y,   y1
loop:
LDW *x1++, x0 
LDW *y1++, y0 
NOP 4 
MPYSP x0, y0, prod0; 
NOP 1
ADDSP sum1, prod0, sum1 
SUB nx, 1, nx 
[nx] B loop
.return sum1 

.endproc
再次谢谢个位大大们的指教
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
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
快速回复 返回顶部 返回列表