Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практикум_по_ассемблеру

.pdf
Скачиваний:
49
Добавлен:
12.03.2016
Размер:
1.9 Mб
Скачать

22 СЕНТЯБРЯ 2015 Г.

ПРАКТИКУМ ПО АССЕМБЛЕРУ

КРАТКИЙ КУРС

ЮРИЙ МИХАЙЛУЦ

ИММИКН ЮФУ Ростов-на-Дону

ПРАКТИКУМ ПО АССЕМБЛЕРУ

 

СОДЕРЖАНИЕ

 

Содержание.................................................................................................................................................................................

1

Что надо знать, перед изучением ассемблера.........................................................................................................................

2

Какие системы счисления использует ассемблер................................................................................................................

2

Понятие системы счисления ..............................................................................................................................................

2

Двоичная..............................................................................................................................................................................

2

Восьмеричная......................................................................................................................................................................

3

Шестнадцатеричная............................................................................................................................................................

3

Как и где программа хранит код и данные...........................................................................................................................

4

Виды памяти ........................................................................................................................................................................

4

ОЗУ........................................................................................................................................................................................

4

Регистры...............................................................................................................................................................................

4

Как программа исполняется ЦПУ...........................................................................................................................................

6

Формат команды.................................................................................................................................................................

6

Конвейер команд ................................................................................................................................................................

6

Instructionpointer (IP)...........................................................................................................................................................

6

Arithmetic and logic unit (ALU).............................................................................................................................................

6

Структура программы на Ассемблере MASM32.......................................................................................................................

6

Комментарии...........................................................................................................................................................................

6

Сегменты..................................................................................................................................................................................

6

Переменные ............................................................................................................................................................................

6

Метки .......................................................................................................................................................................................

7

Инструкции ассемблера .........................................................................................................................................................

7

Основные инструкции ассемблера х86:............................................................................................................................

7

Строковые операции.........................................................................................................................................................

10

FPU......................................................................................................................................................................................

10

MMX....................................................................................................................................................................................

10

SSE.......................................................................................................................................................................................

10

Директивы Ассемблера ........................................................................................................................................................

10

Процедуры.........................................................................................................................................................................

10

Макросы.............................................................................................................................................................................

10

Структуры...........................................................................................................................................................................

11

Реализация высокоуровневых конструкций...................................................................................................................

11

Механизмы работы с Подсистемами ПК ................................................................................................................................

11

Прерывания BIOS...................................................................................................................................................................

11

Клавиатура.........................................................................................................................................................................

11

Вывод на дисплей .............................................................................................................................................................

11

Видео-сервис .....................................................................................................................................................................

11

Прерывания DOS ...................................................................................................................................................................

11

Прерывание 21h. Сервис DOS. .........................................................................................................................................

11

Ввод ....................................................................................................................................................................................

11

Вывод .................................................................................................................................................................................

11

Файловая система .............................................................................................................................................................

11

Работа с ВИДЕОПАМЯТЬЮ ...................................................................................................................................................

11

Выбор режима...................................................................................................................................................................

11

Текстовый режим ..............................................................................................................................................................

11

Графический режим..........................................................................................................................................................

11

Реализация на Ассемблере стандартных алгоритмов...........................................................................................................

11

Поиск максимума / Минимума............................................................................................................................................

11

Из строки в число и обратно ................................................................................................................................................

11

Сортировка.............................................................................................................................................................................

11

Используемая литература ........................................................................................................................................................

12

ЧТО НАДО ЗНАТЬ, ПЕРЕД ИЗУЧЕНИЕМ АССЕМБЛЕРА.

КАКИЕ СИСТЕМЫ СЧИСЛЕНИЯ ИСПОЛЬЗУЕТ АССЕМБЛЕР

Понятие системы счисления

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

Позиционные – этотакие системы счисления, в которых величина, которую обозначает цифра в записи числа, зависит от положения цифры в этом числе. Наиболее известны позиционные системы счисления с основаниями: 2, 3, 8, 10, 16.Для числа ,записанногов позиционной системе счисления с основанием , как « −1 3 2 1 0», значение в другой системе счисления выражается следующей формулой:

−1

=

 

 

 

 

 

 

 

 

=0

 

 

 

