Анимация
JavaScript


Главная  Библионтека 

0 1 2 [ 3 ] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

Команда

Переход, если

Условие перехода

JZ/JE

нуль или равно

ZF=1

JNZ/JNE

не нуль или не равно

ZF = 0 ~

JC/JNAE/JB

есть переполнение/не выше и не равно/ниже

CF=1

JNC/JAE/JNB

нет переполнения/выше или равно/не ниже

CF=.0

число единичных бит четное

PF = 1

число единичных бит нечетное

PF = 0

знак равен 1

SF = 1

знак равен 0

SF = 0 ~

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

0F = 1

нет переполнения

0F = 0

JA/JNBE

выше/не ниже и не равно

CF = OhZF = 0

JNA/JBE

не выше/ниже или равно

CF = 1 илиZF=l

JG/JNLE

больше/не меньше и не равно

ZF = OhSF = OF

JGE/JNL

больше или равно/не меньше

SF = OF

JL/JNGE

меньше/не больше и не равно

SF не равно OF

JLE/JNG

меньше или равно/не больше

ZF= 1 или SF не равно OF

JCXZ

содержимое СХ равно нулю

cx = o

LOOP метка

Повторение цикла, пока содержимое СХ не равно нули Команда уменьшает значение СХ на 1 и, если СХ не равно нулю, осушествляет передачу управления в указанную точку программы (начало цикла); в противном случае (СХ равно нулю), выполняется команда, следующая за командой LOOP, т. е. осушествляется выход из цикла. Переход осуществляется в пределах -128-+127 байт.

LOOPZ/LOOPE метка

