русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ЛАБОРАТОРНАЯ РАБОТА №1.


Дата добавления: 2014-11-28; просмотров: 701; Нарушение авторских прав


 

MOV dest, src Пересылка (копирование) данных из регистра, памяти или непосредственного операнда в регистр или память
XCHG r/m, reg Обмен данными (взаимный) между регистрами или регистром и памятью
BSWAP reg32 Перестановка байтов в регистре из порядка младший-старший в порядок старший-младший (486+)
MOVSXB reg, r/m Копирование байта с расширением до слова или двойного слова, заполняя старшие биты знаком (386+)
MOVSXW reg, r/m Копирование слова с расширением до двойного слова, заполняя старшие биты знаком (386+)
MOVZXB reg, r/m Копирование байта с расширением до слова или двойного слова, заполняя старшие биты нулем (386+)
MOVZXB reg, r/m Копирование слова с расширением до двойного слова, заполняя старшие биты нулем (386+)
XLAT Трансляция (перекодирование) содержимого AL в значение из таблицы трансляции, адресуемой в (Е)BX: AL ← [(E)BX+AL]
LEA reg16/32, mem Загрузка эффективного адреса в регистр
LDS reg16/32, mem Загрузка в регистр (двойного) слова из памяти, а в DS – следующего 16-ти битового слова
LES reg16/32, mem Загрузка в регистр (двойного) слова из памяти, а в ES – следующего 16-ти битового слова
LFS reg16/32, mem Загрузка в регистр (двойного) слова из памяти, а в FS – следующего 16-ти битового слова
LGS reg16/32, mem Загрузка в регистр (двойного) слова из памяти, а в GS – следующего 16-ти битового слова
LSS reg16/32, mem Загрузка в регистр (двойного) слова из памяти, а в SS – следующего 16-ти битового слова
IN AL(AX), port8 Ввод в AL (или AX,EAX) из порта с адресом port8
IN AL(AX), DX Ввод в AL (или AX,EAX) из порта с адресом, хранящимся в DX
OUT port8, AL(AX) Вывод из AL (или AX,EAX) в порт с адресом port8
OUT DX, AL(AX) Вывод из AL (или AX,EAX) в порт с адресом, хранящимся в DX

 



 

6. Перечислите арифметические и логические команды.

 

Таблица 6.1 - Команды работы со стеком

 

PUSH r/m Помещение (двойного) слова из регистра или памяти в стек
PUSH immed Помещение непосредственного операнда в стек (286+)
PUSHA (D) Помещение в стек регистров AX,CX,DX,BX,SP,BP,SI,DI (286+) или их 32-х битовых расширений (386+)
POP r/m Извлечение (двойного) слова данных из стека в регистр или память
POPA (D) Извлечение данных из стека в регистры DI,SI, BP,SP,BX,DX,CX,AX (286+) или их 32-х битовых расширений (386+)
PUSHF (D) Помещение в стек регистра флагов FLAGS (EFLAGS)
POPF (D) Извлечение данных из стека в регистр флагов FLAGS (EFLAGS)

 

Таблица 6.2 - Команды целочисленной арифметики

ADD r/m, r/m/i Сложение двух операндов: r/m ← (r/m + r/m/i)
XADD r/m, reg Обмен и сложение (486+)
ADC r/m, r/m/i Сложение двух операндов с учетом переноса от предыдущей операции: r/m ← (r/m + r/m/i + CF)
INC r/m Увеличение на 1: r/m ← (r/m + 1)
SUB r/m, r/m/i Вычитание: r/m ← (r/m - r/m/i)
SBB r/m, r/m/i Вычитание с заемом: r/m ← (r/m – r/m/i – CF)
DEC r/m Уменьшение на 1: r/m ← (r/m – 1)
CMP r/m, r/m/i Сравнение – вычитание без сохранения результата (только установка флагов)
CMPXCHG r/m, reg Сравнение и обмен данными (486+)
CMPXCHG8B Сравнение и обмен 8 байт (PENTIUM+)
NEG r/m Изменение знака операнда (преобразование в дополни-тельном коде): r/m ← (0 – r/m)
MUL r/m Умножение AL/AX/EAX на беззнаковое целое значение из r/m
IMUL r/m Умножение AL/AX/EAX на целое знаковое значение из r/m
IMUL reg16/32, r/m Знаковое умножение reg16/32 на r/m (помещение результата без расширения разрядности в reg16/32) (16 бит – 286+; 32 бита – 386+)
IMUL reg16/32, r/m, immed Знаковое умножение r/m на 16/32-х битовый непосредственный операнд и помещение результата без расширения разрядности в reg16/32 (16 бит – 286+; 32 бита – 386+)
DIV r/m Деление расширенного аккумулятора на беззнаковое число из r/m
IDIV r/m Знаковое деление расширенного аккумулятора на знаковое целое из r/m
CBW Знаковое расширение байта в аккумуляторе (AL) до слова: AH ← заполняется битом AL[7]
CWD Преобразование слова в двойное слово (расширение знака AX в DX) DX ← заполняется битом AX[15]
CWDE EAX [16¼31] ← заполняется битом AX [15]
CDQ Преобразование двойного слова в – счетверенное: EDX ← заполняется битом EAX [31]
DAA Коррекция AL после BCD-сложения
DAS Коррекция AL после BCD-вычитания
AAA Коррекция AL после ASCII-сложения
AAS Коррекция AL после ASCII-вычитания
AAM Коррекция AL после ASCII-умножения
AAD Коррекция AL,AH перед ASCII-делением
       

 