Формула (0) позволяет представить число из одной системы счисления в виде суммы чисел, записанных в другой системе счисления.

Двоичная

Как можно заметить из названия, в основании двоичной системы счисления лежит число «2». Это означает, что каждый разряд в такой системе может быть представлен одним из двух символов. Как правило используется {0, 1}. Для двоичной системы счисления формула (0) примет следующий вид:

−1

 

 

=

 

∙ 2 =

 

 

 

 

 

 

 

 

 

 

 

 

=0

 

 

 

=

,2 +

∙ 2−1 + +

∙ 22 +

∙ 21 + ∙ 20

=

 

 

 

2

1

0

 

= 0 + 1 ∙ 2 + 2 ∙ 4 + 3 ∙ 8 +

Двоичная система счисления используется в подавляющем большинстве электронных вычислительных устройств как раз по той причине, что разряд, имеющий всего два состояния, проще всего выразить электрическим сигналом:

0.– нет сигнала.

1.– есть сигнал.

Восьмеричная

Основание восьмеричной системы счисления так же очевидно из её названия – это число «8». Качестве множества цифр, которыми может быть записан один разряд, как правило, используется {0, 1, 2, 3, 4, 5, 6, 7}.Соответственно, формула(0) для восьмеричной системы счисления будет иметь следующий вид:

−1

= ∙ 8 =

=0

=, 8 + ∙ 8 −1 + + 2 ∙ 82 + 1 ∙ 81 + 0 ∙ 80 =

=0 + 1 ∙ 8 + 2 ∙ 64 + 3 ∙ 512 +

Восьмеричная система счисления интересна нам по той причине, что трёхразрядное двоичное число имеет то же множество значений, что и один разряд восьмеричного:

Основание

 

 

 

 

 

 

 

 

 

000

001

010

011

100

101

110

111

 

0

1

2

3

4

5

6

7

Это позволяет нам записывать громоздкие двоичные числа более компактно:

001010 = 12 =10

010111 = 27 =23

110100 = 64 =52

Шестнадцатеричная

Основанием шестнадцатеричной системы счисления является число «16». Это означает, что каждый разряд в такой системе может быть представлен одним из 16 символов. Как правило используется {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}. Формула (0) для шестнадцатеричной системы счисления будет иметь следующий вид:

−1

= ∙ 16 =

=0

=,16 + ∙ 16 −1 + + 2 ∙ 162 + 1 ∙ 161 + 0 ∙ 160 =

=0 + 1 ∙ 16 + 2 ∙ 256 + 3 ∙ 4096 +

КАК И ГДЕ ПРОГРАММА ХРАНИТ КОД И ДАННЫЕ

Виды памяти

Вообще видов памяти можно придумать множество, но тех, которыми ЦПУ может распоряжаться непосредственно, всего три:

1)Оперативная память (ОЗУ). Находится вне ЦПУ, т.е. на отдельной плате. Обладает большим объёмом (единицы

– десятки гигабайт), но относительно невысоким быстродействием. Как правило, имеет структуру линейного массива, номера ячеек, в котором, называются адресами. К ОЗУ можно обращаться непосредственно процессорными инструкциями, указывая адрес ячейки в памяти.

2)КЭШ память. Как правило, расположена на том же кристалле, что и ЦПУ. Имеет, приблизительно, в 1000 - 10000 раз меньший объём, но в 10 - 20 раз большее быстродействие. В каждый момент времени хранит копии тех участки ОЗУ, с которыми ЦПУ, в настоящий момент работает. Управляется автоматически, контроллером памяти ЦПУ. При помощи процессорных инструкций управлять непосредственно КЭШ памятью нельзя.

3)Регистры. Не только расположены на том же кристалле, но и являются частью архитектуры процессора. Обладают самым большим быстродействием. Считать или записать значение в регистр процессор может за один такт. Но регистров относительно мало, суммарный объём регистровой памяти в современных процессорах не превышает нескольких килобайт (включая векторные и служебные регистры). Регистры могут программироваться явно, соответствующими процессорными инструкциями. Так же для выполнения большинства операций процессору нужно, что бы хотя бы один из операндов был предварительно загружен в регистры.

Далее мы будем рассматривать только два из трёх указанных выше видов памяти: ОЗУ и регистры.

ОЗУ

Способы адресации