Повторение цикла, пока нуль/равно (Loop while zero/equa" Команда осуществляет передачу управления в указанную точку программы (нaчi цикла), если после уменьшения значения СХ на 1 значение СХ не равно нулю и oд временно CF равно 1; в противном случае (СХ равно нулю или CF не равно 1), выпол« ется команда, следующая за командой LOOPZ, т. е. осуществляется выход из uii-Переход осуществляется в пределах -128-+127 байт.

LOOPNZ/LOOPNE метка

............ Повторение цикла, пока не нуль/не равно (Loop while not zero/not equal)

Команда осуществляет передачу управления в указанную точку профаммы (начало ла) если после уменьшения значения СХ на 1 значение СХ не равно нулю и одно-менно CF равно 0; в противном случае (СХ равно нулю или CF равно 1), выполняется

команда, следующая за командой LOOPZ, т. е. осуществляется выход из цикла. Переход

осуществляется в пределах -128-+127 байт.

CALL операнд

Вызов подпрограммы (процедуры)

Команда сохраняет в стеке текущий адрес (адрес команды, следующий за командой CALL) и передает управление на адрес, заданный операндом. В качестве операнда может использоваться непосредственное значение относительного смещения (метка), регистр (кроме сегментного) или ячейка памяти, содержащие адрес перехода. Если в качестве адреса указано 16-разрядное смещение, считается, что исполнительный адрес находится в том же сегменте, т. е. осуществляется ближний вызов подпрограммы (NEAR PTR). Если в качестве адреса указано 32-разрядное значение, осуществляется дальний вызов (FAR PTR), т. е. вызов подпрограммы, находящейся в другом программном сегменте. Команда ближнего вызова в качестве адреса возврата сохраняет в стеке 16-разрядное значение относительного адреса, команда дальнего вызова - 32-разрядное значение полного адреса. Подпрограмма обычно заканчивается командой RET.

RET [ЧисАо]

\ Возврат из подпрограммы (процедуры) (Return)

Команда передает управление по адресу возврата, находящемуся на вершине стека. Необязательный параметр (значение которого кратно 2) команды указывает количество аитов, которое необходимо дополнительно удалить из стека, это бывает необходимо, если при вызове подпрограммы ей передавались параметры через стек. Встретив в про-Рамме команду RET, ассемблер заменяет ее на RETN (возврат из ближней процедуры) и RETF (возврат из дальней процедуры) в зависимости от того, как была описана под-с*"" °°РУ< завершает команда RET. Команда RETN извлекает из стека одно BaL ° ~ °™осительный адрес точки возврата. Команда RETF извлекает из стека два сло- полный адрес точки возврата.

NT номер

*а"слов" заносит в стек три слова: содержимое регистра флагов, CS и IP (последние ва суть адрес возврата) и передает управление на программу обработки прерыва-

Программное прерывание


Таблица 1.1.1. Варианты команды J(COtS[)



AddrNearDW AddrFar DD AddrProcDD Request DB

(?) (?)

Введите DB

MasSize = ($ -;==== Команды =

DW Mas)/2

; Адреса переходов, ; вычисляемые ; программно символ,, ODh, OAh

Е - завершение программы, ODh, OAh ODh - возврат каретки, OAh - перевод строки Признак конца строки для функции 09h прерывания 21h 1, 2, 4, 3, 6, 7, 5, О

call

call

call

NEAR PTR Pointl WORD PTR AddrNear FAR PTR Point2 ; DWORD PTR AddrFar MyProcl

WORD PTR [bx + si] ds: AddrProc

Примеры дальних

; безусловных переходов

Примеры ближних

; вызов подпрограмм

; Пример дальнего вызова

Основы программирования на Ассемблере IBM PC 31 Глава 1 .......................................................................................................•.................

; подпрограммы ; Процедура MyProcl

Вывод на экран запроса на ввод символа

mov ah, 09h ; Номер запрашиваемой

; системной функции dx, OFFSET Request

; Параметр - адрес ; выводимой строки 21h ; Вызов системной функции

; (вызов обработчика программного ; прерывания с номером 21h -; диспетчера DOS) ; Бесконечный цикл анализа введенных символов, ; ввод Е - выход из цикла

Вызов системной

; функции(ОIh) ввода символа Функция вернула код символа Е? ; Если да, на выход ; Если нет, переходим на ввод ; очередного символа

Next:

ah, Olh 21h

al, E

OutOfProg Next

OutOfProg:

; Подсчет контрольной суммы (КС)

;(суммы без учета переносов) содержимого массива Mas

mov mov call

si, OFFSET Mas cx, MasSize MyProc2

Адрес массива

; Размер массива ; Вызов процедуры

; подсчета КС ; области памяти

; Процедура подсчета КС области памяти (СП) ; При вызове: DS: SI - адрес ОП, СХ - размер в словах, ; При возврате: АХ - контрольная сумма. «УРгос2 PROC

Next:

ax, ax

; Обнуляем регистр, в котором будем ; накапливать КС

ax, [si]

; Сложение промежуточного значения ; КС с очередным элементом массива

; Подготовка к обработке

; следующего элемента массива

loop

Next

; Если не все элементы массива ; обработаны, повторяем цикл; ; в противном случае в АХ искомое ; значение КС - выход из процедуры.

ния (так называемый обработчик прерывания), 8-разрядный номер которого указан в качестве операнда, загружая в пару регистров CS: IP 32-разрядный вектор прерывания (адрес первой команды обработчика прерывания). Обработчик прерывания обычно завершается командой IRET.

IRET

Возврат из обработчика прерывания

Команда возвращает управление прерванной программе, извлекая из стека три верх-них слова, загружая считанными значениями IP, CS и регистр флагов.

INTO

Прерывание по переполнению

Будучи установленной после арифметической или логической команды, инициирует процедуру прерывания с номером 4, если в результате выполнения предшествующей команды установился флаг переполнения.

INT3

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

Примеры

;==== Данные =======================================================




32 ........Ассембл Основьтрограмм на Ассемблере IBM PC

; Возврат из процедуры

МуРгос2 ENDP

Примечание.

PROC и ENDP - директивы организации процедур, соответственно указание начала и конца процедуры.

Команды строковой обработки - CMPS, LODS, MOVS, SCAS, STOS

Строкой называют последовательность байтов или слов. Если флаг направлен}!я пг. ред выполнением строковой команды сброшен в О, значение в индексном регистре поьк выполнения предписанного действия увеличивается на 1 (если команда работает с бай. тами) или на 2 (если команда работает со словами). Если флаг направления перед выпоц. нением строковой команды установлен в I, значение в индексном регистре после выпо нения предписанного действия уменьшается на 1 (если команда работает с байтами) щ на 2 (если команда работает со словами). Строковые команды часто используются с пре. фиксами повторения REP, REPZ/REPE, REPNZ/REPNE.

MOVSB

Пересылка байта из строки в строку (Move string byts Команда копирует байт из ячейки памяти, адресуемой парой регистров DS: S1, в ячего памяти, адресуемую парой регистров ES: DI, после чего в зависимости от значения флш направления DF содержимое регистров SI, DI увеличивается или уменьшается на 1.

MOVSW

Пересылка слова из строки в строку (Move string wori) Команда копирует слово из ячейки памяти, адресуемой парой регистров DS: S1, в яче ку памяти, адресуемую парой регистров ES: DI, после чего в зависимости от значения флг га направления DF содержимое регистров S1, DI увеличивается или уменьшается на 2.

LODSB

Чтение байта из строки (Load string b**

Команда копирует байт из ячейки памяти, адресуемой парой регистров DS;

значения DF содержимое регистра

в регистр AL, после чего в зависимости от увеличиваегся или уменьшается на 1

LODSW

Чтение слова из строки (Load string word)

анда копирует слово из ячейки памяти, адресуемой парой регистров DS: SL истр АХ, после чего в зависимости от значения DF содержимое регистра SI увшчивается или уменьшается на 2.

STOSB.....................................................................................................................

........... Запись байта в строку (Store string byte)

Команда копирует байт из регистра AL в ячейку памяти, адресуемую парой регистров

£§• DI, после чего в зависимости от значения DF содержимое регистра DI увеличивается

или уменьшается на 1.

STOSW

Запись слово в строку (Store string word)

Команда копирует слово из регистра АХ в ячейку памяти, адресуемую парой регистров ES: DI, после чего в зависимости от значения DF содержимое регистра D1 увеличивается или уменьшается на 2.

CMPSB

Сравнение строк по байтам (Compare string byte)

Команда сравнивает байты двух строк, вычитая второй операнд (адресуемый регистрами ES: DI) из первого (адресуемого регистрами DS: SI), устанавливает признаки результата, после чего в зависимости от значения DF содержимое регистров SI, DI увеличивается или уменьшается на 1.

CMPSW

Сравнение строк по словам (Compare string word)

Команда сравнивает слова двух строк, вычитая второй операнд (адресуемый регистрами ES: DI) из первого (адресуемого регистрами DS: SI), устанавливает признаки результата, после чего в зависимости от значения DF содержимое регистров SI, DI увеличивается или уменьшается на 2.

SCASB

Сканирование строки по байтам (Scan string byte)

ти сравнивает содержимое регистра AL с 8-разрядным содержимым ячейки памя-

"РвогоТ"* регистрами ES: DI, вычитая второй операнд (содержимое ячейки памяти) из значен AL), устанавливает признаки результата, после чего в зависимости

-I содержимое регистра DI

увеличивается или уменьшается на 1.



0 1 2 [ 3 ] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88