Описание системы команд (1110646)
Текст из файла
Описание системы командмикропроцессоров IntelМатериал, приведенный в данном разделе справочной системы, связан с уроком 6, накотором мы рассматривали формат машинной команды микропроцессора и систему егокоманд в целом.Выберите тему:Знакомство с порядком описания команд и принятыми обозначениямиОписание команд микропроцессора, упорядоченное по алфавитуОписание команд микропроцессора, упорядоченное по функциональному признакуaaaaadaamaasadcaddandboundbsfbsrbswapbtbtcbtrbtscallcbwcwdeclccldclicmccmpcwdcdqdaadasdecdiventerhltidivimulinincins/insb/insw/insdintintoiret/iretdjccjcxzjecxzjmplahfldsleslfslgslsslealeavelgdtlidtlods/lodsb/lodsw/lodsdlooploopeloopzloopneloopnzmovmovs/movsb/movsw/movsdmovsxmovzxmulnegnopnotoroutoutspoppopapopadpopfpopfdpushpushapushadpushfpushfdrclrcrrep/repe/repz/repne/repnzret/retfrolrorsahfsalsarsbbscas/scasb/scasw/scasdsetccsgdtsidtshlshldshrshrdstcstdstistos/stosb/stosw/stosdsubtestxaddxchgxlat/xlatbxorcmps/cmpsbcmpxchg/cmpsw/cmpsdПорядок описания команд будет следующим:•••••название команды с расшифровкой ее мнемонического обозначения — этооблегчит процесс запоминания и последующего использования команды всоответствии с ее функциональным назначением;синтаксическое описание команды, поясняющее возможные сочетания операндовдля данной команды.
При этом сложные синтаксические описания будутприведены в виде синтаксических диаграмм, что позволит в наиболее компактнойформе изобразить все возможные сочетания операндов;состояние флагов после выполнения команды;описание типового применения команды с примером и (или) ссылка на урок, вкотором демонстрируется пример применения команды;номера занятий и приложений, а также список команд, которые функциональносвязаны с данной командой.Для описания команд приняты обозначения:1. Для описания состояния флагов после выполнения некоторой команды будемиспользовать выборку из таблицы, отражающей структуру регистра флагов eflags:31 18 17 16 15 14 1312 11 10 09 08 07 06 05 04 03 02 01 000 0 VM RF 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF2. В нижней строке этой таблицы приводятся значения флагов после выполнениякоманды.
При этом используются следующие обозначения:o 1 — после выполнения команды флаг устанавливается (равен 1);o 0 — после выполнения команды флаг сбрасывается (равен 0);o r — значение флага зависит от результата работы команды;o ? — после выполнения команды флаг не определен;o пробел — после выполнения команды флаг не изменяется;3. Для представления операндов в синтаксических диаграммах используютсяследующие обозначения:o r8, r16, r32 — операнд в одном из регистров размером байт, слово илидвойное слово;o m8, m16, m32, m48 — операнд в памяти размером байт, слово, двойное словоили 48 бит;o i8, i16, i32 — непосредственный операнд размером байт, слово или двойноеслово;o a8, a16, a32 — относительный адрес (смещение) в сегменте кода.4. На многих диаграммах в целях компактности возможные сочетания операндовпоказаны в виде следующей конструкции:Конструируя команду на основе подобной синтаксической диаграммы, вы должныпомнить о соответствии типов.
В подобной диаграмме допустимы толькоследующие сочетания: "r8, m8", "r16, m16", "r32, m32". Например, сочетание "r8,m16" недопустимо. Однако есть единичные случаи, когда подобные сочетаниявозможны; тогда они специально оговариваются.5. Описанная в данном приложении система команд в полном объеме поддерживаетсямикропроцессором Pentium.
Предыдущие модели микропроцессора могут неподдерживать отдельные команды. Чтобы прояснить этот момент, мы будемуказывать в примерах для каждой команды директиву типа .286. Это будетозначать, что описываемая команда поддерживается всеми моделямимикропроцессора, начиная с i286. Если ничего не указывается, то это означает, чтоданная команда работает на всех моделях микропроцессоров Intel, начиная сi8086/8088.AAA(Ascii Adjust after Addition)ASCII-коррекция после сложенияaaaСхема команды:Назначение: корректировка неупакованного результата сложения двух одноразрядныхнеупакованных BCD-чисел.СинтаксисАлгоритм работы:••проанализировать значение младшего полубайта регистра al и значение флага af;если (значение младшего полубайта регистра al >9) или (AF=1), то выполнитьследующие действия:o увеличить значение al на 6;o очистить старший полубайт регистра al;o увеличить значение ah на 1;o установить флаги: af = 1, cf = 1,иначе сбросить флаги af = 0 и cf = 0.Состояние флагов после выполнения команды:11 07 06 04 02 00OF SF ZF AF PF CF???r?rПрименение:Обычно команда aaa используется после сложения каждого разряда распакованных BCDчисел командой add.
Каждая цифра неупакованного BCD-числа занимает младшийполубайт байта. Если результат сложения двух одноразрядных BCD-чисел больше 9, точисло в младшем полубайте результата не есть BCD-число. Поэтому результат нужнокорректировать командой aaa. Эта команда позволяет сформировать правильное BCDчисло в младшем полубайте и запомнить единицу переноса в старший разряд путемувеличения содержимого регистра ah на 1.К примеру, сложить два неупакованных BCD-числа: 08 + 05:movah,08h ;ah=08hmoval,05h ;al=05haddal,ah;al=al+ah=05h+08h=0dh — не BCD-числоxorah,ah;ah=0aaa;ah=01h,al=03h— результат скорректированСм. также: урок 8, приложение 7 и команды aad, aam, aas, daa, dasAAD(Ascii Adjust before Division)ASCII-коррекция перед делениемaadСхема команды:Назначение:••подготовкa двух неупакованных BCD-чисел для операции деления;преобразование двузначного неупакованного ВCD-числа меньшего 63h (9910) вдвоичное представление.СинтаксисАлгоритм работы:•••умножить значение регистра ah на 10 и сложить полученное значение ссодержимым регистра al: (ah*10)+al;присвоить регистру al значение (ah*10)+al;обнулить регистр ah.Состояние флагов после выполнения команды:11 07 06 04 02 00OF SF ZF AF PF CF?rrrr?Применение:Команду aad используют для подготовки двузначного неупакованного BCD-числа врегистре ax для операции деления.
Так как в системе команд микропроцессора неткоманды деления для BCD-чисел, такое число нужно предварительно преобразовать вдвоичный вид. Для этого старший разряд двузначного BCD-числа помещается в регистрah, умножается на 10 и складывается с разрядом единиц двузначного BCD-числа 9 врегистре al. В результате этих действий и получается соответствующее двоичное число врегистре ax.
Далее в программе уже можно применять обычную команду деления div,оперирующую двоичными данными. Команду aad можно применять и просто дляпреобразования неупакованного двузначного BCD-числа в его двоичный эквивалент. Естьеще интересный момент — если посмотреть на коды символов шестнадцатеричных цифрв таблице ASCII, то видно, что они похожи на BCD-числа. Исключение составляет лишьзначение старшей тетрады (для BCD-числа это так называемая зона с нулевым значением)- оно равно 3.
Можно сделать вывод, что если предварительно обнулить значение старшейтетрады для кодов двух символов (от 0 до 9), то эту команду вполне можно применять идля преобразования двузначных десятичных чисел в символьном представлении в ихдвоичный эквивалент, что и отражено в названии команды. Для иллюстрации рассмотримдва примера.Пример 1. Разделить десятичное число 18 на 9. Подготовить результат к выводу на экран.movah,01h ;ah=01hmoval,08h ;al=08h =>ax=0108hmovbl,09;bl=09haаd;al=12h —двоичный эквивалент десятичного числа18divbl;al=02h,ah=00hогal,30h ;al=32h —ASCII-представление числа 2, можновыводить на экранПример 2.
Преобразовать десятичное число 16 в символьном виде в эквивалентноедвоичное число.movax,3136h;ax=3136handax,0f0fh;ax=0106haаd;al=10h —получили его двоичный эквивалентСм. также: уроки 3, 8, приложение 7 и команды aaa, aam, aas, daa, dasAAM(Ascii Adjust after Multiply)ASCII-коррекция после умноженияСхема команды:Назначение:••aamкорректировка результата умножения двух неупакованных BCD-чисел;преобразование двоичного числа меньшего 63h (9910) в его неупакованный BCDэквивалент.СинтаксисАлгоритм работы:••разделить значение регистра al на 10;записать частное в регистр ah, остаток — в регистр al.Состояние флагов после выполнения команды:11 07 06 04 02 00OF SF ZF AF PF CF?rrrr?Применение:Команду aam используют для коррекции результата умножения двух неупакованныхBCD-чисел.
Специальной команды умножения BCD-чисел нет. Поэтому BCD-числаумножаются поразрядно, как обычные двоичные числа, командой mul. Максимальноечисло, которое получается при таком умножении, — это 9*9=8110=5116. Отсюда понятно,что значения, для которых командой aam можно получить их двузначный BCDэквивалент в регистре ax, находятся в дипазоне от 00h до 51h. Эту команду можноприменять и для преобразования двоичного числа из регистра ax (в диапазоне от 0 до 63h)в его десятичный эквивалент(соответственно, из диапазона от 0 до 9910).Пример 1. Умножить десятичное число 8 на 9.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.