7. Где расположены операнды в командах умножения и деления? Куда записываются результаты умножений и делений?

 

В одноадресных командах MUL и IMUL один из сомножителей по умолчанию размещается в аккумуляторе (см. табл. 7.1), а второй сомножитель указан в команде. Результат умножения в два раза длиннее операндов.

 

Таблица 7.1 – Размещение первого множителя и результата умножения

 

Разрядность Операндов Множитель Результат
Старшая часть Младшая часть
AL AH AL
AX DX AX
EAX EDX EAX

 

При двухадресной форме (IMUL reg16/32,r/m) или трехадресной форме (IMUL reg16/32, r/m, immed) команд умножения со знаком – результат размещается в регистре-приемнике. В этом случае старшие 16 (или 32) разряда произведения при умножении 16-ти (или 32-х) разрядных операндов теряются. Такие команды удобно применять для вычисления адресов элементов массивов.

Команды деления DIV и IDIV имеют только одноадресную форму, причем разрядность делимого (см. табл. 7.2) должна вдвое превышать разрядность делителя, указанного в команде.

Знак остатка при выполнении команды IDIV устанавливается равным знаку делимого.

 

Таблица 7.2Размещение делимого и результатов деления

 

Разрядность Делителя Делимое Частное Остаток
Старшие разряды Младшие разряды
AH AL AL AH
DX AX AX DX
EDX EAX EAX EDX

 

Для подготовки операнда-делимого двойной длины используются команды расширения аккумулятора знаковыми битами. При выполнении команд – CBW / CWDE (преобразование байта в слово / преобразование слова в двойное слово с расширением в аккумуляторе) – расширенный операнд остается в аккумуляторе. Команды – CWD / CDQ (преобразование слова в двойное слово / преобразование двойного слова в счетверенное слово) – расширяют аккумулятор AX или EAX в регистры DX или EDX соответственно, куда заносится старшая половина (расширенный знак) операнда.

 

8. Какие команды позволяют обрабатывать десятичные данные без перевода их в двоичный формат?

Команда DAA – ДЕСЯТИЧНОЙ КОРРЕКЦИИ АККУМУЛЯТОРА ПОСЛЕ СЛОЖЕНИЯ BCD-чисел выполняет действия над содержимым AL

DAS – ДЕСЯТИЧНАЯ КОРРЕКЦИЯ ПОСЛЕ ВЫЧИТАНИЯ BCD-чисел:

Команда ААА выполняет коррекцию числа в регистре AL, полученного в результате сложения двух распакованных десятичных операндов

Команда AAS выполняет коррекцию числа в регистре AL, полученного в результате вычитания двух распакованных десятичных операндов.

Команда AAM выполняет коррекцию числа в регистре AL, полученного после умножения двух распакованных десятичных операндов.

Команда AAD производит коррекцию делимого ДО ВЫПОЛНЕНИЯ команды деления.

9. Как выполняются команды сдвигов?

Команды сдвигов и циклических сдвигов выполняют сдвиг 8/16/32-х битового операнда на 1 бит или на произвольное число бит (но не больше длины операнда). Для сдвигов более, чем на один бит, число сдвигов может быть записано предварительно в регистр CL или задано непосредственным операндом в команде (286+). Во всех командах сдвигов последний выдвигаемый бит помещается во флаг CF.

В командах двойного сдвига операндом-приемником (dest) может быть содержимое reg16/32 или mem16/32, операндом-источником (src) – только содержимое РОНа (с разрядностью 16/32). Для сдвигов более, чем на один бит, число сдвигов может быть записано предварительно в регистр CL или задано непосредственным операндом в команде.

Внутри процессора операнды dest и src объединяются в промежуточном регистре двойной длины, содержимое которого логически сдвигается влево или вправо. После сдвига в операнд-приемник (dest) помещаются соответствующие сдвинутые биты промежуточного регистра. Содержимое операнда-источника (src) не изменяется. Можно сказать, что в этих командах сдвигается операнд-приемник (dest) и в его освобождающиеся биты «вдвигается» содержимое операнда-источника (src).

 

10. Перечислите цепочечные (строковые) команды и особенности их выполнения.

