- •1. Рекомендации по освоению методики программирования
- •1. Лабораторные работы Лабораторная работа 1 Изучение работы микропроцессора Intel 80х86
- •1. Самостоятельная работа
- •Программа сложения ряда чисел на Intel 80x86
- •2. Содержание отчета
- •2. Содержание лабораторной работы
- •Программа сложения ряда чисел
- •Программа сложения длинных чисел
- •3. Порядок выполнения работы
- •4. Содержание отчета
- •5. Контрольные вопросы
- •Лабораторная работа 3 Обработка массивов информации и организация циклов
- •1. Самостоятельная работа.
- •2. Содержание лабораторной работы
- •Пересылка массива информации из одной области памяти в другую
- •Выборка из массива данных чисел заданного интервала
- •3. Порядок выполнения работы
- •4. Содержание отчета
- •5. Контрольные вопросы
- •Приложения
- •6.1.Операции над целыми числами
- •6.1.1. Пересылка данных и адресов
- •6.1.2. Арифметические операции
- •6.1.3. Логические операции и сдвиги
- •6.2. Операции управления
- •6.2.1. Управление программой
- •6.2.2. Поддержка языка высокого уровня
- •6.2.3. Организация защиты памяти
- •6.2.4. Управление процессором
- •6.3.2. Арифметические операции
- •6.3.3. Операции сравнения
- •6.3.4. Специальные операции
- •6.3.5. Операции управления
- •Библиографический список
- •Оглавление
6.1.Операции над целыми числами
6.1.1. Пересылка данных и адресов
Пересылка данных без преобразования:
MOVПересылка операнда
PUSHЗапись операнда в стек
PUSHAЗапись в стек содержимого всех регистров
POPЧтение операнда из стека
POPAЧтение из стека содержимого всех регистров
XCHGОбмен между регистрами или памятью и регистром
XLATПреобразование кодов
BSWAPПерестановка байтов
Пересылка данных с преобразованием:
MOVSXПересылка байта или слова с расширением знака
MOVZXПересылка байта или слова с расширением нулями
Ввод-вывод данных:
INВвод операнда из порта в аккумулятор
OUTВывод операнда из аккумулятора в порт
Загрузка адреса и селектора:
LEAЗагрузка эффективного адреса ЕА в регистр
LDSЗагрузка селектора в регистрDS
LESЗагрузка селектора в регистрES
LFSЗагрузка селектора в регистрFS
LGSЗагрузка селектора в регистрGS
LSSЗагрузка селектора в регистрSS
6.1.2. Арифметические операции
Сложение:
ADDСложение операндов
ADCСложение операндов с признакомCF(перенос)
XADDОбмен операндами и сложение
INCИнкремент операнда
AAAASCII-коррекция результата сложения
DAAДесятичная коррекция результата сложения
Вычитание:
SUBВычитание операндов
SBBВычитание операндов с признакомCF(заем)
DECДекремент операнда
CMPСравнение операндов
CMPXCHGСравнение и обмен операндами
NEGИзменение знака операнда (с переводом в дополнительный код)
AASASCII-коррекция результата вычитания
DASДесятичная коррекция результата вычитания
Умножение:
MULБеззнаковое умножение
IMULЗнаковое (целочисленное) умножение
AMMASCII-коррекция результата умножения
Деление:
DIVБеззнаковое деление
IDIVЗнаковое (целочисленное) деление
AADASCII-коррекция результата деления
Изменения разрядности путем расширения знака:
CBWПреобразование байта (AL) в слово (AX)
CWDEПреобразование слова (АХ) в двойное слово (ЕАХ)
CWDПреобразование слова (АХ) в двойное слово (DX,AX)
CDQПреобразование двойного слова (ЕАХ) в учетверенное слово (EDX,EAX)
6.1.3. Логические операции и сдвиги
Логические операции:
NOTИнверсия операнда (логическое НЕ)
ANDКонъюнкция операндов (логическое И)
ORДизъюнкция операндов (логическое ИЛИ)
XORНеравнозначность операндов (исключающее ИЛИ)
TESTЛогическое сравнение операндов (установка признаковZF,SF,PF)
Сдвиги:
SHL/SALСдвиг влево
SHRЛогический сдвиг вправо
SARАрифметический сдвиг вправо
SHLDДвухоперандный сдвиг влево
SHRDДвухоперандный сдвиг вправо
ROLЦиклический сдвиг влево
RORЦиклический сдвиг вправо
RCLЦиклический сдвиг влево через перенос (CF)
RCRЦиклический сдвиг вправо через перенос (CF)
Операции с битами:
ВТ Проверка бита
BTSПроверка и установка бита
BTRПроверка и сброс бита
ВТС Проверка и инверсия бита
BSFПрямое сканирование битов
BSRОбратное сканирование битов
Операции со строками символов:
LODSЗагрузка символа в аккумулятор
STOSЗапись символа из аккумулятора
INSВвод символа
OUTSВывод символа
MOVSПересылка символа
CMPSСравнение символов
SCASСканирование строки символов
6.2. Операции управления
6.2.1. Управление программой
Безусловная передача управления:
JMPБезусловный переход
CALLВызов подпрограммы
RETВозврат из подпрограммы
Условные переходы без учета знака:
JA/JNBEПереход, если выше (не ниже и не равно)
JAE/JNB/JNCПереход, если (CF)=0: выше или равно (не ниже)
JB/JNAE/JCПереход, если (CF)=1: ниже (не выше и не равно)
JBE/JNAПереход, если ниже или равно (не выше)
JE/JZПереход, если равно (нуль): (ZF)=1
JNE/JNZПереход, если не равно (не нуль): (ZF)=0
JP/JPEПереход, если четность: (PF)=1
JNP/JPOПереход, если нечетность: (PF)=0
Условные переходы с учетом знака:
JG/JNLEПереход, если больше (не меньше и не равно)
JGE/JNLПереход, если больше или равно (не меньше)
JL/JNGEПереход, если меньше (не больше и не равно)
JLE/JNGПереход, если меньше или равно (не больше)
JSПереход, если отрицательно: (SF)=1
JNSПереход, если положительно (SF)=0
JOПереход, если переполнение: (OF)=1
JNOПереход, если нет переполнения (OF)=0
Условная установка байта:
SETA/SETNBEУстановка, если выше (не ниже и не равно)
SETAE/SETNBУстановка, если выше или равно (не ниже)
SETB/SETNAEУстановка, если ниже (не выше и не равно)
SETBE/SETNAУстановка, если ниже или равно (не выше)
SETE/SETZУстановка, если равно (нуль): (ZF)=1
SETNE/SETNZУстановка, если не равно (не нуль): (ZF)=0
SETP/SETPEУстановка, если четность: (PF)=1
SETNP/SETPOУстановка, если нечетность: (PF)=0
SETG/SETNLEУстановка, если не больше (не меньше и не равно)
SETGE/SETNLУстановка, если больше или равно (не меньше)
SETL/SETNGEУстановка, если меньше (не больше и не равно)
SETLE/SETNGУстановка, если меньше и не равно (не больше)
SETSУстановка, если отрицательно: (SF)=1
SETNSУстановка, если положительно: (SF)=0
SETOУстановка, если переполнение: (OF)=1
SETNOУстановка, если нет переполнения: (OF)=0
Прерывания:
INTПрерывание
INT0 Прерывание по переполнению: (OF)=1
INT3 Прерывание в контрольной точке
IRETВозврат из подпрограммы прерывания
CLIЗапрещение прерываний
STIРазрешение прерываний
Организация циклов:
LOOPРеализация циклов, пока (ECX)≠0
LOOPE/LOOPZРеализация циклов, пока (ECX)≠0 или (ZF)=1
LOOPNE/LOOPNZРеализация циклов, пока (ECX)≠0 или (ZF)=0
JCXZ(JECXZ) Реализация циклов, пока (СХ)=0 или (ЕСХ)=0
Операции над признаками:
LAHFЗагрузка признаков в регистр АН
SAHFЗапись содержимого АН в регистр признаков
PUSHFЗапись содержимого регистра признаков в стек
POPFЧтение содержимого регистра признаков из стека
CLCСброс признака переноса: (CF)=0
STCУстановка признака переноса: (CF)=1
CMCИнвертирование признака переноса (СF)
CLDСброс признака направления: (DF)=0
CTDУстановка признака направления: (DF)=1