Народ, ковыряюсь в системе управления одного радиоприёмника, а именно вот:
http://www.radioscanner.ru/forum/topic46843.html
Считал ПЗУ-шку, дизассемблировал, но вот практики программирования, особенно в ассемблере не хватает.
Помогите осмыслить подпрограмму.
Правильно ли я дал комментарии и что же происходит в цикле?
Код:
016 304: MOV R1,-(SP) ; занести значение регистра R1 в стек; SP=SP-2
016 306: MOV R2,-(SP) ; занести значение регистра R2 в стек; SP=SP-2
016 310: MOV R3,-(SP) ; занести значение регистра R3 в стек; SP=SP-2
016 312: MOV 000 006(SP),R3 ; занести в R3 содержимое ячейки по адресу SP+6, т.е. адрес возврата из подпрограммы
016 316: MOV (R3)+,R1 ; R1 = R3, R3 = R3+2; занести в R1 адрес второй команды после возвращения из подпрограммы
016 320: MOV (R3)+,R2 ; R2 = R3, R3 = R3+2; занести в R2 адрес третьей команды после возвращения из подпрограммы
Цикл:
016 322: MOV (R3)+,R3 ; R3 = R3, R3 = R3+2; занести в R3 адрес четвёртой команды после возвращения из подпрограммы
016 324: ADD #000 006,000 006(SP) ; сдвинуть адрес возврата из подпрограммы на +6
016 332: MOV (R1)+,(R2)+ ; R2 = R1, R1 = R1+2, R2 = R2+2;
016 334: SOB R3,016 332 ; R3 = R3-1; если R3 не равно 0, то перейти к 016 332
016 336: MOV (SP)+,R3 ; восстановить значение регистра R3 из стека; SP=SP+2
016 340: MOV (SP)+,R2 ; восстановить значение регистра R2 из стека; SP=SP+2
016 342: MOV (SP)+,R1 ; восстановить значение регистра R1 из стека; SP=SP+2
016 344: RTS PC ; вернуться из подпрограммы
ПЗУ-шка во вложении