Несмотря на то, что ОЗУ представляет собой линейный массив, существует несколько способов её адресации. В основном, их наличие связано с необходимостью выделять определённые участки общей памяти для конкретных целей: машинного кода, данных, стека и т.д.

Сегменты

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

Страницы

Способ организации памяти, при котором единицей отображения виртуальных адресов на физические является регион постоянного размера (т. н. страница). Типичный размер страницы - 4096 байт, для некоторых архитектур - до

128 КБ.

Регистры

Регистры общего назначения (РОН)

Регистры данных

Для хранения промежуточных результатов вычислений в процессорах x86 программисту доступно лишь 4 регистра: AX, BX, CX, DX. Все регистры имеют размер по 2 байта. Так же каждый регистр имеет псевдонимы для обращения только к младшему или только к старшему байту:

x8

AL, AH

BL, BH

CL, CH

DL, DH

x16

AX

AX

CX

DX

x32

EAX

EBX

ECX

EDX

Так же каждый

Регистр АХ служит для временного хранения данных (регистр аккумулятор); часто используется при выполнении операций сложения, вычитания, сравнения и других арифметических и логических операции;

Регистр ВХ служит для хранения адреса некоторой области памяти (базовый регистр), а также используется как вычислительный регистр;

Регистр СХ иногда используется для временного хранения данных, но в основном служит счетчиком; в нем хранится число повторений одной команды или фрагмента программы;

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

Регистры указатели

Так же программисту доступны 4 регистра указателя, основным назначением которых является хранение указателя на что-либо.

x16

SI

DI

BP

SP

x32

ESI

EDI

EBP

ESP

Сегментные регистры

CS — регистр программного сегмента (сегмента кода) определяет местоположение части памяти, содержащей программу, т. е. выполняемые процессором команды;

DS — регистр информационного сегмента (сегмента данных) идентифицирует часть памяти, предназначенной для хранения данных;

SS — регистр стекового сегмента (сегмента стека) определяет часть памяти, используемой как системный стек;

ES — регистр расширенного сегмента (дополнительного сегмента) указывает дополнительную область памяти, используемую для хранения данных.

Служебные регистры

IP - Регистр указателя команд. Регистр указателя команд IP, иначе называемый регистром счетчика команд, имеет размер 16 бит и хранит адрес некоторой ячейки памяти – начало следующей команды. Микропроцессор использует регистр IP совместно с регистром CS для формирования 20-битового физического адреса очередной выполняемой команды, при этом регистр CS задает сегмент выполняемой программы, а IР – смещение от начала сегмента. По мере того, как микропроцессор загружает команду из памяти и выполняет ее, регистр IP увеличивается на число байт в команде. Для непосредственного изменения содержимого регистра IP служат команды перехода.

Регистр флагов. Флаги – это отдельные биты, принимающие значение 0 или 1. Регистр флагов (признаков) содержит девять активных битов (из 16). Каждый бит данного регистра имеет особое значение, некоторые из этих бит содержат код условия, установленный последней выполненной командой. Другие биты показывают текущее состояние микропроцессора.

КАК ПРОГРАММА ИСПОЛНЯЕТСЯ ЦПУ

Формат команды Конвейер команд

Instructionpointer (IP) Arithmetic and logic unit (ALU)

СТРУКТУРА ПРОГРАММЫ НА АССЕМБЛЕРЕ MASM32

КОММЕНТАРИИ

Комментарии в MASM32 начинаются с точки с запятой и идут продолжаются до конца строки

; Например, вот это комментарий

СЕГМЕНТЫ

Программа для MASM32 состоит из сегментов. Каждый сегмент определяет область памяти, предназначенную для хранения данных определённого вида. В основном, различают следующие роли сегментов памяти:

1)Сегменткода, в котором хранится код исполняемой программы.

2)Сегмент данных, в котором хранятся те переменные программы, которые объявлены статически.

3)Сегмент стека, в котором хранятся адреса возврата и параметры, при вызове подпрограмм, а также локальные переменные, которые должны быть уничтожены, после выхода из подпрограммы.

Общий шаблон объявления сегмента:

<ИМЯСЕГМЕНТА>SEGMENT[byte/word/dword/para/page]

;…тут будет что-то полезное

<ИМЯСЕГМЕНТА>ENDS

