装配 - 更正源程序

时间:2016-02-11 20:17:31

标签: arrays assembly msp430

我得到了这个任务:

  

该程序应该搜索值为0xf2的字节数组。当它找到0xf2时,它应该将其位置(即地址)保存到整数变量“f2Address”中。如果它没有在数组中找到0xf2的值,它应该将值0x00放入变量“f2Address”。这个程序有一些错误。修复此程序,使其正常工作。

给出的原始代码是:

.label   TABLE1_LOC_START
TABLE1  .byte   0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0
TABLE1_ST  .word   TABLE1_LOC_START

RESET       mov.w   #0280h,SP               
            mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; stop watchdog timer

        mov     &TABLE1_ST, R10
        mov     #0xf2, R11
        mov     #0x08, R12
again       inc     R10
        cmp     0(R10), R11
        je      found
        dec     R12
        jz      again
found       mov     R10, &f2Address

endProgram  jmp     endProgram

为了解决这个问题,我将'je'改为'jeq',并在代码中添加了'mainLoop'。修改后,我有了这段代码:

.label   TABLE1_LOC_START
TABLE1  .byte   0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0
TABLE1_ST  .word   TABLE1_LOC_START

mainLoop   mov    &TABLE1_ST, R10   
        mov    #0xf2, R11           
        mov    #0x08, R12           
again   inc    R10                  
        cmp    R10, R11             
        jeq    found                
        dec    R12                  
        jnz    again                 
found   mov    R10, &f2Address      

endProgram  jmp    endProgram

当我单步执行时,R12最终会减少到零。一旦它,它意味着找不到0xf2的值,所以它应该在'f2Address'中放置一个0x00。但不是在那里放置零,而是在不改变/添加任何值的情况下继续移动指令。

我不太确定该做什么或从哪里开始。它在MSP430上使用CodeComposer。

1 个答案:

答案 0 :(得分:3)

想出来:

mainLoop    mov    &TABLE1_ST, R10  
        mov    #0xf2, R11       
        mov    #0x10, R12       

again   inc    R10          
        cmp    0(R10), R11      
        jeq    found                                       
        dec    R12          
        jnz    again            
        mov #0x00, &f2Address   

found   mov    R10, &f2Address  

endProgram  jmp    endProgram