ORG 0x0058 ARG1: WORD 0x007F ARG2: WORD 0xFF82 ARG3: WORD 0x00FF ARG4: WORD 0x8001 ARG5: WORD 0x0203 CHECK1: WORD 0xFFFF CHECK2: WORD 0xFFFF CHECK3: WORD 0xFFFF FINAL: WORD 0xFFFF RES1: WORD 0x00FE RES2: WORD 0x8002 RES3: WORD 0x0006 START: CLA CALL TEST1 HLT CALL TEST2 HLT CALL TEST3 HLT LD #0x1 CLC AND CHECK1 AND CHECK2 AND CHECK3 ST FINAL STOP: HLT TEST1: LD ARG1 PUSH LD ARG2 PUSH WORD 0x0F30 HLT POP CMP RES1 BEQ DONE1 ST RES1 POP POP CLA ST CHECK1 RET DONE1: ST RES1 POP POP LD #0x1 ST CHECK1 CLA RET TEST2: LD ARG3 PUSH LD ARG4 PUSH WORD 0x0F30 HLT POP CMP RES2 BEQ DONE2 ST RES2 POP POP CLA ST CHECK2 RET DONE2: ST RES2 POP POP LD #0x1 ST CHECK2 CLA RET TEST3: LD ARG5 PUSH LD ARG5 PUSH WORD 0x0F30 HLT POP CMP RES3 BEQ DONE3 ST RES3 POP POP CLA ST CHECK3 RET DONE3: ST RES3 POP POP LD #0x1 ST CHECK3 CLA RET МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики» ФАКУЛЬТЕТ ПРОГРАММНОЙ ИНЖЕНЕРИИ И КОМПЬЮТЕРНОЙ ТЕХНИКИ ЛАБОРАТОРНАЯ РАБОТА №7 по дисциплине «Основы профессиональной деятельности» Вариант № 3100 Выполнил: Студент группы P3131 Дворкин Борис Александрович Преподаватель: Клименков Сергей Викторович Санкт-Петербург, 2023 г. Содержание Текст задания 3 Описание программы 3 Вывод 6 Таблица трассировки 7 Текст задания Описание программы Назначение программы 1. MULSP - Знаковое умножение младших байтов двух верхних чисел на вершине стека, результат поместить на стек, установить признаки N/Z/V/C 2. Код операции - 0F30 3. Тестовая программа должна начинаться с адреса 006416 Исходный код синтезируемой программы Адрес МП Микрокоманда Описание Комментарий BB 81F0304002 if CR(8) = 1 then GOTO @ F3 Исправленная ячейка интерпретатора F3 0080009008 SP -> AR Первое значение стека F4 0100000000 MEM(AR) -> DR в DR F5 0020009001 DR -> BR Первое значение в BR F6 0080009408 SP + 1 -> AR Второе значение стека F7 0100000000 MEM(AR) -> DR в DR F8 0003809821 BR(mlb) * DR(mlb) -> DR; N, Z, V, C Умножение младших байтов, знаки N, Z, V, C F9 0088009208 ~0 + SP -> SP, AR Результат выражения FA 0200000000 DR -> MEM(AR) в стек FB 80C4101040 GOTO INT @ C4 Переход к циклу прерывания Текст программы на ассемблере ORG 0x0058 ARG1: WORD 0x007F ARG2: WORD 0xFF82 ARG3: WORD 0x00FF ARG4: WORD 0x8001 ARG5: WORD 0x0203 CHECK1: WORD 0xFFFF CHECK2: WORD 0xFFFF CHECK3: WORD 0xFFFF FINAL: WORD 0xFFFF RES1: WORD 0x00FE RES2: WORD 0x8002 RES3: WORD 0x0006 START: CLA CALL TEST1 HLT CALL TEST2 HLT CALL TEST3 HLT LD #0x1 CLC AND CHECK1 AND CHECK2 AND CHECK3 ST FINAL STOP: HLT TEST1: LD ARG1 PUSH LD ARG2 PUSH WORD 0x0F30 HLT POP CMP RES1 BEQ DONE1 ST RES1 POP POP CLA ST CHECK1 RET DONE1: ST RES1 POP POP LD #0x1 ST CHECK1 CLA RET TEST2: LD ARG3 PUSH LD ARG4 PUSH WORD 0x0F30 HLT POP CMP RES2 BEQ DONE2 ST RES2 POP POP CLA ST CHECK2 RET DONE2: ST RES2 POP POP LD #0x1 ST CHECK2 CLA RET TEST3: LD ARG5 PUSH LD ARG5 PUSH WORD 0x0F30 HLT POP CMP RES3 BEQ DONE3 ST RES3 POP POP CLA ST CHECK3 RET DONE3: ST RES3 POP POP LD #0x1 ST CHECK3 CLA RET Вывод В ходе выполнения лабораторной работы я изучил обмен данными с ВУ-1 и ВУ-3 в режиме прерываний, также изучил цикл прерывания и циклы исполнения новых команд. Также закрепил знания в написании программ на ассемблере БЭВМ. Методика проверки программы Проверка обработки прерываний: 1. Загрузить текст программы в БЭВМ. 2. Заменить NOP по нужному адресу на HLT. 3. Запустить программу в режиме РАБОТА. 4. Установить «Готовность ВУ-1». 5. Дождаться останова. 6. Записать текущее значение X из памяти БЭВМ: 1. Запомнить текущее состояние счетчика команд. 2. Ввести в клавишный регистр значение 0x010 3. Нажать «Ввод адреса». 4. Нажать «Чтение». 5. Записать значение регистра данных. 6. Вернуть счетчик команд в исходное состояние. 7. Нажать «Продолжение» 2 раза. 8. Записать результат обработки прерывания – полученное значение F(x) из DR контроллера ВУ-1. 9. Нажать «Продолжение». 10. Ввести в ВУ-3 произвольное число, записать его. 11. Установить «Готовность ВУ-3». 12. Дождаться останова. 13. Записать текущее значение X из памяти БЭВМ: 1. Запомнить текущее состояние счетчика команд. 2. Ввести в клавишный регистр значение 0x010 3. Нажать «Ввод адреса». 4. Нажать «Чтение». 5. Записать значение регистра данных. 6. Вернуть счетчик команд в исходное состояние. 14. Нажать «Продолжение» 2 раза. 15. Записать результат обработки прерывания – DR + X из DR контроллера ВУ-3. 16. Рассчитать ожидаемое значение переменной X после обработки прерывания и сравнить. Проверка основной программы: 1. Загрузить текст программы в БЭВМ. 2. Записать в переменную X максимальное по ОДЗ значение (22) 3. Запустить программу в режиме останова. 4. Пройти нужное количество шагов программы, убедиться, что при уменьшении X на 1, до после момента, когда он равен 2-21, происходит сброс значения в минимальное по ОДЗ. Прерывание ВУ-1 Прерывание ВУ-3 AC (0...7) Ожидание -6*X+3 DR AC (0…7) DR КВУ-3 AC (DR + X) Результат AC (0...7) 1016 (16) FFA316 (-93) FFA316 (-93) 116 (1) (5C)_(16) (127) 5D16 (126) 1616 (22) FF16 (-1) FD16 (-3) FD16 (-3) 116 (1) (7F)_(16) (1) 0016 (0) 016 (0) 1816 (25) 7F16 (127) 7F16 (127) 116 (1) E1(-31) E216 (-32) EВ16 (-21)