- •Назовите цели и задачи дисциплины. Дайте определение понятиям ‘программы’, ‘программное обеспечение’, ‘системное программирование’. Перечислите и опишите этапы подготовки программы.
- •Перечислите команды работы с битами. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд работы с битами.
- •Перечислите команды загрузки элемента цепочки в аккумулятор. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд загрузки элемента цепочки в аккумулятор.
- •Перечислите команды циклического сдвига. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд циклического сдвига.
- •Дайте определение понятия «синтаксис ассемблера» как правила написания программных кодов. Представьте формат предложения ассемблера. Представьте общий формат команд и макрокоманд ассемблера.
- •Обоснуйте необходимость организации циклов. Перечислите средства организации циклов. Опишите способы организации циклов. Приведите примеры использования команд организации циклов.
- •Дайте определение понятия «директива» в ассемблере. Представьте общий формат директив ассемблера. Перечислите существующие директивы.
- •Перечислите этапы создания программы на языке ассемблера. Опишите результат, получаемый на каждом этапе от редактирования до отладки. Отобразите на схеме все этапы процесса разработки программы.
- •Компоновка программы
- •Дайте определение понятия “операнд”. Приведите классификацию операндов, поддерживаемых транслятором ассемблера. Поясните на примерах каждый перечисленный пункт классификации.
- •Перечислите возможные типы операторов ассемблера. Опишите синтаксические правила формирования выражений ассемблера. Приведите примеры, поясняющие правила формирования выражений.
- •Приведите синтаксис директивы 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».
- •Назовите этапы трансляции. Опишите общую схему работы компилятора.
- •Дайте понятие прохода. Назовите отличия многопроходных трансляторов от однопроходных. Укажите, от чего зависит количество проходов.
Перечислите команды работы с битами. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд работы с битами.
Команды работы с битами: bsf, bsr, ВТ, BTS, BTR, ВТС.
Синаксис:
bsf операнд_1, операнд_2
bsr операнд_1,операнд_2
bt операнд, смещение_бита
bts операнд, смещение_бита
btr операнд, смещение_бита
btc операнд, смещение_бита
bsf — сканирование битов вперед.
bsr — сканирование битов в обратном порядке.
Команда проверки бита ВТ (Bit Test) переносит значение бита в флаг CF Команда проверки и установки бита BTS переносит значение бита в флаг CF и затем устанавливает проверяемый бит в 1. Команда проверки и сброса бита BTR переносит значение бита во флаг CF и затем устанавливает этот бит в 0.
Команда проверки и инвертирования бита ВТС переносит значение бита в флаг CF и затем инвертирует значение этого бита.
Пример:
bsf bx,ax
bsr bx,ax
bt ax,5
mov ax,10
bts pole,ах
Перечислите основные типы данных микропроцессора. Опишите каждый тип с точки зрения размерности и с точки зрения разрядности. Сформулируйте основной принцип хранения данных для микропроцессоров Intel. Поясните этот принцип на конкретном примере.
При программировании на языке ассемблера используются данные следующих типов:
Непосредственные данные, представляющие собой числовые или символьные значения, являющиеся частью команды. Формируются программистом в процессе написания программы для конкретной команды ассемблера.
Данные простого типа, описываемые с помощью ограниченного набора директив резервирования памяти, позволяющих выполнить самые элементарные операции по размещению и инициализации числовой и символьной информации. Размерность: байт — восемь последовательно расположенных битов, пронумерованных от 0 до 7, при этом бит 0 является самым младшим значащим битом; слово — последовательность из двух байт, имеющих последовательные адреса. Размер слова — 16 бит; биты в слове нумеруются от 0 до 15. Байт, содержащий нулевой бит, называется младшим байтом, а байт, содержащий 15-й бит - старшим байтом; двойное слово — последовательность из четырех байт (32 бита), расположенных по последовательным адресам. Нумерация этих бит производится от 0 до 31; учетверенное слово — последовательность из восьми байт (64 бита), расположенных по последовательным адресам. Нумерация бит производится от 0 до 63.Разрядность:Целый тип со знаком — двоичное значение со знаком, размером 8, 16 или 32 бита. Целый тип без знака — двоичное значение без знака, размером 8, 16 или 32 бита. Цепочка — представляющая собой некоторый непрерывный набор байтов, слов или двойных слов максимальной длины до 4 Гбайт.
Данные сложного типа, строятся на основе базовых типов и позволяют несколько сгладить различия между языками высокого уровня и ассемблером. Массив - структурированный тип данных, состоящий из некоторого числа элементов одного типа.Структура — это тип данных, состоящий из фиксированного числа элементов разного типа.Объединение — тип данных, позволяющий трактовать одну и ту же область памяти как имеющую разные типы и имена. Запись — структурный тип данных, состоящий из фиксированного числа элементов длиной от одного до нескольких бит. Микропроцессоры Intel имеют важную особенность : младший байт всегда хранится по меньшему адресу. Адресом слова считается адрес его младшего байта. Адрес старшего байта может быть использован для доступа к старшей половине слова.
Пример:
число 256
2 - будет в старшем байте
56 в младшем байте
Дайте определения понятий «адрес» и «указатель» с точки зрения программы на ассемблере. Перечислите команды работы с адресами и указателями. Опишите синтаксис каждой команды и принцип ее работы. Приведите примеры использования команд работы с адресами и указателями.
Адрес- метод указания на ячейку памяти, к которой производится доступ. Адресация может быть: абсолютная; сегментная; относительная; косвенная; индексная; непосредственная; регистровая. Указатель - переменная, диапазон значений которой состоит из адресов ячеек памяти и специального значения - нулевого адреса. Значение нулевого адреса не является реальным адресом и используется только для обозначения того, что указатель в данный момент не может использоваться для обращения ни к какой ячейке памяти. Команды работы с адресами и указателями: lea, lds, les, lgs, lfs, lss.
lea назначение,источник — загрузка эффективного адреса;
lds назначение,источник — загрузка указателя в регистр сегмента данных ds;
les назначение,источник — загрузка указателя в регистр дополнительного сегмента данных es; lgs назначение,источник — загрузка указателя в регистр дополнительного сегмента данных gs; lfs назначение,источник — загрузка указателя в регистр дополнительного сегмента данных fs; lss назначение,источник — загрузка указателя в регистр сегмента стека ss.
Пример:
.data
str_1 db ‘Ассемблер — базовый язык компьютера’
full_pnt dd str_1
.code
start:
lea si,str_1
les bx,full_pnt
end start
Перечислите регистры общего назначения для микропроцессоров архитектуры IA-32. Укажите разрядность перечисленных регистров. Охарактеризуйте каждый регистр с точки зрения его использования и функционального назначения.
eax/ax/ah/al (Accumulator register) — аккумулятор. Применяется для хранения промежуточных данных. В некоторых командах использование этого регистра обязательно; ebx/bx/bh/bl (Base register) — базовый регистр. Применяется для хранения базового адреса некоторого объекта в памяти; ecx/cx/ch/cl (Count register) — регистр-счетчик. Применяется в командах, производящих некоторые повторяющиеся действия. Его использование зачастую неявно и скрыто в алгоритме работы соответствующей команды. edx/dx/dh/dl (Data register) — регистр данных. Так же, как и регистр eax/ax/ah/al, он хранит промежуточные данные.
Следующие два регистра используются для поддержки так называемых цепочечных операций: esi/si (Source Index register) — индекс источника. Этот регистр в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике; edi/di (Destination Index register) — индекс приемника (получателя). Этот регистр в цепочечных операциях содержит текущий адрес в цепочке-приемнике.
Для работы со стеком: esp/sp (Stack Pointer register) — регистр указателя стека. Содержит указатель вершины стека в текущем сегменте стека. ebp/bp (Base Pointer register) — регистр указателя базы кадра стека. Предназначен для организации произвольного доступа к данным внутри стека.
Большинство из них могут использоваться при программировании для хранения операндов практически в любых сочетаниях.
Перечислите команды сканирования цепочек. Опишите синтаксис каждой команды и принцип ее работы. Опишите результат использования префиксов повторения. Приведите примеры использования команд сканирования цепочек.
К-ды, реализующие эту операцию, производят поиск некоторого значения в области памяти, эта область рассматривается как последовательность (цепочка) элементов фиксированной длины размером 8, 16, 32 бита. Микропроцессор предоставляет 4-ре к-ды сканирования цепочки. Выбор к-ды определяется размером элемента: сканировать цепочку scas адрес_приемника
сканировать цепочку байт scasb адрес_приемника С к-дой scas удобно использовать префиксы: repe и repz - если необходимо организовать поиск до тех пор, пока не будет достигнут конец цепочки (содержимое ecx/cx равно нулю); в цепочках встретился элемент, отличный от элемента в регистре al/ax/eax. repne или repnz - если нужно организовать поиск до тех пор, пока: не будет достигнут конец цепочки (содержимое ecx/cx равно нулю); в цепочке встретился элемент, совпадающий с элементом в регистре al/ax/eax.
Перечислите сегментные регистры для микропроцессоров архитектуры IA-32. Укажите разрядность перечисленных регистров. Определите функциональное назначение каждого из регистров.
6 сегментных регистров: cs, ss, ds, es, gs, fs. Микропроцессор аппаратно поддерживает структурную организацию программы в виде трех частей, называемых сегментами. Для того чтобы указать на сегменты, к которым программа имеет доступ в конкретный момент времени, и предназначены сегментные регистры. Микропроцессор поддерживает следующие типы сегментов: Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит регистр cs (code segment register) — сегментный регистр кода. Он содержит адрес сегмента с машинными командами, к которому имеет доступ микропроцессор (то есть эти команды загружаются в конвейер микропроцессора). Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр ds (data segment register) — сегментный регистр данных, который хранит адрес сегмента данных текущей программы. Сегмент стека. Этот сегмент представляет собой область памяти, называемую стеком. Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Для доступа к этому сегменту служит регистр ss (stack segment register) — сегментный регистр стека, содержащий адрес сегмента стека. Дополнительный сегмент данных. Неявно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в сегментном регистре ds. Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных. Но в отличие от основного сегмента данных, адрес которого содержится в сегментном регистре ds, при использовании дополнительных сегментов данных их адреса требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах es, gs, fs (extension data segment registers).