我用的是2812 (一个加法小程序)<br />源程序如下:(源程序没错,但第二个程序是自己在第一个基础上修改后就有错了)<br /> .global start<br /> <br />start:<br /> MOV @AR1,#9000h ;给ar1寄存器赋值<br />LOOP:<br /> ADDB SP,#3 ;此时sp指针为403h地址<br /> MOV *-SP[1],#10 ;把立即数10放到402地址上<br /> MOV *-SP[2],#1 ;把立即数1放到401地址上<br /> MOV AL,*-SP[2] ;把401地址上数据读出放到AL寄存器中<br /> ADD AL,*-SP[1] ;把401和402地址中数据做加法运算,把结果放到AL寄存器中<br /> MOV *-SP[3],AL ;把AL中值放到400h地址中<br /> nop ;空指令<br /> nop<br /> SUBB SP,#3 ;设置sp指针为400h地址<br /> BANZ LOOP,AR1-- ;有条件跳转,只要ar1中的值不为0<br />.end<br /><br /><br />上面的源程序没错,但我自己在中间加了一条转移指令就有错误,如下所示,不知道为什么?望高手指点一下! <br /> .global start<br /> <br />start:<br /> MOV @AR1,#9000h ;给ar1寄存器赋值<br />LOOP:<br /> ADDB SP,#3 ;此时sp指针为403h地址<br /> MOV *-SP[1],#0f000h ;把立即数0f000h放到402地址上<br /> MOV *-SP[2],#0e000h ;把立即数0e000h放到401地址上<br /> MOV AL,*-SP[2] ;把401地址上数据读出放到AL寄存器中<br /> ADD AL,*-SP[1] ;把401和402地址中数据做加法运算,把结果放到AL寄存器中<br /> BCND W1,NC<br /> MOV AH,#1<br />W1:<br /> MOV *-SP[3],AL ;把AL中值放到400h地址中<br /> nop ;空指令<br /> nop<br /> SUBB SP,#3 ;设置sp指针为400h地址<br /> BANZ LOOP,AR1-- ;有条件跳转,只要ar1中的值不为0<br />.end<br />------------------------------ TASM.pjt - Debug ------------------------------<br />[tasm.asm] "C: ic2000cgtoolsincl2000" -g -q -fr"c:/icetek-f2812-a-edulab/dsp281x_examples/lab0103-asm/Debug" -d"_DEBUG" -d"LARGE_MODEL" -ml -v28 -@"Debug.lkf" "tasm.asm"<br />"tasm.asm", ERROR! at line 11: [E0002] Invalid instruction for specified<br /> processor version<br /> BCND W1,NC<br /><br />1 Assembly Error, No Assembly Warnings<br /><br />Errors in Source - Assembler Aborted<br /><br />Build Complete,<br /> 2 Errors, 0 Warnings, 0 Remarks.<br /> |
|