Роли же сегментов назначаются оператором assume (не является процессорной инструкцией), который ставит каждый сегмент в соответствие одному из сегментных регистров процессора:

assumecs: <ИМЯ СЕГМЕНТА>, ds: <ИМЯ СЕГМЕНТА>, es: <ИМЯ СЕГМЕНТА>, ss: <ИМЯ СЕГМЕНТА>

1)cs – Хранит адрес сегмента кода.

2)ds– Хранит адрес основного сегмента данных.

3)es– Хранит адрес вспомогательного сегмента данных.

4)ss– Хранит адрес сегмента стека.

ПЕРЕМЕННЫЕ

Переменные в MASM32 объявляются, как правило, в сегменте данных (хотя никто не может помешать Вам делать этого и в сегменте кода, но это извращение). При объявлении переменой, задаёт только размер экземпляра. При этом конкретный тип определяется используемой операцией. Например, одна и та же переменная размера byteможет использоваться, как в роли вектора из 8 булевых компонент (инструкции xor, or, and), так и в роли 8-битного целого числа (add, sub).

Общий шаблон объявления переменных:

<ИМЯ ПЕРЕМЕННОЙ><ТИП ДАННЫХ><ИНИЦИАЛИЗАЦИЯ>

Типы данныхв MASM32 бывают следующие:

Размер данных

Синоним

Размер, байт

Типы данных (наиболее часто используемые с данным размером)

db

byte

1

boolean, int8, символASCIIилиANSI.

dw

word

2

Int16, кодсимволаUTF-16.

dd

dword

4

Int32, float

df .

-

6

 

dt.

-

10

80-бит действительное число.

Существует триспособа инициализации переменной:

1)Одним скалярным значением, например:

;объявляет переменную alpha, выделяет 1 ячейку памяти, размером в 1 байт и заполняет значением 1. alphadb1

;объявляет переменную beta, выделяет 1 ячейку памяти, размером в 2 байта и заполняет значением 23. betadw23

;объявляет переменную gamma, выделяет 1 ячейку памяти, размером в 1 байт и заполняет кодом символа ‘a’. gammadb’a’

2)Массив, заполненный одним значением:

;объявляет переменную delta, выделяет 256 ячеек памяти, размером по1 байту и заполняет их значением 0. deltadb100hdup(0)

;объявляет переменную theta, выделяет 256 ячеек памяти, размером по1 байту и не заполняет их.

thetadb100hdup(?)

3)Строка:

; объявляет переменную sigma, выделяет 5 ячеек памяти, размером по1 байту и заполняет их строкой ‘hallo’. sigmadb’hallo’

Так же данные способы можно комбинировать:

;объявляет переменную omega, выделяет 24 ячейки памяти, размером по1 байту и заполняет их

;указанными значениями в том же порядке, в котором они перечислены через запятую.

omegadb0, 10 dup(1), ’a’, ‘halloworld$’

МЕТКИ

В любом месте программы могут стоять метки. Меткой может быть любая последовательность латинских символов и цифр, начинающаяся с цифры и оканчивающаяся символом двоеточия. В программе обязательно должна присутствовать метка startи конструкция ENDstartв конце программы. Она играет роль точки входа в программу, то есть программа всегда начинается с инструкции следующей за меткой start.Это некий аналог функции main()из С++.

ИНСТРУКЦИИ АССЕМБЛЕРА

Инструкциями в Ассемблере называются те части исходного кода, которые преобразуются непосредственно в машинные команды, исполняемые процессором.

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

Общий шаблон инструкции процессора:

<КОД ОПЕРАЦИИ><ОПЕРАНД 1>,<ОПЕРАНД 2>

Основные инструкции ассемблера х86:

Имя

 

Шаблон

 

Поведение

Пример

 

 

 

 

Арифметика и работа с памятью

 

 

 

mov<РЕГИСТР 1>,<РЕГИСТР 2>

 

 

Копирует значение из регистра 2 в

mov ax, bx

 

 

 

 

 

регистр 1.

 

mov

 

mov<РЕГИСТР>,<АДРЕС В ПАМЯТИ>

 

 

Копирует значение из памяти в регистр

mov ax, word ptrds:[003Ah]

 

 

 

 

 

 

 

 

 

 

 

 

 

