Дело было вечером, делать было нечего. Сижу, и занимаюсь сами знаете чем. Озадаченный вопросом "а что будет если", в MCU8051IDE дизассемлировал маленький бессмысленный кусочек какого-то бинарного мусора, и пытаюсь отладить то что вышло. Удалил все вызовы и переходы в никуда, все MOVX, все что влияет на указатель стека, удалил или поменял все, на что ругается IDE. Осталось немного. При выполнении что-то там происходит, ставлю переход из конца в начало, и делаю вечный кайф:
Спойлер
Код:
ORG 0h
lab0: mov A, @R0
setb C
rlc A
mov @R1, A
mov @R0, A
mov @R1, A
mov C, 0E7h
rlc A
anl 3h, A
rlc A
mov @R1, A
anl C, 0F2h
rr A
mov @R1, #32h
mov R3, 77h
rlc A
xchd A, @R1
rlc A
mov R7, A
xchd A, @R1
mov R2, A
xchd A, @R1
rlc A
mov @R1, A
ljmp lab0
END
Прошагиваю то что получилось, и через 2-3 цикла выполнения этого бреда, получаю ошибку:

Комментирую указанную строку. После чего получаю такую-же ошибку в строке с другим номером. Делал дальше по всякому, получалось все одно и тоже Начинаю подозревать что чудит IDE, тем более что там такое иногда бывает, и решаю проверять в железе.Дописываю две подпрограммы - вывода аккумулятора в P1 со светодиодами, и задержку 400 мс, чтоб видно было:
Спойлер
Код:
ledport equ P1
temp equ 0x20
ORG 0h
lab0: mov A, @R0
setb C
rlc A
mov @R1, A
mov @R0, A
mov @R1, A
mov C, 0E7h
rlc A
anl 3h, A
rlc A
mov @R1, A
anl C, 0F2h
rr A
mov @R1, #32h
mov R3, 77h
rlc A
xchd A, @R1
rlc A
mov R7, A
xchd A, @R1
mov R2, A
xchd A, @R1
rlc A
mov @R1, A
mov temp, A
call output
call delay
ljmp lab0
delay: mov 30h, #002h
mov 31h, #0c6h
mov 32h, #0e7h
next: djnz 32h, $
djnz 31h, next
djnz 30h, next
ret
output: push ACC
push PSW
mov A, temp
cpl A
mov ledport, A
pop PSW
pop ACC
ret
END
Заливаю в МК, запускаю, через пару циклов программа встает... Да причем так встает, что МК виснет намертво, reset перестает работать. Понимаю, что я такого пока не видел.
Пытаюсь понять как это происходит, и не знаю что думать. IDE говорит что invalid opcode. Но как могут быть опкоды инвалидами, если их выдает транслятор, если они записывается во флэш, где не могут изменится в процессе работы. Инструкции в этой программе хоть и от балды натыканы, но они ведь правильные. Я что-то не знаю, не понимаю, или как это?