智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 6220|回复: 16
打印 上一主题 下一主题

汇编问题,请教高手

[复制链接]

0

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
674
威望
370
贡献
238
兑换币
22
注册时间
2009-2-15
在线时间
33 小时
跳转到指定楼层
1#
发表于 2009-5-16 10:39:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C语言下定义一数组byte  b_start[ROW];
                   一变量 byte   i;   
然后用汇编给每个单元赋值255 汇编程序如下
loop1:      LDX b_start  或者是  LDX #b_start  
               LDAA #255
               STAA i,X
               INC i
               LDAA i
               CMPA #ROW
               BLO loop1       //init over
上述程序达不到我要的效果,我又找不出有什么问题
有没有董汇编的高手指点一下

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
228
QQ
威望
180
贡献
22
兑换币
0
注册时间
2008-9-17
在线时间
13 小时
2#
发表于 2009-5-16 23:27:02 | 只看该作者
LDAB ROW//加载数组长度
loop1:     LDX b_start //加载数组基地址到索引寄存器X中
               LDAA #255
               STAA X//将累加器A中的值存到以X寄存器内容为地址的RAM中
               INX     //X中的值加1      
               DBNZ B,LOOP1//将累加器B的值减1,然后与零比较,如果不为零就跳到LOOP1处
回复 支持 反对

使用道具 举报

0

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
674
威望
370
贡献
238
兑换币
22
注册时间
2009-2-15
在线时间
33 小时
3#
 楼主| 发表于 2009-5-16 23:53:13 | 只看该作者
2# azure
这个哥们先谢谢你
不过不行啊
STAA X 这句不行 要写成    STAA 0,X才不报错
DBNZ 这个命令也没有      DBEQ到有一个功能一样的
改了还是达不到效果
还有我们的ROW是这样定义的  #define ROW 25  
LDAB ROW  这句是不是要改成LDAB #ROW
回复 支持 反对

使用道具 举报

0

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
674
威望
370
贡献
238
兑换币
22
注册时间
2009-2-15
在线时间
33 小时
4#
 楼主| 发表于 2009-5-16 23:55:34 | 只看该作者
2# azure
错了 不是DBEQ  是DBNE
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
威望
181
贡献
22
兑换币
0
注册时间
2009-2-14
在线时间
8 小时
5#
发表于 2009-5-17 15:27:00 | 只看该作者
汇编指令运行时就会自动停止...这是什么问题呢?
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
228
QQ
威望
180
贡献
22
兑换币
0
注册时间
2008-9-17
在线时间
13 小时
6#
发表于 2009-5-17 21:59:39 | 只看该作者
我不是在C代码中嵌入汇编代码,而是在新建工程选编程语言的时候C与汇编都打上勾,这样生成的工程里会有一个main.asm文件,我给的汇编代码是在main.asm里面写的,汇编里调用C中定义的变量只需在main.asm文件中加上一句XREF ROW就可以了;STAA X肯定没错,把最后一句改成DBNE B,LOOP1
当你在C化码中需要初始化数组时,调用asm_main()就可以了(好长时间没摸这个东西了,资料都删光了,不好意思哈)
回复 支持 反对

使用道具 举报

0

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
674
威望
370
贡献
238
兑换币
22
注册时间
2009-2-15
在线时间
33 小时
7#
 楼主| 发表于 2009-5-18 08:13:49 | 只看该作者
5# ht59667038


大概是你人品不好吧
回复 支持 反对

使用道具 举报

0

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
674
威望
370
贡献
238
兑换币
22
注册时间
2009-2-15
在线时间
33 小时
8#
 楼主| 发表于 2009-5-18 08:13:51 | 只看该作者
5# ht59667038


大概是你人品不好吧
回复 支持 反对

使用道具 举报

0

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
674
威望
370
贡献
238
兑换币
22
注册时间
2009-2-15
在线时间
33 小时
9#
 楼主| 发表于 2009-5-18 08:17:04 | 只看该作者
6# azure
看来哥们你真的是高手啊
这只是我们图像处理程序的一部分
我们把汇编的图像处理嵌入到整个大程序的时候编译不会报错
但是执行的时候会自动停止
这是怎么回事
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
228
QQ
威望
180
贡献
22
兑换币
0
注册时间
2008-9-17
在线时间
13 小时
10#
发表于 2009-5-18 12:43:22 | 只看该作者
自动停止的问题开始时我也遇到过,我也不知道为什么,最初我采集图像只用一个外部中断IRQ,配合其它的一些管脚来实现采集,这个方案浪费了我很多时间,我左看右看都没有问题(可能是我没查出来),最让人吐血的就是单片机采了一幅就停止运行了,而且采到的图像还是严重错位的(非一般人所能想像的那种错位),后来我知道图像错位的原因是IRQ中断ISR在无阻循环的执行,自动停止我猜想可能是IRQ ISR无限循环执行导致堆栈溢出,个人猜测,不必深究。后来改用timer的中断才实现正常采集。如果你用的是IRQ中断的话,建议你改用其它管脚的中断试试。(经验之谈,希望有用)
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 00:40 , Processed in 1.163234 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表