использование ловушки для вывода символов в ассемблере с использованием набора инструкций SPARC

Мое задание следующее:

Учитывая приведенный ниже ассемблерный код, напишите успешно выполняющуюся ловушку, которая выводит сообщение «Это ловушка» и возвращается к вашему основному коду.

Я считаю, что большая часть работы уже сделана, и это, вероятно, простой вопрос, но я работаю без каких-либо знаний об ассемблере, поэтому мне все еще очень нужна помощь. Я понимаю концепцию ловушек, но не синтаксис, поэтому мне действительно интересно, какой ответ ищет вопрос.

Часть внизу в ‹>, где написано «прошлый код ловушки здесь», ожидает ли я, что я напишу подпрограмму «ловушки» как метод? Или это должно быть больше похоже на часть в верхней части кода, где написано «trap: ta 0», к чему относится ноль? Я полагаю, что команда «та» относится к «ловушке всегда», а «0», вероятно, является номером ловушки? Я думаю, что профессор упомянул, что будет что-то вроде 28 ловушек, чего я действительно не понимаю. Прямо над частью, которая говорит «поместите сюда код ловушки», есть ссылка на «ловушку 15», почему 15? Почему мы переходим от нулевой ловушки к пятнадцатой? Какие еще ловушки подразумеваются в этом коде, я не совсем понимаю.

Является ли ожидаемый код ловушки таким же простым, как «ta 15»? Также каков синтаксис для возврата из ловушки и где в коде это должно быть размещено, или автоматический возврат ловушки после выполнения команды ловушки?

.begin

Main           .equ 0xa00
ConsoleCode    .equ 0xc00
CharactorString .equ 0xf00      !Start of CharactorString in memory
BASE            .equ 0x3fffc0   !Starting point of the memory mapped 
                                !region
COUT           .equ 0x0         !0xffff0000 Console Data Port
COSTAT         .equ 0x4         !0xffff0004 Console Status Port.
TrapCode       .equ 0xff000800  !Start of trap instruction code for trap #0

               .org Main
               addcc %r0,0,%r1  !Set PSR zero bit to observe instruction ta 
                                !loading PSR values into r18
               bne EndMain      !Do not call trap if condition not meet
trap:              ta 0
EndMain:           halt             !end of routine

               .org ConsoleCode
console:       add %r0, %r0, %r2    !Clear r2
               add %r0, %r0, %r4    !Clear r4
               add %r0, %r0, %r5    !Clear r5
               add %r0, %r0, %r7    !Clear r7
               sethi BASE, %r4      !Set r4 with the base address 0xffff0000 
                                    !for Memory Map IO
            ld [StringLength], %r5  !Load the charactor string length in the 
                                    !charactor string counter register r5

Loop:       ld [%r2 + String], %r3  !Load next char into r3
            dec%r5                  !decrement the charactor string counter register r5
            andncc %r5,0,%r7        !see if it is equal to zero
            be EndConsole           !stop if the charactor string counter is zero.

Wait:       ldub [%r4+COSTAT], %r1
            andcc %r1, 0x80, %r1
            be Wait
            stb %r3, [%r4+COUT]     !Print to console
            add %r2, 4, %r2         !increment String offset (r2)
            ba Loop

EndConsole: jmpl %r15,4,%r0         !Jump back to trap code


           .org CharactorString     !The "It's a Trap!" string
           StringLength:    0xd
           String:      0x49, 0x74, 0x27, 0x73, 0x20
                        0x61, 0x20, 0x54, 0x52, 0x41 
                        0x50, 0x21


          .org TrapCode         !Start of trap instruction code for trap #15

          <paste trap code here>


.end

person Trixie the Cat    schedule 16.03.2018    source источник
comment
Ожидается, что вы напишете код, который обрабатывает ta 0 предположительно, печатая сообщение. trap #15, вероятно, просто опечатка, везде написано trap #0.   -  person Jester    schedule 16.03.2018
comment
@Jester, как будет выглядеть код ловушки? Я извиняюсь за свое невежество, но я действительно новичок в этом и пытаюсь понять проблему.   -  person Trixie the Cat    schedule 16.03.2018
comment
наш профессор дал нам такую ​​подсказку: software_trap_number представляет собой целое число без знака от 0 до 127 (7 бит)... и бит 11 TBR установлен в '1', чтобы указать, что ловушка была вызвана... Пример: если Регистр TBR установлен на 0xFF000000, и ваш вызов ловушки - это ta 4, чтобы вызвать ловушку 4 в вашем списке ловушек. 10 - 4 устанавливается в целое число без знака 4 0000100...   -  person Trixie the Cat    schedule 16.03.2018
comment
... биты 3-0 по определению установлены в «0», что позволяет вам использовать только 4 инструкции для вашей фактической процедуры ловушки ... поэтому ваша процедура ловушки должна переходить к подпрограмме и обратно, прежде чем вернуться к вашей основной программе. Пример: окончательный сгенерированный адрес для 'ta 4' будет 0xFF000840... это адрес в памяти, куда необходимо записать код ловушки, чтобы успешно перейти сюда и вернуться.   -  person Trixie the Cat    schedule 16.03.2018