- Цепочечный примитив MOVSB (MOVSW, MOVSD) – передает элемент цепочки – пересылает байт (слово или двойное слово) из ячейки памяти, смещение которой находится в регистре (E)SI (подразумевается, что цепочка-источник по умолчанию находится в текущем сегменте данных, определяемом регистром DS, но допускается замена сегмента), в ячейку памяти со смещением из (E)DI (цепочка-получатель должна находится только в сегменте, определяемом регистром ES).

- Команда сравнения цепочек CMPSB (CMPSW, CMPSD) – производит вычитание байта (слова или двойного слова) цепочки приемника (dest) из соответствующего элемента цепочки-источника (src).

- Команда сканирования цепочек SCASB (SCASW, SCASD) – производит вычитание элемента цепочки (байт, слово или двойное слово) из содержимого аккумулятора AL/AX/EAX. В зависимости от результатов вычитания устанавливаются флаги, но значения операндов не изменяется

- Команда LODSB (LODSW, LODSD) загружает в аккумулятор (AL/AX/EAX) элемент из цепочки (байт, слово или двойное слово) и продвигает указатель (E)SI на следующий элемент.

- Команда сохранения аккумулятора в цепочке STOSB (STOSW, STOSD) – передает байт (слово или двойное слово) из аккумулятора AL/AX/EAX в элемент цепочки и продвигает регистр-указатель (E)DI на следующий элемент. С префиксом повторения REP эта команда удобна для инициализации цепочки на фиксированное значение.

- Команды ввода и вывода цепочек INSB (INSW, INSD) и OUTSB (OUNSW, OUNSD) как и обычные команды ввода/вывода являются привилегированными.

Команда INS вводит данные из порта, адресуемого регистром DX, в ячейку памяти с адресом ES:(E)DI. После ввода операнда производится модификация регистра (E)DI на 1, 2 или 4 с учетом состояния флага направления DF.

Команда OUTS выводит данные из ячейки памяти с адресом DS:(E)SI в выходной порт, адрес которого находится в регистре DX. После вывода операнда производится коррекция указателя (E)SI.

Обе эти команды могут использоваться с префиксом повторения REP. В этом случае ввод или вывод данных повторяется до обнуления регистра-счетчика (E)CX.

 

11. Как выполняются команды условных и безусловных переходов?

КОМАНДА БЕЗУСЛОВНОГО ПЕРЕХОДА с общей мнемоникой JMP имеет 5 форм, различающихся расстоянием до адреса назначения от текущей команды и способом задания назначения (целевого адреса – target).

· В коротком (SHORT) внутрисегментном переходе двухбайтовая команда JMP rel8 содержит во втором байте смещение в дополнительном коде (максимально возможный переход: назад – 128 или вперед +127 от адреса команды, находящейся после команды JMP).

· Команда прямого внутрисегментного перехода (NEAR) аналогична предыдущей, но полное смещение в дополнительном коде содержит 16 (или 32 бита), которое прибавляется к текущему значению (E)IP. Эта форма команды передает управление в любую точку текущего сегмента кода.

· В команде косвенного внутрисегментного перехода JMP r/m адрес целевого назначения (target) загружается в (E)IP из регистра или ячейки памяти.

· Команда прямого межсегментного перехода JMP prt содержит непосредственный операнд, содержащий: 16-ти битовый селектор, который загружается в регистр CS, и 16-ти (или 32-х) битовое смещение, загружаемое в (E)IP.

· Команда косвенного межсегментного перехода адресует в памяти полный 32-х (или 48-ми) битовый указатель – селектор: смещение. Селектор загружается в регистр CS, а смещение – в регистр (E)IP.

 

КОМАНДЫ УСЛОВНЫХ ПЕРЕХОДОВ осуществляют передачу управления в зависимости от результатов предыдущих операций. Все команды условных переходов производят передачу управления только в пределах текущего сегмента кода (т.е. содержимое сегментного регистра CS не изменяется), если заданное в команде условие удовлетворяется. Переход реализуется прибавлением находящегося в команде смещения (в дополнительном коде) к содержимому регистра (E)IP. В процессорах 86/286 8-ми битовое смещение обеспечивает диапазон перехода от – 128 до +127 байт. В процессорах 386+ наряду с таким смещением допускается также полное 16-ти или 32-х битовое смещение в дополнительном коде. Этим обеспечивается переход в любую точку текущего сегмента кода.

12. Чем отличаются команды JMP и CALL?

 

Команда CALL имеет такие же формы (относительную, прямую и косвенную), как и команда JMP; отсутствует только короткая (SHORT) форма. По воздействию на регистры CS и (E)IP команда CALL также соответствует команде JMP, но дополнительно включает в текущий сегмент стека адрес возврата с соответствующей коррекцией указателя стека (E)SP.

 

 

ЛАБОРАТОРНАЯ РАБОТА №1.



<== предыдущая лекция | следующая лекция ==>
Команды пересылки данных | ТЕОРИЯ ПОГРЕШНОСТЕЙ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 4.969 сек.