1. Дать определения понятий: а) Абсолютный адрес б) Неявный операнд в) Близкий переход 2. В ЭВМ типа УМ-2 используется расслоение памяти на 16 банков, причём ячейка с номером A попадает в банк с номером (A mod 16). Также используется конвейер из 6 этапов: 1) Чтение команды 2)Дешифровка команды 3) Чтение первого операнда 4) Чтение второго операнда 5) Выполнение команды 6) Запись результата (на место первого операнда). Считая, что каждый этап работы конвейера занимает 1 единицу времени и в первоначальный момент времени крнвейер пуст, вяснить, сколько времени займёт выполнение следующих команд (слева - адреса команд, 01 - код сложения, все числа - шеснадцатиричные): 0000: 01 5411 8073 0001: 01 0148 5411 0002: 01 6691 8073 3. Определить значения флагов SF, CF, OF после выполнения следующих команд: mov AL, -56 add AL, 160 4. T db 256 dup (?) Пусть T - символьная строка переменной длины (длина указана в первом байте и, соответственно, не привышает 255 символов). Выпишите комады (не более 6), которые выполняют следующую задачу: если строка непустая, то записать на место последнего символа букву 'Т' (можно использовать любые регистры). 5. Пусть под сегмент стека в программе отведено 501h байт. Выписать команды (не более 11), которые решают следующую задачу: скопировать всё текущее содержимое стека (непустого) в область памяти, начинающуюся с адреса 31A80h (считать что эта область не пересекается ни с сегментом стека, ни с сегментом команд; можно использовать любые регистры, но нельзя менять SP). 6. Выписать макрос JDIF LN, M (здесь LN - это - последовательность чисел, заданных непосредственно; n>0; M - метка), который осуществляет переход на метку M, если AX отлично от всех отрицательных чисел последовательности или если отрицательных чисел в этой последовательности нет (никакие регистры, кроме AX, использовать нельзя). 7. Вычеркните команды, записанные с ошибкой: div 5 lea BX, [BX] mov ES, DS ;this one I forgot add 800[SI], 15 sub 15[SI], 800 test 11b, CL 8. В программе на Турбо Паскале процедура ... {$F+} procedure P(var С:char); external; ... описана как внешняя. Написать на ассемблерный модуль, в котором была бы описана процедура P, заменяющая символ С на символ chr((ord(С)+1)mod 256) (замечание: в языке Турбо Паскаль ссылки процедуре всегда передаются в виде seg:offs, причём seg записывается в стек первым). 9. Ответьте на следующие вопросы: а) Что такое внешние имена и чем они отличаются от других имён модуля? б) Как ассемблер узнаёт, что какое-то имя является внешним? 10. Пусть даны следующий загрузочный модуль и его загаловок (слева указаны относительные адреса команд; все числа - шеснадцатиричные): (0) XX XX XX XX (4) B8 00 00 8E (8) XX XX XX XX (A) XX XX XX XX Длина программы 17 Точка входа 0:3 Начало и длина сегмента стека: 10 и 7 Таблица перемещаемых адресов: сегмент адрес вхождения 10 0:5 Пусть загрузчик выделил для программы область памяти, начинающуюся с адреса 27000h. Указать, какие изменения загрузчик внесёт в программу и какие значения он присвоит регистрам SS, SP, CS и IP.