Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы по ЛР5_8 Рейтинг 2 СП - ответы.doc
Скачиваний:
1
Добавлен:
16.09.2019
Размер:
77.82 Кб
Скачать
  1. Что такое PSP? Его основные данные. Образ программы в памяти начинается с префикса программного сегмента (Program Segment Prefics, PSP), образуемого и заполняемого системой. Он всегда имеет размер 256 байт и содержит таблицы и поля данных, используемые системой в процессе выполнения программы. Основные данные: содержимое вектора прерывания по завершению программы, по команде <CTRL>/c, по критической ошибке; сегментный адрес блока памяти с окружением данного процесса, блоки управления файлами (№1, №2), хвост команды, дисковая область передачи данных.

  2. Для каких целей PSP может использоваться в программах? Получение параметров переданных в хвосте команды, исследование содержимого вектора прерываний, доступ к переменным окружения и т.п.

  3. Какая информация хранится в PSP и как с ней работать? Основные данные: содержимое вектора прерывания по завершению программы, по команде <CTRL>/c, по критической ошибке; сегментный адрес блока памяти с окружением данного процесса, блоки управления файлами (№1, №2), хвост команды, дисковая область передачи данных. Работать с ней можно считывая по байтам содержимое PSP (CS:81h – параметры командной строки, CS:2CH доступ к параметрам окружения DOS и т.п.).

  4. Как можно узнать число байт введенных параметров в командной строке? В байте по адресу CS:80h находится длина хвоста без учета завершающего команду кода 13.

  5. Доп. Как можно определить число введенных параметров? Количество параметров командной строки можно определить, исследуя содержимое символьной строки, которая располагается после 80h. Если параметры разделены пробелом, то, разделив строку на лексемы, удалением пробела, получим что число лексем равно числу параметров.

  6. Где можно получить информацию о структуре PSP? В справочнике.

  7. Как выполнить доступ к PSP в *.COM файле? С помощью прерывания INT 21h, AH = 51h.

  8. Как выполнить доступ к PSP в *.EXE файле? С помощью прерывания INT 21h, AH = 51h или в начале программы можно воспользоваться значениями, находящимися в ES и DS.

  9. Поясните работу команд CALL и RET с учетом изменения и использования стека? CALL позволяет делать передачу управления процедурам внутри текущего сегмента кода (ближний указатель) и в другом сегменте кода с помощью дальнего вызова (дальний указатель). RET позволяет возвращать управление по ближнему или дальнему указателю. Инструкция RET позволяет программе увеличивать указатель стека во время возвращения управления, чтобы освободить параметры из стека. В стек кладутся указатели на адрес команды, следующей за командой вызова. При выполнении команды RET из стека берётся адрес следующей за командой CALL командой.

  10. Доп. Как можно использовать в программе счетчик команд – оперативной памяти ($)? Для этого используется оператор $, который возвращает текущее значение счётчика команд. List DB 10, 20, 30, 40 ; ListSize = ($ - List) ;– смещение команды относительно начала сегмента.

  11. Чем отличаются *.Com и *.Exe исполнимые файлы, построенные Ассемблером? com файлы односегментные, а exe многосегментные. Максимальный размер com файла ограничен 64кб, а exe неограничен.

  12. Какие классы прерываний Вы знаете? Аппаратные и программные.

  13. Каким символом разделяются отдельные параметры при запуске программ? Пробелом.

  14. Какое максимальное число параметров можно задать в командной строке (вычислите)? 128 байт – 1 (пробел) = 127 байт; Делим 127 пополам, т.к. у каждого параметра есть свой пробел. 127/2 = 63.5, округляем в меньшую сторону => 63 параметра.

  15. Как Вы определили число параметров в своей программе? Поделил строку с параметрами на лексемы. Количество лексем – количество параметров.

  16. Что такое БНФ и как ее используют программисты? Форма Бэкуса—Наура (сокр. БНФ, Бэкуса—Наура форма) — формальная система описания синтаксиса, в которой одни синтаксические категории последовательно определяются через другие категории. БНФ используется для описания контекстно-свободных формальных грамматик. Используется для формального описания синтаксиса программы.

  17. Доп. Какие данные из PSP Вы можете использовать в своих программах? Основные данные: содержимое вектора прерывания по завершению программы, по команде <CTRL>/c, по критической ошибке; сегментный адрес блока памяти с окружением данного процесса, блоки управления файлами (№1, №2), хвост команды, дисковая область передачи данных.

  18. Какие виды прерываний Вы знаете?

  19. В чем главное отличие программных и аппаратных прерываний? Программные прерывания происходят вследствие результата выполнения части программы (например, поделили на ноль), а аппаратные происходят вследствие появления сигнала от какой-либо микросхемы.

  20. Как сделать прерывания недоступными? С помощью команды CLI ;(IF = 0). В результате аппаратные прерывания запрещены.

  21. Поясните работу команд INT и IRET с учетом изменения и использования стека? Генерирует программное прерывание и передает управление процедуре операционной системы для его обработки. При этом перед вызовом процедуры сбрасывается флаг прерывания if, а в стек помешаются текущие значения флагов, регистров CS и IP. Завершает работу процедуры обработки прерывания и возвращает управление в прерванную программу. При этом из стека извлекаются значения регистров (E)IP, CS и флагов.

  22. Как выполнить доступ к PSP в *.COM файле?

  23. Как выполнить доступ к PSP в *.EXE файле?

  24. Где можно получить информацию о структуре PSP?

  25. Как сделать прерывания снова доступными? STI ; (IF = 1 ). В результате аппаратные прерывания разрешены.

