2016-02-11 4 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 

В попытке решить эту проблему, я изменил «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.

+1

Где проблема? – owacoder

+0

Я отредактировал проблему, чтобы надеяться, уточнить, что мне нужно сделать. – defaultname

+1

@PeterCordes: сборка не для x86, это для 16-разрядных процессоров TI на базе RISC, которые, как правило, имеют регистры от R0 до R15. Многие из инструкций по сборке 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' никогда не равен нулю. –