2016-02-11 52 views
1

我给这个任务:大会 - 修正源程序

这个程序应该是搜索字节数组的值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 

在试图解决这个问题,我改变了“济”到“JEQ”和我说“主循环”的代码。我的修改后,我有这个代码:

.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

在哪里的问题? – owacoder

+0

我编辑了这个问题,希望能够澄清我需要做的事情。 – defaultname

+1

@PeterCordes:该程序集不适用于x86,适用于正好具有寄存器R0至R15的基于16位RISC的TI处理器。 MSP430的许多汇编指令与x86汇编器上使用的指令名称相似,因此很容易认为这可能是x86。 –

回答

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   
+1

如果0xF2是第一个表项,这不起作用。当达到'endProgram'时,'f2Address'永远不为零。 –