Программирование на языке ассемблера.pptx
- Количество слайдов: 28
Программирование на языке ассемблера
Все процессы в машине на аппаратном уровне приводятся в действие только командами (инструкциями) машинного языка. Язык ассемблера – это символическое представление машинного языка.
РЕГИСТРЫ Это специальные ячейки памяти, расположенные непосредственно в процессоре. Делятся на: 1. Регистры общего назначения 2. Индексные регистры 3. Сегментные регистры 4. Регистры состояния и управления
РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ Названия регистров происходят от их назначения: EAX (Accumulator register) EBX (Base register) ECX (Counter register) EDX (Data register) Пример
ИНДЕКСНЫЕ РЕГИСТРЫ ESI (Source Index) – индекс источника EDI (Destination Index) – индекс приемника EBP (Base Pointer) – указатель базы
СЕГМЕНТНЫЕ РЕГИСТРЫ CS (Code Segment) SS (Stack Segment) DS (Data Segment) ES (Extra Segment) FS (F Segment) GS (G Segment)
РЕГИСТРЫ СОСТОЯНИЯ И УПРАВЛЕНИЯ ESP EIP (Stack Pointer) (Instruction Pointer) EFLAGS
ФЛАГИ Флаг – это бит, принимающий значение 1 ( «флаг установлен» ), если выполнено некоторое условие, и значение 0 ( «флаг сброшен» ) в противном случае.
ФЛАГИ
ФЛАГИ
ФЛАГИ
ФЛАГИ СОСТОЯНИЯ Флаги состояния (биты 0, 2, 4, 6, 7 и 11) отражают результат выполнения арифметических инструкций, таких как ADD, SUB, MUL, DIV.
ЦЕЛЫЕ ЧИСЛА В программе на языке ассемблера целые числа могут быть записаны в двоичной, восьмеричной, десятичной и шестнадцатеричной СС. Для задания СС в конце числа ставится буква b, o/q, d или h соответственно. Шестнадцатеричные числа, которые начинаются с «буквенной» цифры, должны предваряться нулём, иначе компилятор не сможет отличить число от идентификатора.
СИМВОЛЬНЫЕ ДАННЫЕ Символы и строки в языке ассемблера могут заключаться в апострофы или двойные кавычки.
КОММЕНТАРИИ Комментарии в языке ассемблера начинаются с символа «точка с запятой» и могут начинаться как в начале строки, так и после команды.
ДИРЕКТИВЫ ОПРЕДЕЛЕНИЯ ДАННЫХ Команды языка ассемблера оперируют объектами, существующими в оперативной памяти, т. е. байтом и его производными. DB (define byte) – определяет переменную размером в 1 байт DW (define word) – определяет переменную размером в 2 байта (слово) DD (define double word) – определяет переменную размером в 4 байта (двойное слово) . . .
КОМАНДЫ Команда языка ассемблера – это символьная форма записи машинных команд. Команды имеют следующий синтаксис: [<метка>: ] <мнемокод> [<операнды>] [; <комментарий>]
ОПЕРАНДЫ КОМАНД В качестве операндов команд языка ассемблера могут использоваться: Регистры Непосредственные Ячейки памяти операнды – константы
КОМАНДА MOV Одна из основных команд языка ассемблер – это команда пересылки. Синтаксис команды: MOV <операнд 1>, <операнд 2> По команде MOV значение второго операнда записывается в первый. Операнды должны иметь одинаковый размер. Команда не меняет флаги.
КОМАНДЫ СЛОЖЕНИЯ И ВЫЧИТАНИЯ Команда ADD складывает операнды и записывает их сумму на место первого операнда. ADD <операнд 1>, <операнд 2> Команда SUB вычитает из первого операнда второй и записывает полученную разность на место первого операнда. SUB <операнд 1>, <операнд 2> Операнды должны иметь одинаковый размер. Команды меняют флаги AF, CF, OF, PF, SF и ZF.
КОМАНДЫ ИНКРЕМЕНТА И ДЕКРЕМЕНТА Команды инкремента INC и декремента DEC увеличивают и уменьшают на 1 свой операнд. Синтаксис команд: INC <операнд> DEC <операнд> Команды меняют флаги AF, OF, PF, SF и ZF.
КОМАНДА ИЗМЕНЕНИЯ ЗНАКА Синтаксис команды: NEG <операнд> Команда меняет флаги AF, CF, OF, PF, SF и ZF.
КОМАНДА УМНОЖЕНИЯ Для беззнакового умножения используется команда MUL. Синтаксис команды: MUL <операнд> В команде указывается только один операнд – один из сомножителей. Команда меняет флаги CF и OF.
КОМАНДА УМНОЖЕНИЯ Местонахождение второго сомножителя и результата фиксировано, и в команде явно не указывается. Если множитель (операнд) имеет размер: 1 байт, второй сомножитель берётся из регистра AL 2 байта, второй сомножитель берётся из регистра AX 4 байта, второй сомножитель берётся из регистра EAX
КОМАНДА УМНОЖЕНИЯ Если множитель (операнд команды) имеет размер: 1 байт, произведение помещается в регистр AX 2 байта, результат помещается в регистровую пару DX: AX 4 байта, результат помещается в регистровую пару EDX: EAX
КОМАНДА ДЕЛЕНИЯ Для беззнакового деления используется команда DIV. Синтаксис команды: DIV <операнд> В команде указывается только один операнд - делитель. Команда меняет флаги CF и OF.
КОМАНДА ДЕЛЕНИЯ Местоположение делимого и результата для команд деления фиксировано. Если делитель (операнд) имеет размер: 1 байт, делимое берётся из регистра AX 2 байта, делимое берётся из регистровой пары DX: AX 4 байта, делимое берётся из регистровой пары EDX: EAX
КОМАНДА ДЕЛЕНИЯ Поскольку процессор работает с целыми числами, то в результате деления получается сразу два числа – частное и остаток. Эти два числа также помещаются в определённые регистры. Если делитель (операнд) имеет размер: 1 байт, частное помещается в регистр AL, остаток в AH 2 байта, частное – в регистр AX, остаток – в регистр DX 4 байта, частное – в регистр EAX, остаток – в EDX
Программирование на языке ассемблера.pptx