智能车制作

标题: 汇编问题,请教高手 [打印本页]

作者: CenaTP    时间: 2009-5-16 10:39
标题: 汇编问题,请教高手
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
上述程序达不到我要的效果,我又找不出有什么问题
有没有董汇编的高手指点一下
作者: azure    时间: 2009-5-16 23:27
LDAB ROW//加载数组长度
loop1:     LDX b_start //加载数组基地址到索引寄存器X中
               LDAA #255
               STAA X//将累加器A中的值存到以X寄存器内容为地址的RAM中
               INX     //X中的值加1      
               DBNZ B,LOOP1//将累加器B的值减1,然后与零比较,如果不为零就跳到LOOP1处
作者: CenaTP    时间: 2009-5-16 23:53
2# azure
这个哥们先谢谢你
不过不行啊
STAA X 这句不行 要写成    STAA 0,X才不报错
DBNZ 这个命令也没有      DBEQ到有一个功能一样的
改了还是达不到效果
还有我们的ROW是这样定义的  #define ROW 25  
LDAB ROW  这句是不是要改成LDAB #ROW
作者: CenaTP    时间: 2009-5-16 23:55
2# azure
错了 不是DBEQ  是DBNE
作者: ht59667038    时间: 2009-5-17 15:27
汇编指令运行时就会自动停止...这是什么问题呢?
作者: azure    时间: 2009-5-17 21:59
我不是在C代码中嵌入汇编代码,而是在新建工程选编程语言的时候C与汇编都打上勾,这样生成的工程里会有一个main.asm文件,我给的汇编代码是在main.asm里面写的,汇编里调用C中定义的变量只需在main.asm文件中加上一句XREF ROW就可以了;STAA X肯定没错,把最后一句改成DBNE B,LOOP1
当你在C化码中需要初始化数组时,调用asm_main()就可以了(好长时间没摸这个东西了,资料都删光了,不好意思哈)
作者: CenaTP    时间: 2009-5-18 08:13
5# ht59667038


大概是你人品不好吧
作者: CenaTP    时间: 2009-5-18 08:13
5# ht59667038


大概是你人品不好吧
作者: CenaTP    时间: 2009-5-18 08:17
6# azure
看来哥们你真的是高手啊
这只是我们图像处理程序的一部分
我们把汇编的图像处理嵌入到整个大程序的时候编译不会报错
但是执行的时候会自动停止
这是怎么回事
作者: azure    时间: 2009-5-18 12:43
自动停止的问题开始时我也遇到过,我也不知道为什么,最初我采集图像只用一个外部中断IRQ,配合其它的一些管脚来实现采集,这个方案浪费了我很多时间,我左看右看都没有问题(可能是我没查出来),最让人吐血的就是单片机采了一幅就停止运行了,而且采到的图像还是严重错位的(非一般人所能想像的那种错位),后来我知道图像错位的原因是IRQ中断ISR在无阻循环的执行,自动停止我猜想可能是IRQ ISR无限循环执行导致堆栈溢出,个人猜测,不必深究。后来改用timer的中断才实现正常采集。如果你用的是IRQ中断的话,建议你改用其它管脚的中断试试。(经验之谈,希望有用)
作者: CenaTP    时间: 2009-5-18 18:36
10# azure

我们先用C语言写的处理程序 在整个程序里没有问题可以运行
就是处理的部分换成汇编就不行了  这样看来不是中断口的问题
堆栈溢出倒是有可能
因为一直有SP 警报的
作者: etch    时间: 2009-5-27 14:18
#define tmp(i) (tmp##i)
#define ROW    (0x1fff)
unsigned char*iterator=0,*current=0,*b_start[ROW];         
void main(void){*iterator=0;*current=0;*b_start[0]=255;
//CLR   [iterator,PCR]
//CLR   [current,PCR]
//LDAB  #255
//STAB  [b_start,PCR]
for(;*iterator<(ROW);){*b_start[*current]=255;
//BRA   *+31 ;abs = 002d
//LDAB  [current,PCR]
//LSLD  
//TFR   D,X
//LDY   b_start,X
//LDAB  #255
//STAB  0,Y
*current++;*iterator++;
//LDX   current
//INX   
//STX   current
//LDX   iterator
//INX   
//STX   iterator
//LDAB  [iterator,PCR]
//CLRA  
//CPD   #8191
//BLT   *-37 ;abs = 0010
};
}
//RTS

作者: etch    时间: 2009-5-28 06:40
#define default (0xff)
#define ROW    (0x1fff)
unsigned char iterator=0,current=0,b_start[ROW];         
main(){iterator=0;current=0;b_start[0]=default;
                      //clr     #iterator
                      //clr     #current
                      //ldab  #default
                      //stab  #b_start
for(;iterator<(ROW);){b_start[current]=default;
                      //bra   *+31 ;abs = 002d
                      //ldab  #current;//lsld;//tfr     d,x  
                      //ldaa  #default                   
                      //ldy    #b_start,x
                      //ldab  #default
                      //stab  0,y
current++;iterator++;
                      //ldx    #current
                      //inx   
                      //stx    #current
                      //ldx    #iterator
                      //inx   
                      //stx    #iterator
                      //ldab  #iterator;//clra  
                      //cpd   #ROW
                      //blt   *-37 ;abs = 0010
};
}

作者: etch    时间: 2009-5-28 06:52
本帖最后由 etch 于 2009-5-28 07:15 编辑


作者: etch    时间: 2009-5-28 07:00
ldd   #65535
std   b_start
std   b_start
:2
.
.
.
std   b_start:8192

作者: CenaTP    时间: 2009-6-8 12:21
15# etch
啊 这么详细的
真是太感谢了
作者: gshking    时间: 2009-9-24 11:26
好东西




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2