Добрался до TRAP-диспетчера.
Написал несколько комментариев и запутался.
Не пойму, какое число получается после очистки битов и сдвига
И куда в конечном счёте происходит переход?
Аргументы у TRAP-а видел такие:
11, 12, 13
20, 22, 23, 25, 27
32, 33, 36,
44
50, 53, 55
Код:TRAP-диспетчер: --------------------- Сохраняем регистры: 004 504: MOV R3,-(SP) ; SP=SP-2; занести значение регистра R3 в стек 004 506: MOV R4,-(SP) ; SP=SP-2; занести значение регистра R4 в стек 004 510: MOV 000 004(SP),R3 ;записать в R3 содержимое ячейки по адресу SP+4, т.е. адрес возврата из прерывания 004 514: MOV R3,R4 ; R4 = R3 = адрес возврата из прерывания 004 516: MOV -(R3),R3 ; R3 = (R3-2) ; достали команду TRAP, вызвавшую прерывание, и положили в регистр R3 004 520: BIC #177 600,R3 ; обнулить все разряды команды TRAP, кроме младших 7 бит - достали аргумент TRAP-а 004 524: MOV R3,-(SP) ; полученный аргумент кладём в стек 004 526: CMP #000 010,R3 ; сравниваем 000 010 - R3 004 532: BMI 004 540 ; если R3 меньше 10, то перейти на 004 540 004 534: CLR R3 ; очистить R3 004 536: BR 004 544 ; перейти на 004 544 004 540: SUB #000 010,R3 ; вычесть 10 из R3 004 544: MOVB 004 600(R3),-(SP); положить в стек значение 004 600+(R3) 004 550: BIC #177 400,(SP) ; очистить старший байт ячейки стека 004 554: ASL R3 ; сдвинуть R3 влево 004 556: JSR PC,@004 646(R3) ; перейти к подпрограмме по адресу 004 646+(R3) 004 562: MOV (SP)+,R3 004 564: ADD R3,000 006(SP) 004 570: TST (SP)+ 004 572: MOV (SP)+,R4 004 574: MOV (SP)+,R3 004 576: RTI 004 600: RTI 004 602: HALT




Ответить с цитированием