我给这个任务:大会 - 修正源程序
这个程序应该是搜索字节数组的值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。
在哪里的问题? – owacoder
我编辑了这个问题,希望能够澄清我需要做的事情。 – defaultname
@PeterCordes:该程序集不适用于x86,适用于正好具有寄存器R0至R15的基于16位RISC的TI处理器。 MSP430的许多汇编指令与x86汇编器上使用的指令名称相似,因此很容易认为这可能是x86。 –