- •Назовите цели и задачи дисциплины. Дайте определение понятиям ‘программы’, ‘программное обеспечение’, ‘системное программирование’. Перечислите и опишите этапы подготовки программы.
- •Перечислите команды работы с битами. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд работы с битами.
- •Перечислите команды загрузки элемента цепочки в аккумулятор. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд загрузки элемента цепочки в аккумулятор.
- •Перечислите команды циклического сдвига. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд циклического сдвига.
- •Дайте определение понятия «синтаксис ассемблера» как правила написания программных кодов. Представьте формат предложения ассемблера. Представьте общий формат команд и макрокоманд ассемблера.
- •Обоснуйте необходимость организации циклов. Перечислите средства организации циклов. Опишите способы организации циклов. Приведите примеры использования команд организации циклов.
- •Дайте определение понятия «директива» в ассемблере. Представьте общий формат директив ассемблера. Перечислите существующие директивы.
- •Перечислите этапы создания программы на языке ассемблера. Опишите результат, получаемый на каждом этапе от редактирования до отладки. Отобразите на схеме все этапы процесса разработки программы.
- •Компоновка программы
- •Дайте определение понятия “операнд”. Приведите классификацию операндов, поддерживаемых транслятором ассемблера. Поясните на примерах каждый перечисленный пункт классификации.
- •Перечислите возможные типы операторов ассемблера. Опишите синтаксические правила формирования выражений ассемблера. Приведите примеры, поясняющие правила формирования выражений.
- •Приведите синтаксис директивы model. Опишите функциональное назначение и принцип ее работы. Перечислите модели памяти с описанием назначения модели и указанием типа кода и типа данных.
- •Назовите команды условного перехода. Укажите источники условия перехода. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд условного перехода.
- •Команды условного перехода(несколько): jcc,jcxz/jecxz, je, jz, jg, jge, jl, jle
- •Приведите структуру машинной команды. Опишите назначение полей машинной команды.
- •Назовите команды сравнения. Опишите синтаксис каждой команды и принцип ее работы. Приведите пример встраивания в код программы на ассемблере команд сравнения. Команды сравнения: cmp, test
- •Назовите виды адресации операндов в памяти и принципы организации каждого вида адресации. Дайте описание синтаксиса каждого вида адресации. Приведите пример каждого вида адресации.
- •Перечислите команды преобразования типов. Приведите синтаксис каждой команды. Приведите примеры использования команд преобразования типов при выполнении арифметических операций.
- •Перечислите команды сложения и вычитания двоичных чисел. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры сложения и вычитания двоичных чисел.
- •Перечислите логические команды языка ассемблер. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования логических команд.
- •Перечислите команды умножения двоичных чисел. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры умножения двоичных чисел.
- •Поясните механизм формирования локальных переменных программы на ассемблере (masm32) при трансляции.
- •Дайте определение понятию «таблица», «прямой табличный доступ». Опишите, как происходит процесс прямого табличного доступа в таблице.
- •Поясните механизм формирования системного времени в среде os Windows.
- •Опишите механизм вызова процедур win32, принадлежащих api-интерфейсу. Приведите пример формирования участка кода программы на ассемблере (masm32) при трансляции.
- •Опишите, как формируется стековый фрейм процедуры. Приведите пример формирования кода программы на ассемблере (masm32) при трансляции.
- •Поясните отличие директив «.Data» и «.Data?» (masm32). Обоснуйте необходимость применения представления данных именно с такими различиями.
- •Опишите функциональное назначение и суть соглашения «stdcall» (masm32).
- •Опишите директиву «model flat» (masm32). Функциональное назначение и принцип ее работы. Перечислите модели памяти с описанием назначения модели и указанием типа кода и типа данных.
- •Поясните механизм формирования локальных переменных программы на ассемблере (masm32) при трансляции.
- •Опишите функциональное назначение и способ представления нуль-терминированной строки в программе на ассемблере (masm32).
- •Поясните механизм воздействия на порядок выполнения инструкций программы на ассемблере (masm32) при использовании директивы «.Start».
- •Назовите этапы трансляции. Опишите общую схему работы компилятора.
- •Дайте понятие прохода. Назовите отличия многопроходных трансляторов от однопроходных. Укажите, от чего зависит количество проходов.
Перечислите команды умножения двоичных чисел. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры умножения двоичных чисел.
Команды MUL и IMUL предназначены для умножения беззнаковых и знаковых двоичных чисел соответственно.
Синтаксис:
mul множитель_1
Команда MUL выполняет умножение содержимого источника и регистра AL, АХ, ЕАХ (в зависимости от размера источника) и помещает результат в АХ, DX:AX, EDX:EAX соответственно.
IMUL источник
Источник (регистр или переменная) умножается на AL, АХ или ЕАХ (в зависимости от размера операнда), и результат располагается в АХ, DX:AX или EDX.EAX соответственно.(Умножение со знаком)
IMUL приемник, источник
Источник (число, регистр или переменная) умножается на приемник (регистр), и результат заносится в приемник.(Умножение со знаком)
IMUL приемник, источник1, источник2
Источник 1 (регистр или переменная) умножается на источник 2 (число), и результат заносится в приемник (регистр). (Умножение со знаком).
Пример:
.data
rez db 45
.code
mov eax,25
mul rez
Перечислите команды безусловного перехода. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд безусловного перехода.
Всего в системе команд микропроцессора есть несколько кодов машинных команд безусловного перехода jmp. Их различия определяются дальностью перехода и способом задания целевого адреса.
Синтаксис команды безусловного перехода:
jmp [модификатор] адрес_перехода
jmp - безусловный переход без сохранения информации о точке возврата.
Адрес_перехода представляет собой адрес в виде метки либо адрес области памяти, в которой находится указатель перехода.
jmp regl6
jmp reg32
Здесь reg16 (reg32) — один из 16- или 32-разрядных регистров адрес, по которому передается управление, должен находиться в одном из этих регистров.
Пример:
L1:
JMP ESI
jmp dword ptr [ESI]
JMP L1
Поясните механизм формирования локальных переменных программы на ассемблере (masm32) при трансляции.
Транслятор генерирует необходимый код пролога, для резервирования необходимого места в стеке, вместе с параметрами и обеспечивает доступ по символьному имени.
Директива LOCAL в описании процедуры задает в кадре стека переменные, локальные для процедуры. Аргументы имеют внутреннее представление в виде отрицательных смещений от регистра BP или EBP.
При определении локальных переменных процедуры используется следующий синтаксис:
LOCAL аргумент [,аргумент] . [=идентификатор]
Назовите API-функции Windows, которые осуществляют вывод форматирование строки в окно. Опишите их формат с указанием передаваемых параметров в функцию и возвращаемого значения. Приведите пример вывода в окно форматированной строки.
Функциия MessageBox. Отображает модальное диалоговое окно, которое содержит системный значок, набор кнопок, а также краткое конкретного приложения сообщения, например, статуса или сведения об ошибке. Окно сообщения возвращает целое число, которое указывает, какую кнопку нажал пользователь HWND - Дескриптор окна владельца окна сообщения должен быть создан. Если этот параметр NULL, окно сообщения не имеет собственника окна. LPCTSTR - Сообщение, которое будет отображаться. Если строка состоит более чем из одной строки, вы можете разделить линии, используя возврата каретки и / или символ перевода строки между каждой строкой. LPCTSTR - Диалоговое окно титул. Если этот параметр NULL, по умолчанию название ошибки. UINT - Содержание и поведение диалогового окна.
Возвращаемые значения
Возвращаемое значение равно нулю, если не хватает памяти для создания окна сообщения.
Если функция завершается успешно, возвращаемое значение является одним из следующих пунктов меню значения, возвращенные диалоговое окно:
IDCANCEL Отмена кнопка была выбрана.
IDNO Нет кнопка была выбрана.
IDOK кнопку ОК был выбран.
IDYES кнопку Да, был выбран.
Пример:
lpBuffForString db 10 dup(?)
lpTitleString db "Resalt: ",0
invoke MessageBox, 0, OFFSET lpBuffForString , OFFSET lpTitleString, MB_OK