Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемАнастасия Выжлецова
1 Микропроцессоры и микропроцессорные системы
2 1. Пересылка данных MOV приемник, источник- Пересылка данных Базовая команда пересылки данных. Копирует содержимое источника в приемник, источник не изменяется. Пример. mov ax, bx PUSH источник- Поместить данные в стек Помещает содержимое источника в стек. Источником может быть регистр, сегментный регистр, непосредственный операнд или переменная. Уменьшает ESP на размер источника (2 или 4). Команда PUSH почти всегда используется в паре с РОР (считать данные из стека). Поэтому, чтобы скопировать содержимое одного сегментного регистра в другой (что нельзя выполнить одной командой МОV), можно использовать такую последовательность команд: push cs рор ds ; т еперь DS указывает на тот же сегмент, что и CS Основные непривилегированные команды
3 POP приемник- Считать данные из стека Помещает в приемник слово или двойное слово, находящееся в вершине стека, увеличивая ESP на 2 или 4 соответственно. POP выполняет действие обратное PUSH. Приемником может быть регистр общего назначения, сегментный регистр, кроме CS. IN приемник, источник- Считать данные из порта Копирует число из порта ввода-вывода, номер которого указан в источнике, в приемник. Приемником может быть только AL, АХ или ЕАХ. Источник - или непосредственный операнд, или DХ, причем во время использования непосредственного операнда можно указывать лишь номера портов не больше 255. OUT приемник, источник - Записать данные в порт Копирует число из источника (AL, АХ или ЕАХ) в порт ввода-вывода, номер, которого указан в приемнике. Приемник может быть либо непосредственным номером порта (не больше 255), либо регистром DX. На командах IN и OUT строится все общение процессора с устройствами ввода-вывода - клавиатурой, жесткими дисками, различными контроллерами, и используются они, в первую очередь, в драйверах устройств. Например, чтобы включить динамик PC, достаточно выполнить команды: in a1, 61h or а1, 3 out 61h, al
4 ADD приемник, ИСТОЧНИК - Сложение Команда выполняет арифметическое сложение приемника и источника, помещает сумму в приемник, не изменяя содержимое источника. Приемник может быть регистром или переменной, источник - числом, регистром или переменной, но нельзя использовать переменную одновременно и для источника, и для приемника. Команда ADD никак не различает числа со знаком и без знака, но, употребляя значения флагов СF (перенос при сложении чисел без знака), ОF (перенос при сложении чисел со знаком) и SF (знак результата), разрешается применять ее и для тех, и для других. SUB приемник, источник- Вычитание Вычитает источник из приемника и помещает разность в приемник. Приемник может быть регистром или переменной, источник - числом, регистром или переменной, но нельзя использовать переменную одновременно и для источника, и для приемника. Точно так же, как и команда ADD, SUB не делает различий между числами со знаком и без знака, но флаги позволяют Использовать ее и для тех, и для других. 2. Команды двоичной арифметики
5 MUL источник - Умножение чисел без знака Выполняет умножение содержимого источника (регистр или переменная) и регистра AL, АХ, ЕАХ (в зависимости от размера источника) и помещает результат в АХ, DX:AX, EDX:EAX соответственно. Если старшая половина результата (АН, DX, EDX) содержит только нули (результат целиком поместился в младшую половину), флаги CF и OF устанавливаются в 0, иначе - в 1. Значение остальных флагов (SF, ZF, АF и PF) не определено. DIV источник - Целочисленное деление без знака Выполняет целочисленное деление без знака AL, АХ или ЕАХ (в зависимости от размера источника) на источник (регистр или переменная) и помещает результат в AL, АХ или ЕАХ, а остаток - в АН, DX или EDX соответственно. Результат всегда округляется в сторону нуля, абсолютное значение остатка меньше абсолютного значения делителя. Флаги СF, OF, SF, ZF, AF и PF после этой команды не определены, а переполнение или деление на ноль вызывает исключение #DE (ошибка при делении) в защищенном режиме и прерывание 0 - в реальном.
6 INC приемник - Инкремент Увеличивает приемник (регистр или переменная) на 1. Единственное отличие этой команды от ADD приемник,1 состоит в том, что флаг СF не затрагивается. Остальные арифметические флаги (OF, SF, ZF, AF, PF) устанавливаются в соответствии с результатом сложения. DEC приемник - Декремент Уменьшает приемник (регистр или переменная) на 1. Единственное отличие этой команды от SUB приемник,1 заключается в том, что флаг CF не затрагивается. Остальные арифметические флаги (OF, SF, ZF, АР, PF) устанавливаются в соответствии с результатом вычитания. CMP приемник, источник - Сравнение Сравнивает приемник и источник и устанавливает флаги, Действие осушествляется путем вычитания источника (число, регистр или переменная) из приёмника (регистр или переменная; приемник и источник не могут быть переменными одновременно), причем результат вычитания никуда не записывается. Единственным следствием работы этой команды оказывается изменение флагов CF, OF, SF, ZF, AF и РF. Обычно команду СМР используют вместе с командами условного перехода (Jсс) и другими, которые позволяют применить результат сравнения, не обращая внимания на детальное значение каждого флажка.
7 AND приемник, источник - Логическое И Команда выполняет побитовое «логическое И» над приемником (регистр или переменная) и источником (число, регистр или переменная: источник и приемник не могут быть переменными одновременно) и помещает результат в приемник. Любой бит результата равен 1, только если соответствующие биты обоих операндов были равны 1, и равен 0 в остальных случаях. Наиболее часто AND применяют для выборочного обнуления отдельных битов. Например, команда аnd al, b 06нулит старшие четыре бита регистра AL, сохранив неизменными четыре младших. Флаги OF и CF обнуляются, SF, ZF и PF устанавливаются в соответствии с результатом, AF не определен. OR приемник, источник - Логическое ИЛИ Выполняет побитовое «логическое ИЛИ» над приемником (регистр или переменная) и источником (число, регистр или переменная; источник и приемник не могут быть переменными одновременно) и помещает результат в приемник. Любой бит результата равен 0, только если соответствующие биты обоих операндов были равны 0, и равен 1 в остальных случаях. Команду OR чаще всего используют для выборочной установки отдельных битов. Например, команда or al, b приведет к тому, что младшие четыре бита регистра AL будут установлены в 1. При выполнении команды OR флаги OF и CF обнуляются, SF, ZF и PF устанавливаются в соответствии с результатом, AF не определен. 3. Логические операции
8 ХОR приемник, источник - Логическое исключающее ИЛИ Выполняет побитовое «логическое исключающее ИЛИ» над приемником (регистр или переменная) и источником (число, регистр или переменная: источник и приемник не могут быть переменными одновременно) и помещает результат в приемник. Любой бит результата равен 1, если соответствующие биты операндов различны, и нулю - в противном случае. XОR используется для самых разных операций, например: хоr ах, ах ; Обнуление регистра АХ. или хоr ах, Ьх хоr bx, ах хоr ах, Ьх ; Меняет местами содержимое АХ и. ВХ. Оба примера могут выполняться быстрее, чем команда : mov ах, 0 NОТ приемник - Инверсия Каждый бит приемника (регистр или переменная), равный нулю, устанавливается в 1, и каждый бит, равный 1, сбрасывается в 0. Флаги не затрагиваются. TEST приемник, источник - Логическое сравнение Вычисляет результат действия побитового «логического И» над приемником (регистр или переменная) и источником и устанавливает флаги SF, ZF и PF в соответствии с полученным показателем, не сохраняя результата. TEST, так же как и СМР, используется в основном в сочетании с командами условного перехода (Jсс).
9 4. Команды передачи управления JMP операнд - Безусловный переход JMP передает управление в другую точку программы, не сохраняя какой- либо информации для возврата. Операндом может быть непосредственный адрес для перехода (В программах используют имя метки, установленной перед командой, на которую выполняется переход), а также регистр или переменная, содержащая адрес. В зависимости от типа перехода различают: переход типа shоrt (короткий переход) - если адрес перехода находится в пределах байт от команды JМР; переход типа near (ближний переход) - если адрес перехода находится в том же сегменте памяти, что и команда JМР; о переход типа far (дальний переход) - если адрес перехода находится в другом сегменте. Дальний переход может выполняться и в тот же самый сегмент при условии, что в сегментной части операнда указа но число, совпадающее с текущим значением CS; При выполнении переходов типа short и пеаг команда JMР фактически преобразовывает значение регистра EIP (или IP), изменяя тем самым смещение следующей исполняемой команды относительно начала сегмента кода.
10 Jcc метка - Условный переход Пример. cmpax, 0 jelocal_1 ; переход, если ax=0 jmpfar_tabel local_1: … far_table: … Это набор команд, выполняющих переход (типа short или nеаг), если удовлетворяется соответствующее условие, которым в каждом случае реально является состояние тех или иных флагов. Но, когда команда из набора Jсс используется сразу после СМР, условия приобретают формулировки, соответствующие отношениям между операндами СМР. Например, если операнды СМР были равны, то команда JE, выполненная сразу после СМР, осуществит переход. Операнд для всех команд из набора Jсс - 8- битное или 32-битное смещение относительно текущей команды.
11 LOOP метка - Цикл Уменьшает регистр СХ (ECX) на 1 и выполняет переход типа short на метку (которая не может быть дальше расстояния байт от команды LOOP), если CX (ЕСХ) не равен нулю. Эта команда используется для организации циклов, в которых регистр СХ (EСХ) играет роль счетчика. Так, в следующем фрагменте команда ADD выполнится 10 раз: movсx, 0Ah loop_start: add аx, cх lоор loop_start Команда LOOP полностью эквивалентна паре команд deccх jnzметка ; если не 0 Но LOOP короче этих двух команд на один байт и не изменяет значения флагов.
12 LOOPE метка- Цикл, пока равно (ZF=1) LOOPZ метка- Цикл, пока ноль (ZF=1) LOOPNE метка - Цикл, пока не равно (ZF=0) LOOPNZ метка- Цикл, пока не ноль (ZF=0) Пример. mov cx, str_length move_loop: lodsb; чтение байта из строки stosb ;запись байта в строку cmр al, 13 loopnz move_loop CALL операнд- Вызов процедуры Сохраняет текущий адрес в стеке и передает управление по адресу, указанному в операнде. Операндом может быть непосредственное значение адреса (метка в ассемблерных программах), регистр или переменная, содержащие адрес перехода. Если в качестве адреса перехода указано только смещение, считается, что адрес расположен в том же сегменте, что и команда CALL.
13 REТ число- Возврат из процедуры RЕТNчисло RЕТFчисло REТN считывает из стека слово (или двойное слово, в зависимости от режима адресации) и загружает его в IP (или EIP), выполняя тем самым действия, обратные ближнему вызову процедуры командой CALL. Команда RETF загружает из стека IP (EIP) и CS, возвращаясь из дальней процедуры. Если в программе указана команда RET, ассемблер заменит ее на REТN или RETF в зависимости от того, как была описана процедура, которую эта команда завершает. INT число - Вызов прерывания INT аналогично команде CALL помещает в стек содержимое регистров FLAGS, CS и IP, после чего передает управление программе, называемой обработчиком прерываний с указанным в качестве операнда номером (число от 0 до 0FFh). Например, следующий фрагмент кода завершает выполнение программы и возвращает управление DOS: mov ax, 4C01h int 21h IREТ - Возврат из обработчика прерывания IREТD
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.