![]() Главная страница Случайная лекция ![]() Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика ![]() Мы поможем в написании ваших работ! |
Краткие сведения о системе команд процессора
Лабораторная работа № 6 Организация вычислительного процесса с переходами и ветвлениями
Цель: Познакомиться с основными командами процессора, осуществляющими операции перехода (безусловно и по условию). Закрепить знание мнемонической записи команд. Научиться составлять вычислительные программы на языке Ассемблер с использованием ветвлений. Оборудование:ПК, ОС Windows, программа Debug, методические указания.
Требования к отчету по лабораторной работе: 1. Конспект теоретического материала. 2. Выполненное на ПК практическое задание. 3. Занесенные в тетрадь результаты выполнения практического задания (протоколы исполнения команд)
Краткие сведения о системе команд процессора
Команды перехода в системе команд процессора занимают одно из центральных мест. Рассмотрим основные команды передачи управления: 1. безусловный переход – командаjmp Формат команды: jmp адрес – безусловный переход на ячейку с указанным адресом. Используется очень часто. По сути, выполняет то же самое действие, что и оператор goto в языках программирования
Например:
0C9D:0100 MOV AX,0001 0C9D:0103 MOV BX,0001 0C9D:0106 MOV CX,0001 0C9D:0109 ADD AX,0001 0C9D:010C ADD BX,AX 0C9D:010E JMP 0109
2. Условный переход – условный переход выполняется в зависимости от сути проверяемого условия. Ассемблер содержит целую группу команд условного перехода. Переход выполняется, если соответствующее условие выполнено. Каждое условие является каким-либо состоянием флагов. Обычно перед командой условного перехода выполняется команда cmp, хотя это совсем не обязательно. Формат команды: cmp операнд1, операнд2 – по вычитанию операнда2 из операнда1, команда меняет только флаги. Значение операндов не меняется FLAGS – 16-битный регистр, где каждый бит имеет определенное значение:
CF (Carry Flag) - флаг переноса. Содержит значение "переносов" (0 или 1) из старшего разряда при арифметических операциях, некоторых операциях сдвига и циклического сдвига PF (Parity Flag) - флаг четности. Проверяет младшие восемь бит результатов операций над данными. Нечетное число бит приводит к установке этого флага в 0, а четное - в 1. Не следует путать флаг четности с битом контроля на четность. AF (Auxiliary Carry Flag) - дополнительный флаг переноса. Устанавливается в 1, если арифметическая операция приводит к переносу четвертого справа бита (бит номер 3) в регистровой однобайтовой команде. Данный флаг имеет отношение к арифметическим операциям над символами кода ASCII. ZF (Zero Flag) - флаг нуля. Устанавливается в качестве результата арифметических команд и команд сравнения. Как это ни странно, ненулевой результат приводит к установке нулевого значения этого флага, а нулевой - к установке единичного значения. Кажущееся несоответствие является, однако, логически правильным, так как 0 обозначает "нет" (т.е. результат не равен нулю), а единица обозначает "да" (т.е. результат равен нулю). Команды условного перехода JE и JZ проверяют этот флаг. SF (SIgn Flag) - знаковый флаг. Устанавливается в соответствии со знаком результата (старшего бита) после арифметических операций: положительный результат устанавливает 0, а отрицательный - 1. Команды условного перехода JG и JL проверяют этот флаг. TF (Trap Flag) - флаг пошагового выполнения. Этот флаг вам уже приходилось устанавливать, когда использовалась команда Т в отладчике DEBUG. Если этот флаг установлен в единичное состояние, то процессор переходит в режим пошагового выполнения команд, т.е. в каждый момент выполняется одна команда под пользовательским управлением. IF (Interrupt Flag) - флаг прерывания. При нулевом состоянии этого флага прерывания запрещены, при единичном - разрешены. DF (DIrection Flag) - флаг направления. Используется в строковых операциях для определения направления передачи данных. При нулевом состоянии команда увеличивает содержимое регистров SI и DI, вызывая передачу данных слева направо, при нулевом - уменьшает содержимое этих регистров, вызывая передачу данных справа налево OF (Overflow Flag) - флаг переполнения. Фиксирует арифметическое переполнение, т.е. перенос вниз старшего (знакового) бита при знаковых арифметических операциях.
Например: Команда CMP сравнивает два операнда и воздействует на флаги AF, CF, OF, PF, SF, ZF. Однако, нет необходимости проверять все эти флаги по отдельности. В следующем примере проверяется: содержит ли регистр BX нулевое значение:
0100 CMP BX,00 - сравнение BX с нулем 0103 JZ 0150 - переход на ячейку с адресом 0150 если нуль …….. - (действия при не нуле) 0150 MOV AX, BA .. - точка перехода при BX=0
Если BX содержит нулевое значение, команда CMP устанавливает флаг нуля ZF в единичное состояние, и возможно изменяет (или нет) другие флаги. Команда JZ (переход, если нуль) проверяет только флаг ZF. При единичном значении ZF, обозначающее нулевой признак, команда передает управление на адрес, указанный в ее операнде. При необходимости значение флагов можно устанавливать принудительно с помощью специальных команд ассемблера.
Дата добавления: 2015-07-26; просмотров: 164; Нарушение авторских прав ![]() Мы поможем в написании ваших работ! |