Лр 7 (с повторами для каждого варианта)

  1. Поясните назначение регистров: CS, DS, SS и ES. Эти сегментные регистры содержат селекторы 16-битных сегментов. Селектор сегмента это специальный указатель, который определяет сегмент в памяти. CS – регистр для сегмента кода, DS, ES – для сегмента данных, SS – для сегмента стека.

  2. Поясните назначение регистров: IP, BP, SP, DI и SI. IP – instruction pointer, содержит адрес команды, BP – указатель на данные в стеке, SP – указатель на вершину стека, DI – указатель назначения для операций со строками или указатель назначения в сегменте (ES), SI – указатель источника для операций со строками или указатель на данные в сегменте (DS).

  3. Поясните назначение регистров: AX, BX, CX и DX. AX – аккумулятор для операндов и результатов, BX – указатель на данные в DS, CX – счётчик для операций со строками и циклов, DX – указатель для ввода и вывода.

  4. Что такое короткий адрес (NEAR)? Короткий адрес – адрес смещения, относительно начала сегмента, без указания самого сегмента.

  5. Что такое длинный адрес (FAR)? Длинный адрес – адрес, состоящий из пары сегмент:смещение.

  6. Как в отладчике посмотреть содержимое стека? В TD: F10->View->Stack

  7. Доп. Как в отладчике посмотреть содержимое оперативной памяти? В TD: F10->View->Dump

  8. Как получить адрес и местоположение PSP? INT 21h, AH = 51h

  9. Какие регистры МП управления вы знаете? Их назначение? AX, BX, CX, DX, CS, DS, SS, ES, IP, BP, SP, DI, SI, FLAGS (CF, PF, ZF, AF, SF, OF, IF, RF…)

  10. Для чего нужны сегментные регистры? Перечислите их. CS, DS, SS и ES. Эти сегментные регистры содержат селекторы 16-битных сегментов. Селектор сегмента это специальный указатель, который определяет сегмент в памяти. CS – регистр для сегмента кода, DS, ES – для сегмента данных, SS – для сегмента стека.

  11. Как в отладчике выполнить анализ выполняемой команды? Что для этого нужно сделать?

  12. Как запустить компилятор без формирования отладочной информации? Компилировать без ключа /zi.

  13. Как запустить TLINK (или LINK) без формирования отладочной информации? Не прописывать /v.

  14. Для чего нужна утилита make.exe? Как ее использовать? Определяет, какие части программы нужно перекомпилировать и посылает команды, которые перекомпилируют эти части. Для её использования нужно прописать необходимые параметры и список файлов для сборки.

  15. Какие шаги нужно выполнить для формирования исполнимого модуля на Ассемблере? Скомпилировать программу из исходного кода, а потом преобразовать объектный код в исполняемый файл с помощью редактора связей.

  16. Доп. Как при редактировании связей подключить объектные модули (*.obj) из библиотеки Перечислить список модулей в качестве параметров редактора связей.

  17. Как определить в программе на языке Ассемблера адрес выполняемой команды? В CS:IP находится адрес выполняемой команды.

  18. Поясните назначение регистров: CS, DS, SS и ES.

  19. Поясните назначение регистров: IP, BP, SP, DI и SI.

  20. Поясните назначение регистров: AX, BX, CX и DX.

  21. Доп. Как запустить TASM (или MASM) без формирования отладочной информации? Без /zi

  22. Как запустить TASM (или MASM) c формированием отладочной информации? /zi

  23. Доп. Как запустить TLINK (или LINK) без формирования отладочной информации? Без /v

  24. Как запустить TLINK (или LINK) c формированием отладочной информации? С /v

  25. Для чего в программе и как заноситься регистр DS? Регистр, содержащий селектор 16-битного сегмента. Относительно него вычисляются смещения по умолчанию. Заносится с помощью регистра общего назначения или стека. MOV AX, DATA ; MOV DS, AX