
- •История разработки микропроцессоров
- •3.Регистр флагов eflags/flags
- •Сегментная организация памяти
- •Сегментная организация памяти в защищенном режиме
- •Страничная организация памяти
- •Команды передачи данных
- •Двоично-десятичная арифметика
- •2.Команда add
- •Команда sar
- •Команда shr
- •Особые случаи
- •Округления
Страничная организация памяти
Линейный адрес
31 22 12 0
Каталог Таблица Относительный адрес


Базовый адрес каталога






Адрес
Таблица страниц Страница
памяти
Каталог
Страниц
Формат команды
Элемент команды |
Префикс |
КОП |
MOD R/M |
SIB |
Смещение |
Данные |
Формат в байтах |
0-4 |
1-2 |
0-1 |
0-1 |
0-4 |
0-4 |
Минимальный размер – 1 байт (КОП), максимальный – 13 байт
Префикс - 0 – повторение при обработке строк, 1 – размер адреса, 2- размер операнда, 3- смена сегмента.
MOD R/M – 7-6 разряды – режим адресации, 5-3 разряды REG/КОП, 2-0 разряды - R/M – дополнение к режиму адресации.
Обозначения при описании команд микропроцессора:
reg8, reg16, reg32 – 8-, 16- или 32-разрядный регистр общего назначения;
mem8, mem16 или mem32 - 8-, 16- или 32-разрядная ячейка памяти;
sreg - сегментный регистр;
imm8, imm16 или imm32 - 8-, 16- или 32-разрядный непосредственный операнд;
r/m - регистр или ячейка памяти;
src - источник;
dst - приемник.
Команды передачи данных
общие передачи данных;
преобразования данных;
передачи данных с привлечением стека;
передачи адресных объектов;
передачи ввода-вывода;
флажковые передачи;
Общие передачи данных
mov dst, src dst (src)
mov reg, imm ; загрузка константы в регистр
mov reg/mem, imm ; загрузка константы в регистр или
память
mov reg/mem, reg ; передача из регистра в регистр или
память
mov reg, reg/mem ; передача из памяти или регистра в
регистр
mov sreg, reg/mem16 ; загрузка сегментного регистра из
регистра или памяти
mov reg/mem16, sreg ; сохранение сегментного регистра.
В эту же подгруппу входит команда обмена XCHG:
xchg dst, src (dst)(src)
и имеется два формата этой команды:
xchg reg, mem/reg
xchg mem/reg, reg.
Эта команда осуществляет обмен содержимого источника и приемника.
В подгруппу команд стековой передачи относятся следующие команды:
команда PUSH reg/mem16 - помещение в стек слова из регистра или памяти;
команда PUSH reg/mem32 - помещение в стек двойного слова из регистра или памяти;
команда PUSHA - помещение в стек всех 16-разрядных регистров;
команда PUSHAD - помещение в стек всех 32-разрядных регистров;
команда PUSH imm16/32 - помещение в стек непосредственного операнда слова или двойного слова;
команда POP reg/mem16 - извлечение из стека слова в регистр или память;
команда POP reg/mem32 - извлечение из стека двойного слова в регистр или память;
команда POPA - извлечение из стека данных и занесение их во все 16-разрядные регистры;
команда POPAD - извлечение из стека данных и занесение их во все 32-разрядные регистры;
команда POP sreg - извлечение из стека слова и помещение его в сегментный регистр (кроме сегментного регистра CS).
Команды передачи адресных объектов отличаются от других команд передачи тем, что при их выполнении в адресуемый регистр загружаются не данные, а адреса. Основное применение таких команд связано с инициализацией регистров-указателей при адресации структур данных в памяти.
Команда загрузки эффективного адреса LEA имеет следующие применяемые форматы:
lea reg16, mem16
lea reg32, mem16
lea reg16, mem32
lea reg32, mem32.
При выполнении этой команды вычисляется адрес памяти (т.е. смещение в сегменте) и этот адрес загружается в регистр.
Пять команд LDS, LES, LFS, LGS и LSS имеют одинаковый формат:
Lsreg reg16, mem32
Lsreg reg32, mem48
и предназначены для одновременной загрузки в любой регистр общего назначения и один из сегментных регистров полного указателя селектор:смещение.
Команды IN ввода и OUT вывода предназначены для обращения к портам, расположенным в адресном пространстве ввода-вывода. Эти команды имеют следующие форматы:
in acc, port ; ввод из фиксированного порта
in acc, dx ; ввод из переменного порта
out port, acc ; вывод в фиксированный порт
out dx, acc ; вывод в переменный порт.
В этих форматах acc обозначает аккумулятор, т.е. регистр EAX/AX/AL, а port – 8-разрядное непосредственное значение, которое считается адресом порта и при выполнении команды расширяется нулем до 16 бит. При использовании в команде регистра DX 16-разрядный адрес порта берется из этого регистра.
Подгруппа команд флажковых передач содержит несколько команд, которые обеспечивают доступ к флагам процессора.
Команда LAHF загрузки флагов в регистр AH копирует младший байт регистра EFLAGS в регистр AH, в котором флаги можно изменить или сохранить. Команда SAHF передает содержимое регистра AH в младший байт регистра EFLAGS.
Две команды PUSHF(D) и POPF(D) используются для включения в стек и извлечения из стека содержимого регистра EFLAGS/FLAGS.
В моделях микропроцессоров, начиная с 80386, появилось некоторое количество новых команд, относящихся к этой же группе. Команда MOVSX передает 8-разрядный источник в 16- или 32-разрядный приемник или 16-разрядный источник в 32-разрядный приемник с дублированием старшего знакового разряда в старшие разряды приемника. В качестве источника может быть указан операнд, находящийся в регистре или в памяти с любым режимом адресации, а приемником может быть только регистр общего назначения.
Команда MOVZX полностью аналогична команде MOVSX, но она дублирует в старшие разряды приемника нули. Команды CBW и CWDE похожи на команду MOVSX, однако они выполняются только на регистре EAX: команда CBW преобразует байт AL в слово AX, а команда CWDE преобразует слово AX в двойное слово EAX путем расширения знакового разряда.
Команда CWD осуществляет преобразование слова, находящегося в регистре AX в двойное слово, которое располагается в регистрах DX:AX, путем расширения знака, и таким же образом команда CDQ преобразует двойное слово, находящееся в регистре EAX, в учетверенное слово, которое располагается в регистрах EDX:EAX.
Команда SETcc предназначена для того, чтобы сохранить зафиксированное флагами условие для дальнейших вычислений. Эта команда имеет следующий общий формат:
SETcc reg/mem8.
Если проверяемое в команде условие выполняется, то в байт reg/mem8 записывается код 01H, а если условие не выполняется – код 00H. Условие, задаваемое в мнемонике команды (cc), полностью соответствует условиям, представленным в командах условного перехода.
В микропроцессорах шестого поколения появились команды условных передач, при которых передача осуществляется только при выполнении условий, заданных флагами. Общий формат этих команд выглядит следующим образом:
CMOVcc reg, reg/mem.
Выполнение этих команд заключается в том, что при выполнении указанных в команде условий осуществляется пересылка содержимого регистра или памяти в регистр.
При выполнении команды BSWAP r32 осуществляется перестановка байт: в указанном регистре меняются местами первый байт с четвертым, а второй с третьим.
Команда CMPXCHG r/m,r сравнения и обмена использует три операнда: операнд-источник в регистре, операнд-приемник в памяти и аккумулятор (т.е. регистр AL, AX или EAX в зависимости от размера операнда). Если значения в операнде-приемнике и аккумуляторе равны, то операнд-приемник заменяется операндом-источником. В противном случае исходное значение операнда-приемника загружается в аккумулятор.
Необходимо отметить, что команды передачи данных не изменяют значения арифметических флагов (за некоторым исключением).
Десятичная арифметика
На этой странице мы рассмотрим команды десятичной арифметики. Конечно, без них можно обойтись, но фирма Intel их ввела начиная с процессоров 8086! Значит, для чего-то они нужны. Они позволяют ускорить вычисления в десятичной системе счисления. Числа состоят из байтов, в каждом полубайте хранится одна цифра (от 0 до 9). С помощью команд десятичной арифметики мы можем сложить, например, 2 тысячезначных десятичных числа быстрее, чем без неё. При этом следует понимать, что при выполнении арифметических операций над десятичными числами следует пользоваться теми же самыми командами, что и для двоичных чисел (add, sub, mul, div, и т д), но использовать дополнительно коррекцию результата, о которой мы и будем говорить на данной странице
Понятие упакованного и неупакованного числа.
Упакованное число в байте 0100 1001 - 49h
Неупакованное число в байте 0100 1101 – 4Dh
Преобразование в упакованное число заключается в изменение значения в тетраде, в которой имеется недопустимая комбинация (>9) . Последнее число может быть преобразовано в упакованное 0101 0011, так как в двоично- десятичном представлении 4Dh – это 40 + 10 + 3