Контрольные вопросы
Раздел 1: «Фундаментальные понятия языка ассемблера»
1. Какие виды ассемблерных строк вы знаете?
2. Чем директива отличается от команды
3. Назначение метки в командной строке. Приведите примеры.
4. Какие два типа идентификаторов вы знаете?
5. Назовите условия, которым должны удовлетворять идентификаторы.
6. Напишите командную строку для трансляции программы MyProg. asm с целью создания объектного кода MyProg. obj, файла листинга MyProg. lst и обеспечения возможности, в дальнейшем, использования файла MyProg. obj в отладчике Turbo Debugger.
7. Напишите командную строку для создания исполняемого кода программы MyProg. exe, файла загрузки MyProg. map c возможностью открытия файла MyProg. exe в отладчике Turbo Debugger.
8. Напишите формат строки листинга.
9. Когда рассчитываются адреса операндов, на этапе трансляции или загрузки?
10. Напишите пару команд для инициализации сегментного регистра данных DS.
11. Определите назначение метки при директиве END, заканчивающей программный код.
12. Какие виды данных ассемблерных программ вы знаете?
13. Назовите директивы инициализации данных в памяти.
14. Назовите атрибуты, которые ассемблер назначает каждой переменной при инициализации её в памяти.
15. Дайте определение фундаментальному понятию расположения многобайтового числа в памяти? Какой байт числа располагается по его адресу?
16. Укажите как байты переменной var_w (тип word) расположатся в регистре ax=ah:al при выполнении команды mov ax,[var_w]
17. Как выполнятся ссылка к отдельным элементам переменной при её множественной инициализации?
18. Инициализируйте строковый литерал и покажите размещение каждого элемента в памяти.
19. Напишите директиву инициализации данных для последовательности из 20 16-разрядных слов, каждое из которых имеет значение 500
20. Переменная Х инициализирована в памяти. Введите переменные У и Z, которые бы определяли соответственно смещение и полный логической адрес переменной Х в памяти.
21. Как можно инициализировать в памяти данных десятичное число в неупакованном формате?
22. В чём заключается различие между макроопределениями EQU и =?
23. Типы выражений в ассемблере. На каком этапе жизненного цикла программы производится их вычисление.
24. Особенности применения арифметических операторов в адресных выражениях.
25. Запишите пример использования счётчика текущего адреса для вычисления размера памяти, занимаемого каким-либо массивом или сообщением.
Раздел 2: «Команды передачи управления и организации циклов»
1. Назовите типы команд, выполняющих безусловные переходы. Дайте характеристику переходов типа short, near и far.
2. Примеры записи команды JMP для прямых и косвенных внутрисегментных переходов.
3. Назовите три типа команд условных переходов
4. Какой флаг используется при сравнении чисел:
а) без знака?
б) со знаком?
5. Какой условный переход используется для проверки содержимого регистра общего назначения?
6. Укажите механизм, на основании которого процессором выполняется команды условных переходов.
7. Какова дистанция перехода в командах условного перехода для 32-разрядных процессоров?
8. Объясните различие между командами:
а) JA и JNBE,
б) JB и JL.
9. Объясните, сколько раз выполняется инструкция LOOP в следующих примерах:
а) mov cx,0 б) mov cx,10 в) mov cx,10
L1: L1: L1:
…. … inc cx
Loop L1 Loop L1 Loop L1
9. Составьте ассемблерный шаблон для условного оператора языка С/С++ if – else.
10. Составьте ассемблерный шаблон для условного оператора языка С/С++ if – else – if.
11. Составьте ассемблерный шаблон для логического переключателя С/С++ switch – case
12. Напишите фрагмент программы, включающий цикл с предусловием, аналогичный оператору while языка С/С++.
13. Напишите фрагмент программы, включающий цикл с предусловием, аналогичный ите команды cmps с префиксом repe/repz рационному циклу for языка С/С++.
Раздел 3: «Команды обработки строк»
1. Каким сегментным регистром должен адресоваться сегмент данных, в котором располагается:
а) строка-источник?
б) строка-приёмник?
2. Какие строковые команды влияют на флаги, а какие нет?
3. Что нужно предпринять при написании программы, если строка источник и строка-приёмник должны располагаться в одном сегменте?
4. Перечислите префиксы повторения строковых команд и их возможные сочетания друг с другом.
5. В какой фазе исполнения команды происходит проверка счётчика на равенство нулю при выполнении:
а) строковой команды с префиксом повторения?
б) команды управления циклом Loop <метка>?
6. Что происходит с исполнением этих команд (строковой с префиксом и команды Loop), если счётчик СХ инициализирован нулём?
7. Укажите на одно из типовых применений пары строковых команд Lodsb и Stosb.
8. Напишите фрагмент программы перемещения блока данных с использованием команды rep movsb.
9. Напишите фрагмент программы с использованием команды сравнения строк cmps с префиксом repe/repz.
Раздел 4: Процедуры и многомодульные программы
1. В чём заключается концепция модульного программирования?
2. Дайте определение процедуры с учётом использования соответствующих директив.
3. Назовите существующие вызовы процедур.
4. Назовите два основных способа передачи данных из программы в процедуру. Дайте их краткую характеристику.
5. Изложите основные конструктивные особенности построения программы и п/программы при передаче последней параметров через стек.
6. Что представляет собой многомодульная программа?
7. Укажите основные синтаксические различия в организации главного модуля от вспомогательных модулей, принадлежащих одной программе?
8. Как вы понимаете принцип локализации переменных в модуле и деление переменных модуля на внутренние и внешние.
9. Как экспортировать из модуля процедуры, числовые константы и переменные в другие модули? Как импортировать в модуль процедуры, числовые константы и переменные из других модулей?
10. Какие преимущества даёт запись объектных модулей в файл библиотеки?
11. Напишите команду, создающую библиотеку mta. lib из объектных модулей a. obj, b. obj и c. obj.
12. Напишите команду создания исполнительного файла программы с главным модулем main. obj, вспомогательные модули которого находятся в библиотеке mylib.
Раздел 5: Прикладные обработчики прерываний (разработка темы курсового проекта)
1. Чем отличается программное прерывание от аппаратного прерывания?
2. Что такое вектор прерывания?
3. Определите физический адрес расположения вектора прерывания для Int 10h?
4. Назовите основные шаги реализации процессором процедуры программного прерывания.
5. Назовите основные особенности организации аппаратных прерываний.
6. Какие формы «сцепления» прикладного и системного обработчиков прерываний вы знаете?
7. Назовите системные средства DOS для получения адреса некоторого вектора прерывания и установки на его место нового вектора.
8. Какое устройство прерывает работу процессора 18,2 раза в секунду? Как этот факт используется для корректировки времени, а также при разработке прикладных обработчиков прерывания?
9. Какие основные структурные элементы можно выделить в прикладных обработчиках прерываний от клавиатуры, просмотрев тексты программ prg3 и prg7 в методическом пособии по КП?
10. Почему необходимо сохранять в прикладном обработчике аппаратных прерываний значения сегментных регистров?
11. Что представляет собой резидентная программа и какие системные функции DOS используются при её разработке?
12. Назовите функции MS DOS, используемые при разработке резидентных программ.
13. Какие типы организации резидентных программ вы знаете?
14. Определите понятие нереентерабельности MS DOS. Какие основные способы преодоления этого недостатка используются при разработке резидентных программ?
15. Основные формы межпрограммных коммуникаций (обмена данными) между резидентом и транзитной программой.


