Je eql ; переход, если элемент mas равен 5
Jl low ; переход, если элемент mas меньше 5
Jg grt ; переход, если элемент mas больше 5
…
eql:
…
low:
…
grt:
…
(слайд №13)
Команды условного перехода и флаги.
Мнемоническое обозначение некоторых команд условного перехода отражает название флага, с которым они работают, и имеет следующую структуру: первой буквой идет символ «j» (jump, переход) вторым – либо обозначение флага, либо символ отрицания «n», после которого стоит название флага. Такая структура команды отражает ее назначение. Если символа «n» нет, то проверяется состояние флага, и, если он равен 1, производится переход на метку перехода. Если символ «n» присутствует, то проверяется состояние флага на равенство 0, и в случае успеха производится переход на метку перехода. В следующей таблице приведены все эти команды:
Название флага | Номер бита в eflags/falgs | Команды условного перехода | Значение флага для осуществления перехода |
флаг переноса cf | 1 | j c | cf = 1 |
флаг четности pf | 2 | jp | pf = 1 |
флаг нуля zf | 6 | jz | zf = 1 |
флаг знака sf | 7 | js | sf = 1 |
флаг переполнения of | 11 | jo | of = 1 |
флаг переноса cf | 1 | jnc | cf = 0 |
флаг четности pf | 2 | jnp | pf = 0 |
флаг нуля zf | 6 | jnz | zf = 0 |
флаг знака sf | 7 | jns | sf = 0 |
флаг переполнения of | 11 | jno | of = 0 |
|
|
Эти команды можно использовать после любых команд, изменяющих указанные флаги.
(слайд №14)
Пример:
В данном примере производится замена в строке символов длиной n байт малых (строчных) букв английского алфавита на большие (прописные). Суть алгоритма заключается в кодах ASCII данных букв. А именно: в таблице ASCII строчные и прописные буквы упорядочены по алфавиту. Строчным буквам английского алфавита соответствует диапазон кодов 61h – 7Ah, а прописным – 41h – 5Ah. Для того, чтобы понять идею, лежащую в основе алгоритма преобразования, достаточно сравнить представления соответствующих прописных и строчных букв в двоичном виде:
a – 0110 0001 z – 0111 1010
A – 0100 0001 Z – 0101 1010
Как видно из приведенного двоичного представления, для выполнения преобразования между строчными и прописными буквами достаточно всего лишь инвертировать 5-ый бит.
Model small
Stack 100h
Data
N equ 10 ; количество символов в stroka
stroka db “acvfgrndup”
Code
start:
mov ax, @data
Mov ds, ax
Xor ax, ax
Mov cx, n
Lea bx, stroka ; адрес stroka в bx
m1:
mov al , [ bx ] ; очередной символ из stroka в al
|
|
Cmp al , 61 h ; проверить, что код символа не меньше 61h
Jb next ; если меньше, то не обрабатывать и перейти к следующему символу
Cmp al , 7 ah ; проверить, что код символа не больше 7 A h
Ja next ; если больше, то не обрабатывать и перейти к следующему символу
And al , 11011111 b ; инвертировать 5-ый бит
mov [ bx ], al ; символ на его место в stroka
next:
Inc bx ; адресовать следующий символ
Dec cx ; уменьшить значение счетчика в cx
Jnz m 1 ; если cx не 0, то переход на m1
exit:
Mov ax, 4c00h
Int 21 h ; возврат управления ОС
End start
(слайд №15)
3.3.4. Команды условного перехода и регистр ecx/cx.
Архитектура микропроцессора предполагает специфическое использование многих регистров. К примеру, регистр eax/ax/al используется как аккумулятор, а регистры bp, sp – для работы со стеком. Регистр ecx/cx тоже имеет определенное функциональное назначение – он выполняет роль счетчика в командах управления циклами и при работе с цепочками символов.
Синтаксис этой команды условного перехода таков:
Jcxz метка_перехода
|
|
Jecxz метка_перехода
Эти команды удобно использовать при организации цикла и при работе с цепочками символов. В отличие от других команд условной передачи управления, команда jcxz/jecxz может адресовать только короткие переходы – на -128 байт или +127 байт от следующей за ней командой.
Дата добавления: 2022-07-02; просмотров: 15; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!