movbx, word ptres:[003Ah]

 

 

 

 

 

 

 

 

 

 

 

 

 

movcx, word ptr [003Ah]

 

 

mov< АДРЕС В ПАМЯТИ>,<РЕГИСТР>

 

Копирует значение из регистра в памят

mov word ptrds:[003Ah], ax

 

 

 

 

 

 

 

 

 

 

 

 

 

mov word ptres:[003Ah], bx

 

 

 

 

 

 

 

 

 

 

 

 

 

mov word ptr [003Ah], cx

add

 

add<РЕГИСТР 1>,<РЕГИСТР 2>

 

 

 

Вычисляет сумму регистра 1 и регистра

 

 

 

 

 

 

 

 

 

 

 

 

2 и помещает в регистр 1.

 

sub

 

sub<РЕГИСТР 1>,<РЕГИСТР 2>

 

 

 

Вычисляет разность регистра 1 и

 

 

 

 

 

 

 

 

 

 

 

 

регистра 2 и помещает в регистр 1.

 

mul

 

mul<МНОЖИТЕЛЬ>

 

 

 

 

если множитель имеет

mulbl

 

 

 

 

 

 

 

 

 

 

 

 

размер byte, то в качестве

mulbx

 

 

 

 

 

 

 

 

 

 

 

 

второго сомножителя будет

mulebx

 

 

 

 

 

 

 

 

 

 

 

 

взят регистр al.

mul word ptr[beta]

 

 

 

 

 

 

 

 

 

 

 

 

если множитель имеет

 

 

 

 

 

 

 

 

 

 

 

 

 

размер word, то в качестве

 

 

 

 

 

 

 

 

 

 

 

 

 

второго сомножителя будет

 

 

 

 

 

 

 

 

 

 

 

 

 

взят регистр ax.

 

 

 

 

 

 

 

 

 

 

 

 

 

если множитель имеет

 

 

 

 

 

 

 

 

 

 

 

 

 

размер dword, то в качестве

 

 

 

 

 

 

 

 

 

 

 

 

 

второго сомножителя будет

 

 

 

 

 

 

 

 

 

 

 

 

 

взят регистр eax.

 

 

 

 

 

 

 

 

 

 

 

 

Результат:

 

 

 

 

 

 

 

 

 

 

 

 

 

при умножении байтов

 

 

 

 

 

 

 

 

 

 

 

 

 

результат помещается в ax;

 

 

 

 

 

 

 

 

 

 

 

 

 

при умножении слов

 

 

 

 

 

 

 

 

 

 

 

 

 

результат помещается в пару

 

 

 

 

 

 

 

 

 

 

 

 

 

dx:ax. То есть младшее слово

 

 

 

 

 

 

 

 

 

 

 

 

 

в ax, а старшее в dx.

 

 

 

 

 

 

 

 

 

 

 

 

 

при умножении двойных

 

 

 

 

 

 

 

 

 

 

 

 

 

слов результат помещается в

 

 

 

 

 

 

 

 

 

 

 

 

 

пару edx:eax.

 

 

 

 

 

 

 

 

div

 

div<ДЕЛИТЕЛЬ>

 

 

 

если делитель имеет размер

div bl

 

 

 

 

 

 

 

 

 

 

 

 

byte, то в качестве делимого

div bx

 

 

 

 

 

 

 

 

 

 

 

 

будет взят регистр ax.

div ebx

 

 

 

 

 

 

 

 

 

 

 

 

Частное будет помещено в

div wordptr[beta]

 

 

 

 

 

 

 

 

 

 

 

 

al, остаток в ah.

 

 

 

 

 

 

 

 

 

 

 

 

если делитель имеет размер

 

 

 

 

 

 

 

 

 

 

 

 

 

word, то в качестве делимого

 

 

 

 

 

 

 

 

 

 

 

 

 

будет взята пара

 

 

 

 

 

 

 

 

 

 

 

 

 

dx:ax.Частное будет

 

 

 

 

 

 

 

 

 

 

 

 

 

помещено в ax, остаток в dx.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сравнение значений

 

cmp

 

cmp<ОПЕРАНД 1>,<ОПЕРАНД 2>

 

 

 

Вычитает из первого операнда второй,

 

 

 

 

 

 

 

 

 

 

 

 

