Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CП_Ответы.doc
Скачиваний:
15
Добавлен:
27.09.2019
Размер:
281.09 Кб
Скачать
  1. Поясните механизм формирования системного времени в среде os Windows.

Системное время считается с 1 января 1500 г. не високосный год, понедельник. Измеряется в микросекундах. И представляет собой счётчик, вычисляющий сколько микросекунд прошло с 1 января 1500 г.

  1. Опишите механизм вызова процедур win32, принадлежащих api-интерфейсу. Приведите пример формирования участка кода программы на ассемблере (masm32) при трансляции.

Механизм вызова процедуры: Команда CALL осуществляет вызов процедуры (подпрограммы).

Синтаксис команды: call [модификатор] имя_процедуры

Технология обработки:

1) Происходит вызов процедуры с помощью команды CALL, а также в стек помещается адрес 1-го байта следующей команды.

2) Выполняются действия(тело процедуры)

3) Команда RET считывает адрес возврата из стека и загружает его в регистры CS и EIP/IP, тем самым возвращая управление на команду, следующую в программе за командой CALL.

Пример:

my_proc proc

...

ret

my_proc endp

start:

call my_proc

end start

.code

start:

call my_proc

  1. Опишите, как формируется стековый фрейм процедуры. Приведите пример формирования кода программы на ассемблере (masm32) при трансляции.

При вызове процедуры аргументы отправляются в стек, и только потом производится вызов подпрограммы. Таким образом, процедура получает стек, на вершине которого лежит адрес возврата, а под ним — аргументы, с которыми она была вызвана.

При возвращении из процедуры аргументы должны быть сняты со стека.

Для формирования фрейма используется пара инструкций push ebp и mov ebp,esp. Далее происходит вычисление следуещего адреса в стеке add esp, -<Размерность>.

Пример:

- Дно стека -

Esp: [...]

[Локальные переменные]

Ebp: [Предыдущее значение регистра Ebp, тоесть ссылка на следующий фрейм]

[Адрес возврата из функции, который сформирован процедурным ветвлением]

[Аргументы функции]

[...]

  1. Поясните отличие директив «.Data» и «.Data?» (masm32). Обоснуйте необходимость применения представления данных именно с такими различиями.

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

.DATA? обычно используется в модулях Ассемблера, которые компонуются с языком высокого уровня. Секция .DATA? менее гибкая, так как данные нельзя инициализировать. Все данные в этой секции не включаются в исполнимый файл, поэтому место только резервируется, но начальные значения не задаются

Секция .DATA наиболее универсальная мы резервируем память под данные и сразу же инициализируем их, т.е. задаём им начальные значения. Все данные из этой секции включаются в исполнимый файл.

Необходимостью применения представления данных именно с такими различиями является то, что нет смысла при трансляции выделять память под данные, значения которых нам ещё не известны.

  1. Опишите функциональное назначение и суть соглашения «stdcall» (masm32).

Суть соглашения:. Соглашение вызова или модель вызова— часть двоичного интерфейса приложений, которая регламентирует технические особенности вызова подпрограммы, передачи параметров, возврата из подпрограммы и передачи результата вычислений в точку вызова.

Функциональное назначение:

Применяется при вызове функций WinAPI, аргументы передаются через стек, справа налево, очистку стека производит вызываемая подпрограмма

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]