我得到了这个任务:
该程序应该搜索值为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。
答案 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