но результат никуда не помещает, а

 

 

 

 

 

 

 

 

 

 

 

 

всего лишь запоминает, как операнды

 

 

 

 

 

 

 

 

 

 

 

 

соотносятся друг с другом

 

 

 

 

 

 

 

 

 

 

 

 

(больше/меньше/равно/нуль и т.д.)

 

test

 

test<ОПЕРАНД 1>,<ОПЕРАНД 2>

 

Выполняет операцию логического «И»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для указанных операндов, но результат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

никуда не помещает, а всего лишь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

запоминает, как операнды соотносятся

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

друг с другом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(больше/меньше/равно/нуль и т.д.)

 

 

 

 

 

 

Операции перехода, вызовы прерываний и подпрограмм.

jmp

 

jmp<АДРЕС ПЕРЕХОДА>

 

 

Данная инструкция не выполняет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

операций над данными, но заставляет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

процессор безусловно перейти к

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выполнению инструкции по

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

указанному адресу.

 

 

 

 

Инструкции условного перехода. Являются полными аналогами инструкции jmp, за исключением

 

 

 

того, что инструкция выполняется процессором, только если выполнено соответствующее

 

 

 

условие. Все указанные условия проверяются для операндов последней выполненной

 

 

 

арифметической инструкции или же инструкции сравнения.

 

jb

 

jb<АДРЕС ПЕРЕХОДА>

 

 

 

 

 

если меньше, для чисел без знака

 

ja

 

ja<АДРЕС ПЕРЕХОДА>

 

 

 

 

 

если больше, для чисел без знака

 

je

 

je<АДРЕС ПЕРЕХОДА>

 

 

 

 

 

если равно

 

jz

 

jz<АДРЕС ПЕРЕХОДА>

 

 

 

 

 

если нуль

 

jae

 

jae<АДРЕС ПЕРЕХОДА>

 

 

 

если больше или равно, для чисел без

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

знака

 

 

jbe

 

jbe<АДРЕС ПЕРЕХОДА>

 

 

 

если меньше или равно, для чисел без

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

знака

 

 

jne

 

jne<АДРЕС ПЕРЕХОДА>

 

 

 

если не равно, для чисел без знака

 

 

jna

 

jna<АДРЕС ПЕРЕХОДА>

 

 

если небольше, для чисел без знака

 

 

jnb

 

jnb<АДРЕС ПЕРЕХОДА>

 

 

если неменьше, для чисел без знака

 

 

jg

 

jg<АДРЕС ПЕРЕХОДА>

 

 

 

 

 

 

если больше, для чисел со знаком

 

 

jl

 

jl<АДРЕС ПЕРЕХОДА>

 

 

 

 

если меньше, для чисел со знаком

 

 

jge

 

jge<АДРЕС ПЕРЕХОДА>

 

 

 

если больше или равно, для чисел со

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

знаком

 

 

jle

 

jle<АДРЕС ПЕРЕХОДА>

 

 

 

если меньше или равно, для чисел со

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

знаком

 

 

jo

 

jo<АДРЕС ПЕРЕХОДА>

 

 

 

если переполнение

 

 

call

 

call<АДРЕС ПЕРЕХОДА>

 

 

помещает в стек адрес следующей

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

инструкции и переходит по адресу,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

который указан в качестве операнда.

 

ret

 

ret

 

 

Достаёт из стека адрес и переходит по

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нему.

 

 

int

 

int<НОМЕР ПРЕРЫВАНИЯ>

 

Работает аналогично call, но переходит

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не по любому адресу, а по адресу, в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

котором хранится функция-обработчик

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для прерывания с соответствующим

 

 

 

 

 

 

 

 

 

 

 

 

 

 

номером.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работа со стеком.

push

 

push <ИСТОЧНИК>

Помещает источник в стек.

 

pop

 

pop <ПРИЁМНИК>

Извлекает вершину стека и помещает в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

приёмник.

 

call

 

call<АДРЕС ПЕРЕХОДА>

 

помещает в стек адрес следующей

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

инструкции и переходит по адресу,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

который указан в качестве операнда.

 

ret

 

ret

 

Достаёт из стека адрес и переходит по

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нему.

 

 

Соседние файлы в предмете Языки программирования