Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Команды условного перехода





Мнемо-ника Поле code Условие перехода Смысловое значение
JA/JNBE   CF = 0 и ZF = 0 Более/Не менее или равно
JAE/JNB   CF = 0 Более или равно/Не менее
JNA/JBE   CF = 1 или ZF = 1 Не более/Менее или равно
JB/JNAE   CF = 1 Менее/Не более или равно
JC   CF = 1 Перенос
JNC   CF = 0 Нет переноса
JE/JZ   ZF = 1 Равно/Нуль
JNE/JNZ   ZF = 0 Не равно/Не нуль
JG/JNLE   ZF = 0 и SF = OF Больше/Не меньше или равно
JGE/JNL   SF = OF Больше или равно/Не меньше
JNG/JLE   ZF = 1 или SF ¹ OF Не больше/Меньше или равно
JL/JNGE   SF ¹ OF Меньше/Не больше или равно
JO   OF = 1 Переполнение
JNO   OF = 0 Нет переполнения
JP/JPE   PF = 1 Сумма битов четная
JNP/JPO   PF = 0 Сумма битов не четная
JS   SF = 1 Отрицательный результат
JNS   SF = 0 Положительный результат

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

Пример использования команд условного перехода:

  CMP AX,123 ; сравнить содержимое AX с числом 123 h
  JE M1 ; если равно, перейти на метку M1
  ..  
M1: XOR AX,AX  
  ..  
  TEST BX,1 ; проверить установлен ли младший бит BX
  JNZ M2 ; перейти на метку M2, если это так
  ..  
M2: INT 20  

Команда JCXZ передает управление по адресу своего операнда, если содержимое регистра CX равно нулю. Она имеет следующий формат в мнемонике ассемблера:

JCXZ disp,

где disp – адресное выражение типа метки с атрибутом NEAR, значение которого лежит в интервале от –128 до 127 от адреса следующей за JCXZ команды. Эта команда во всем аналогична командам условного перехода.

Формат машинного кода команды JCXZ:

  disp

Пример применения команды JCXZ для организации цикла "пока CX ¹ 0":

  MOV CX,3 ; установить счетчик цикла
M1: JCXZ M2 ; если цикл закончился, то выход
  DEC CX ; изменить параметр цикла
  JMP short M1 ; возврат в цикл
M2: ...  

Команды управления циклами (LOOP, LOOPE, LOOPZ, LOOPNE, LOOPNZ) имеют следующие форматы в мнемонике ассемблера:

LOOP disp,

LOOPE disp,

LOOPZ disp,

LOOPNE disp,

LOOPNZ disp,

где disp – адресное выражение типа метки с атрибутом NEAR, значение которого лежит в интервале от –128 до 127 от адреса следующей за циклом команды.

Все эти команды декрементируют значение регистра CX. Если после этого значение CX не равно нулю, то LOOP передает управление по адресу своего операнда. Эквивалентные друг другу команды LOOPE и LOOPZ передают управление по адресу своего операнда, если CX не равно нулю и значение флага ZF равно 1. Эквивалентные друг другу команды LOOPNE и LOOPNZ передают управление по адресу своего операнда, если CX не равно нулю и ZF = 0. Эти действия позволяют легко реализовать цикл с заданным количеством повторений, которое задается в CX.


Команды управления циклами имеют следующий формат машинных кодов:

LOOP:   disp

 

LOOPE/LOOPZ:   disp

 

LOOPNE/LOOPNZ:   disp

Примеры использования команд управления циклами:

; Пример 1: вычисление суммы элементов массива из 10 байт
  XOR AX,AX ; обнуление суммы
  XOR SI,SI ; обнуление индекса
  MOV CX,0Ah ; загрузка количества элементов
NEXT:   ; начало цикла
  ADD AL, [SI + 20] ; сложение очередного элемента с ; общей суммой
  ADC AH,0 ; учет возможного переноса
  INC SI ; увеличение индекса
  LOOP NEXT ; возврат в цикл, ; если массив не исчерпан
; Пример 2: поиск первого ненулевого элемента в массиве из 10 байт
  MOV SI, -1 ; установить значение индекса
  MOV CX, 0Ah ; установить количество элементов
NEXT:   ; начало цикла
  INC SI ; увеличить индекс
  CMP [SI + 20], 0 ; сравнить текущий элемент с нулем
  LOOPE NEXT ; возврат в цикл, ; если элемент не найден и массив еще ; не исчерпан
  JNE YES ; если элемент найден, то переход ; к метке YES
  ... ; действия, если элемент не найден
  ... ; массив содержит только нули
  JMP short END ; переход к метке END
YES: ... ; действия, если элемент найден
  ... ; SI указывает на ненулевой элемент
END: ... ; завершающие действия
; Пример 3: поиск заданного значения в массиве из 10 байт
  MOV AL, 5Dh ; загрузить искомое значение
  MOV SI, -1 ; установить значение индекса
  MOV CX, 0Ah ; установить количество элементов
NEXT:   ; начало цикла
  INC SI ; увеличить индекс
  CMP [SI + 20], AL ; сравнить текущий элемент ; с искомым значением
  LOOPNE NEXT ; возврат в цикл, ; если элемент не найден ; и массив еще не исчерпан
  JCXZ NO ; если элемент не найден, то переход ; к метке NO
  ... ; действия, если элемент найден.
  ... ; SI указывает на этот элемент
NO: JMP short END ; переход к метке END
  ... ; действия, если элемент не найден
END: ... ; завершающие действия

СОДЕРЖАНИЕ РАБОТЫ

1. Ознакомиться с теоретическим материалом.

2. С помощью программы debug исследовать выполнение всех арифметических команд с любым возможным типом их операндов.

3. В соответствии со своим вариантом решить поставленные задачи и с помощью DEBUG установить правильность их решения.

Date: 2015-05-23; view: 610; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.008 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию