- •Назовите цели и задачи дисциплины. Дайте определение понятиям ‘программы’, ‘программное обеспечение’, ‘системное программирование’. Перечислите и опишите этапы подготовки программы.
- •Перечислите команды работы с битами. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд работы с битами.
- •Перечислите команды загрузки элемента цепочки в аккумулятор. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд загрузки элемента цепочки в аккумулятор.
- •Перечислите команды циклического сдвига. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд циклического сдвига.
- •Дайте определение понятия «синтаксис ассемблера» как правила написания программных кодов. Представьте формат предложения ассемблера. Представьте общий формат команд и макрокоманд ассемблера.
- •Обоснуйте необходимость организации циклов. Перечислите средства организации циклов. Опишите способы организации циклов. Приведите примеры использования команд организации циклов.
- •Дайте определение понятия «директива» в ассемблере. Представьте общий формат директив ассемблера. Перечислите существующие директивы.
- •Перечислите этапы создания программы на языке ассемблера. Опишите результат, получаемый на каждом этапе от редактирования до отладки. Отобразите на схеме все этапы процесса разработки программы.
- •Компоновка программы
- •Дайте определение понятия “операнд”. Приведите классификацию операндов, поддерживаемых транслятором ассемблера. Поясните на примерах каждый перечисленный пункт классификации.
- •Перечислите возможные типы операторов ассемблера. Опишите синтаксические правила формирования выражений ассемблера. Приведите примеры, поясняющие правила формирования выражений.
- •Приведите синтаксис директивы 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».
- •Назовите этапы трансляции. Опишите общую схему работы компилятора.
- •Дайте понятие прохода. Назовите отличия многопроходных трансляторов от однопроходных. Укажите, от чего зависит количество проходов.
Перечислите команды сложения и вычитания двоичных чисел. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры сложения и вычитания двоичных чисел.
Команды сложения: add, adc, inc.
Команды вычитания: sub, sbb, dec.
Синтаксис:
adc приемник,источник
Сложение двух операндов с учетом переноса из младшего разряда. С помещение результата в приёмник.
add приемник,источник
Сложение двух операндов источник и приемник размерностью байт, слово или двойное слово. С помещение результата в приёмник.
inc приемник
Команда INC увеличивает приемник (регистр или переменная) на 1.
sub операнд_1,операнд_2
Целочисленное вычитание из операнда_1 операнд_2, с помещение результата в операнд_1.
sbb операнд_1,операнд_2
Целочисленное вычитание с учетом результата предыдущего вычитания командами sbb и sub (по состоянию флага переноса cf), с помещение результата в операнд_1.
dec приемник
Команда DEC уменьшает приемник (регистр или переменная) на 1.
Примеры:
add eax, ecx
adc edx, ebx
sub eax, ecx
sbb edx, ebx
inc eax
dec ebx
Перечислите способы передачи аргументов в процедуру. Опишите способ передачи аргументов через стек. Перечислите достоинства и недостатки данного способа. Приведите пример передачи аргументов в процедуру через стек.
Способы передачи аргументов в процедуру: через область памяти, через стек, через регистры, и с помощью extern и public.
Передача аргументов через стек при вызове процедур используется наиболее часто. Суть этого способа заключается в том, что вызывающая процедура самостоятельно заносит в стек передаваемые данные, после чего обращается к вызываемой процедуре.
Достоинством является простота передачи(командой PUSH).
Недостатком является то, что неправильная работа со стеком приведёт к краху программы.
Перечислите логические команды языка ассемблер. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования логических команд.
логические команды языка ассемблер: not, and, or, xor, not, test.
Синтаксис:
not операнд
and операнд_1, операнд_2
or операнд_1, операнд_2
xоr операнд_1, операнд_2
test операнд_1, операнд_2
not — операция логического отрицания. Команда выполняет поразрядное инвертирование (замену значения на обратное) каждого бита операнда. Результат записывается на место операнда.and — операция логического умножения. Команда выполняет поразрядно логическую операцию И (конъюнкцию) над битами операндов операнд_1 и операнд_2. Результат записывается на место операнд_1.or — операция логического сложения. Команда выполняет поразрядно логическую операцию ИЛИ (дизъюнкцию) над битами операндов операнд_1 и операнд_2. Результат записывается на место операнд_1.xоr — операция логического исключающего сложения. Команда выполняет поразрядно логическую операцию исключающего ИЛИ над битами операндов операнд_1 и операнд_2. Результат записывается на место операнд_1.test — операция проверки (способом логического умножения). Команда выполняет поразрядно логическую операцию И над битами операндов операнд_1 и операнд_2.
Пример:
xor eax,eax - обнуление регистра
and ax,mask_
or bx,mask_
xor dx,mask_
not ax
Перечислите команды пересылки цепочек. Опишите синтаксис каждой команды и принцип ее работы. Опишите результат использования префиксов повторения. Приведите примеры использования команд пересылки цепочек.
MOOVS - это команда копирует байт, слово или двойное слово цепочки источника в цепочку приемник размер пересылаемых элементов определяется исходя из атрибутов - идентификатора. Команда присылает только один элемент исходя из его типа и модифицирует значение регистров ESI/SI, EDI/Di.Для пересылки не одного элемента необходимо использовать префикс повторения REP. И загрузить в счетчик регистр CX/ECX число пересылаемых элементов порядок действий который необходимо выполнить для пересылки последовательности элементов из одной области памяти в другую с помощью команды MOOVS:Синтаксис команды MOOVS адрес приёмника, адрес источника. MOOVS может работать с цепочками элементов любой длины.
Опишите принцип использования процедуры в ассемблере: цель использования процедуры, синтаксис описания процедуры, размещение в тексте программы, вызов процедуры, технология отработки. Приведите пример использования процедуры.
Процедура или подпрограмма — это основная функциональная единица декомпозиции некоторой задачи. Процедура представляет собой группу команд для решения конкретной подзадачи и обладает средствами получения управления из точки вызова задачи более высокого уровня и возврата управления в эту точку.
Синтаксис:
имя_процедуры proc
тело_процедуры
имя_процедуры endp
Процедура может размещаться в любом месте программы
Команда CALL осуществляет вызов процедуры (подпрограммы). Синтаксис команды:
call [модификатор] имя_процедуры
Технология обработки:
1) Происходит вызов процедуры с помощью команды CALL
2)Выполняются действия(тело процедуры)
3) Команда RET считывает адрес возврата из стека и загружает его в регистры CS и EIP/IP, тем самым возвращая управление на команду, следующую в программе за командой CALL
Пример:
.data
.code
my_proc procnear
ret
my_proc endp
start:
end start