lect_5.ppt
- Количество слайдов: 9
ЛЕКЦИЯ № 5 СПОСОБЫ ЗАДАНИЯ ОПЕРАНДОВ КОМАНДЫ Операнд задается неявно на микропрограммном уровне Команда явно не содержит операндов xlat (обращается к регистру al и строке в памяти по адресу ds: bx). Непосредственный операнд Операнд находится в поле машинной команды, то есть является ее частью mov ax, 0 ffffh add sum, 2 Операнд находится в одном из регистров Регистровые операнды указываются именами регистров Операнд располагается в памяти Используются два основных способа адресации: • прямая адресация, • косвенная адресация.
Виды косвенной адресации: • косвенная базовая адресация; • косвенная базовая адресация со смещением; • косвенная индексная адресация со смещением; • косвенная базовая индексная адресация, • косвенная базовая индексная адресация со смещением. Операндом является порт ввода-вывода Доступ к адресному пространству портов ввода-вывода осуществляется с помощью специальных команд ассемблера: in, out in al , 60 h mov dx , 20 h mov al , 20 h out dx , al Операнд находится в стеке ВИДЫ АДРЕСАЦИИ ОПЕРАНДОВ В ПАМЯТИ Относительная прямая адресация Эффективный относительный адрес перехода находится в самой команде jc m 1 mov al , 2 … m 1:
Абсолютная прямая адресация mov ax , word ptr [0000] data per 1 … data code mov mov …. . segment dw 5 ends segment ax , data ds , ax ax , per 1 Косвенная базовая (регистровая) адресация Эффективный адрес в любом из регистров общего назначения, кроме sp/esp, bp/ebp mov ax , [ecx] ( Эффективный адрес: (ecx) ) Косвенная базовая адресация со смещением Используется для доступа к данным с известным смещением относительно базового адреса mov ax , [edx+3 h] ( (edx)+3 h ) mov ax , mass[dx] ( mass + (dx) )
Косвенная индексная адресация со смещением Особенностью является масштабирование содержимого индексного регистра. mov ax , mass[esi*2] (mass+(esi)*2 ) Косвенная базовая индексная адресация Эффективный адрес формируется как сумма содержимого двух регистров: базового и индексного. mov eax , [esi][edx] ( (esi)+(edx) ) Может использоваться масштабирование содержимого индексного регистра. mov eax , [esi*4][edx] ( (esi)*4+(edx) ) Косвенная базовая индексная адресация со смещением Эффективный адрес формируется как сумма трех составляющих mov eax , [esi+5][edx] ( (esi)+5+(edx) ) mov ax , array[esi][ebx] ( array+(esi)+(ebx) )
ФУНКЦИОНАЛЬНАЯ КЛАССИФИКАЦИЯ МАШИННЫХ КОМАНД Команды ассемблера Pentium III: • Процессора; • Сопроцессора; • ММХ – расширения; • ХММ – расширения. Функциональная классификация целочисленных машинных команд Команды асемблера Пересылки Арифмети Логические данных ческие Общего назначен. Двоичной арифмет. Манипуляции битами Передачи управления Безусловные Работы со стеком Десятичн. арифмет. Сдвига Условные Преобразов ания данных Цепочеч ные Управления состоянием ЦП Работы с флагами Работы с ситсемными регистрами
ПЕРЕСЫЛКА ДАННЫХ Группа команд: • mov <операнд назначения>, <операнд-источник> • xchg <операнд 1>, <операнд 2> mov – основная команда пересылки данных Особенности применения команды mov: • Нельзя загрузить в сегментный регистр значение непосредственно из памяти; • нельзя переслать данные из одного сегментного регистра в другой сегментный регистр одной командой; • нельзя использовать сегментный регистр cs в качестве операнда назначения; • нельзя осуществить пересылку данных из одной области памяти в другую одной командой;
Использование оператора переопределения типа Сомнительная конструкция mov ax , [bx] inc [bx] dec [bx] mov [bx] , 0 Правильный код mov ax , word ptr [bx] inc byte ptr [bx] dec dword ptr [bx] mov word ptr [bx] , 0 xchg – команда, используемая для двунаправленной пересылки данных xchg ax , bx xchg ax , word ptr [si] РАБОТА С АДРЕСАМИ И УКАЗАТЕЛЯМИ lea назначение , источник команда загрузки эффективного адреса; lds назначение , источник команда загрузки полного адреса; lеs назначение , источник команда загрузки полного адреса; lgs назначение , источник команда загрузки полного адреса; lfs назначение , источник команда загрузки полного адреса; lss назначение , источник команда загрузки полного адреса;
Фрагмент программы копирования строки <1> masm <2> model small <3>. data <4> … <5> str 1 db “Ассемблер – базовый язык компьютера” <6> str 2 db 50 dup (“ “) <7> fullpnt dd str 1 <8> … <9>. code <10> start: <11> … <13> lea si , str 1 <14> lea di , str 2 <15> les bx , fullpnt ; полный указатель на str 1 в пару es: bx <16> m 1: <17> mov al , [si] <18> mov [di] , al <19> inc si <20> inc di <21> ; цикл на метку m 1 до пересылки всех символов <22> … <23> end start
ПРЕОБРАЗОВАНИЕ ДАННЫХ xlat [адрес таблицы перекодировки] Действие команды приводит к замене байта в регистре al байтом из памяти, расположенным по эффективному адресу, определяемому по правилу (bx)+(al)
lect_5.ppt