Я дал это задание:Ассамблея - Исправление программы Источник
Эта программа должна искать массив байтов для значения 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 не найдено, поэтому оно должно поместить 0x00 в «f2Address». Но вместо того, чтобы размещать там нуль, он просто продолжает перемещаться по инструкциям без изменения/добавления каких-либо значений в любом месте.
Я не совсем уверен, что делать или куда идти дальше отсюда. Он использует CodeComposer на MSP430.
Где проблема? – owacoder
Я отредактировал проблему, чтобы надеяться, уточнить, что мне нужно сделать. – defaultname
@PeterCordes: сборка не для x86, это для 16-разрядных процессоров TI на базе RISC, которые, как правило, имеют регистры от R0 до R15. Многие из инструкций по сборке MSP430 имеют похожие имена для тех, которые используются на ассемблерах x86, поэтому легко подумать, что это может быть x86. –