Анимация
JavaScript
|
Главная Библионтека
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:
ния (так называемый обработчик прерывания), 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 |