1. Дать определения понятий: а) Машинное слово б) Непосредственный операнд в) Дальний переход 2. В ЭВМ типа УМ-3 используется расслоение памяти на 16 банков, причём ячейка с номером A попадает в банк с номером (A mod 16). Также используется конвейер из 6 этапов: 1) Чтение команды 2)Дешифровка команды 3) Чтение первого операнда 4) Чтение второго операнда 5) Выполнение команды 6) Запись результата. Считая, что каждый этап работы конвейера занимает 2 единицы времени и в первоначальный момент времени крнвейер пуст, вяснить, сколько времени займёт выполнение следующих команд (слева - адреса команд, 02 - код сложения, все числа - шеснадцатиричные): 0000: 02 4052 3932 4055 0001: 02 4052 3933 4056 0002: 02 4052 3934 4057 3. Определить значения флагов SF, CF, OF после выполнения следующих команд: mov BH, 150 sub BH, -56 4. S db 256 dup (?) Пусть T - непустая символьная строка переменной длины (длина указана в первом байте и, соответственно, не привышает 255 символов). Выпишите комады (не более 6), которые удаляют последний символ строки, если это буква 'S' (можно использовать любые регистры). 5. Пусть под сегмент стека в программе отведено 1001h байт. Выписать команды (не более 11), которые решают следующую задачу: скопировать всё текущее содержимое стека (непустого) в сегмент A того же размера (считать что эта область не пересекается ни с сегментом стека, ни с сегментом команд; можно использовать любые регистры, но нельзя менять SP). mov ax,a mov es,ax mov si,0 mov cx,1001h sub cx,sp mov di,sp push ss pop ds rep movsb 6. Выписать макрос JDIF LV, M (здесь LN - это - последовательность переменных; n>0; M - метка), который осуществляет переход на метку M, если AL отлично от всех байтовых переменных последовательности или если таковые в этой последовательности отсутствуют (никакие регистры, кроме AL, использовать нельзя). JDIF macro LV,M irp p, if (type p) eq BYTE cmp al,p je a endif endm jmp M endm a: endm 7. Вычеркните команды, записанные с ошибкой: ??? 8. В программе на Турбо Паскале процедура ... {$F+} procedure Q(var B:byte); external; ... описана как внешняя. Написать ассемблерный модуль, в котором была бы описана процедура Q, которая присваивает B значение (B*103)mod 256 (замечание: в языке Турбо Паскаль ссылки процедуре всегда передаются в виде seg:offs, причём seg записывается в стек первым). 9. Ответьте на следующие вопросы: а) Что такое общие имена и чем они отличаются от других имён модуля? б) Как ассемблер узнаёт, что какое-то имя является общим? 10. Пусть даны следующий загрузочный модуль и его загаловок (слева указаны относительные адреса команд; все числа - шеснадцатиричные): (0) XX XX XX XX (4) XX XX XX XX (8) XX XX XX XX (A) XX XX XX XX (10) B8 00 00 00 Длина программы 18 Точка входа 10:0 Начало и длина сегмента стека: 0 и 9 Таблица перемещаемых адресов: сегмент адрес вхождения 0 10:1 Пусть загрузчик выделил для программы область памяти, начинающуюся с адреса 44000h. Указать, какие изменения загрузчик внесёт в программу и какие значения он присвоит регистрам SS, SP, CS и IP.