- •Микропроцессоры intel 80х86
- •Лабораторная работа 1 организация микросистем на базе микропроцессоров i8086
- •1.1. Цель работы
- •1.2. Принципы организации микросистем на базе мп i8086 (к1810вм86)
- •1.3. Структурная схема микропроцессора i8086 (рис. 1.2)
- •Пример 1.1
- •1.4. Программная модель мп (рис. 1.4.)
- •1.5 Адресная организация памяти, представление данных
- •1.6. Примеры форматов команд мп i8086
- •1.7. Пример разработки программы в машинных кодах
- •1.8. Отладчик td
- •1.9. Варианты заданий
- •1.10. Порядок выполнения работы
- •1.11. Содержание отчета
- •2.3. Режимы адресации
- •Пример 2.2.Команда mov [si],ax
- •2.4. Программа сложения многобайтных bcd-чисел
- •2.5. Варианты заданий
- •2.6. Порядок выполнения работы
- •2.7. Содержание отчета
- •Лабораторная работа 3
- •3.1. Цель работы
- •3.2. Элементы языка ассемблера мп 80х86
- •В таблице 3.1 приведены примеры записи директив ассемблера tasm.
- •3.3. Примеры программ на языке ассемблера мп х86
- •3.4 Ассемблер tasm. Трансляция исходного модуля
- •3.5. Порядок выполнения работы
- •3.6. Содержание отчета
- •Лабораторная работа 4
- •4.1. Цель работы
- •4.2. Состав системного программного обеспечения пэвм
- •4.3. Пример программы на языке ассемблера мп х86 для генерирования исполняемого модуля типа .Exe
- •4.4. Порядок выполнения работы
- •Создание исходного файла программы
- •Создание объектного и исполняемого модулей
- •Выполнение и отладка программы
- •4.5. Содержание отчета
- •Лабораторная работа 5
- •5.1. Цель работы
- •5.2. Особенности разработки 32-разрядных программ на языке ассемблера мп i80x86 для реального режима
- •5.3. Порядок выполнения работы
- •5.4. Содержание отчета
- •Команды обработки цепочек мп х86
- •6.1. Цель работы
- •6.2. Цепочечные команды
- •6.3. Ввод строковых данных в пэвм
- •6.4. Варианты заданий
- •6.5. Порядок выполнения работы
- •6.5. Содержание отчета
- •Приложение система команд мп Intel 8086
- •390005, Г. Рязань, ул. Гагарина, 59/1. Редакционно-издательский центр ргрта.
6.3. Ввод строковых данных в пэвм
Значения элементов в строке можно задать с помощью директивы DB или DW.
При вводе строки с клавиатуры целесообразно пользоваться функцией DOS 0AH, вызываемой командой INT 21H. Чтобы воспользоваться ей, необходимо зарезервировать в сегменте данных место для строки. Например, оператор
string db 64,65 dup(?)
резервирует место для строки STRING, содержащей 64 элемента.
Чтение строки с клавиатуры в память без изображения на экране производится командами, приведенными в примере 6.4.
Пример 6.4. Чтение строки с клавиатуры
lea dx, string ;Сделать DX указателем буфера
mov ah,0ah ;Прочитать
int 21h ;строку. Ввод завершить нажатием <ВК>
После их выполнения в 1-м байте буфера STRING находится длина буфера 64, во 2-м – число фактически введенных символов. Элементы строки STRING+2 размещаются с 3-го байта.
6.4. Варианты заданий
Скопировать строку в обратном порядке.
Найти строку (список) с ключевым словом.
Найти в строке символ и заменить его.
Найти в строке символ «точка» и после нее заменить все элементы пробелами.
Найти в строке справа налево первый символ «;». Элементы, размещенные справа от ; , заменить пробелами.
Найти две одинаковые строки и одну из них заменить новой.
Составить из 3-х строк (слов) предложение.
Подсчитать число элементов в строке до символа ВК.
Определить в строке число полей, разделенных пробелами. Найти в строке комбинацию двух символов и заменить их.
6.5. Порядок выполнения работы
Изучите форматы цепочечных команд и примеры программ обработки строк (пп. 6.2 - 6.3).
Разработайте для заданного варианта (п. 6.4.) программу обработки строк. Для более наглядного выполнения программы используйте процедуры ввода и изображения строк, приведенные в примере 6.4.
С помощью системных программ (см. работу 4) сформируйте исходный объектный и исполняемый модули.
Выполните программы в отладчике TD.
Выполните программу в DOS.
6.5. Содержание отчета
Программа для заданного варианта.
Результаты выполнения прграммы.
Приложение система команд мп Intel 8086
При описании команд используются следующие обозначения:
reg - один из РОН в соответствии со следующей таблицей:
|
reg 000 010 100 110 |
W=1 AX DX SP SI |
W=0 AL DL AH DH |
reg 001 011 101 111 |
W=1 CX BX BP DI |
W=0 CL BL CH BH |
sreg 00 01 10 11 |
Сегм. рег. ES CS SS DS |
D - если D=l, то в reg, если D=0, то из reg;
W - если W=l, то команда оперирует словом, - W=0, то - байтом;
Х0- один байт данных.
S:W = 01 - два байта данных,
11 - один байт данных, расширенный со знаком до 16 бит;
V - если V=0, то счетчик равен 1, V=l - счетчик в CL;
Z - применяется в цепочечных командах для сравнения с ZF;
data L, data H - младшая и старшая часть (если W=l) непосредственного операнда;
mod - поле режима адресации;
r/m - при mod=11 интерпретируется как reg,
при mod11 определяет эффективный адрес (ЕА) операнда в памяти в соответствии со следующей таблицей, в которой disp L, disp H,L - 8- и 16-битные смещения в 3-м или в (3-4)-м байтах команды:
|
mod r/m
|
00 |
01 |
10 |
|
000 001 010 011 100 101 110 111 |
(BX)+(SI) (BX)+(DI) (BP)+(SI) (BP)+(DI) (SI) (DI) disp H,L (BX) |
(BX)+(SI)+disp L (BX)+(DI)+disp L (BP)+(SI)+disp L (BP)+(DI)+disp L (SI)+disp L (DI)+disp L (BP)+disp L (BX)+disp L |
(BX)+(SI)+disp H,L (BX)+(DI)+disp H,L (BP)+(SI)+disp H,L (BP)+(DI)+disp H,L (SI)+disp H,L (DI)+disp H,L (BP)+disp H,L (BX)+disp H,L |
Команды передачи данных
|
Команды |
1-й байт |
2-й байт |
3-й байт |
4-й байт |
|
MOV – передать |
|
|
|
|
|
Регистр или память в/из регистра |
100010DW |
mod reg r/m |
|
|
|
Непосредственный операнд в регистр или память |
1100011W |
mod 000 r/m |
data L |
data H (W=1) |
|
Непосредственный операнд в регистр (спецформат) |
1011Wreg |
data L |
data H, (W=1) |
|
|
Память в аккумулятор (спецформат) |
1010000W |
Мл. адрес EA |
ст. адрес EA |
|
|
Аккумулятор в память (спецформат) |
1010001W |
Мл. адрес EA |
ст. адрес EA |
|
|
Регистр или память в регистр сегмента |
10001110 |
mod 0 sreg r/m |
|
|
|
Регистр сегмента в регистр или память |
10001100 |
mod 0 sreg r/m |
|
|
|
PUSH – включить в стек |
|
|
|
|
|
Регистр/память |
11111111 |
mod 110 r/m |
|
|
|
Регистр (спецформат) |
01010reg |
|
|
|
|
Регистр сегмента |
000sreg110 |
|
|
|
|
POP – исключить |
|
|
|
|
|
Регистр/память из стека |
10001111 |
mod 000 r/m |
|
|
|
Регистр (спецформат) |
01011reg |
|
|
|
|
Регистр сегмента |
000sreg111 |
|
|
|
|
XCHG – обменять |
|
|
|
|
|
Регистр/память с регистром |
1000011W |
mod reg r/m |
|
|
|
Регистр с аккумулятором |
10010reg |
|
|
|
|
IN – ввести из |
|
|
|
|
|
Фиксированного порта |
1110010W |
Порт |
|
|
|
Переменного порта |
1110110W |
|
|
|
|
OUT – вывести в |
|
|
|
|
|
Переменный порт |
1110111W |
|
|
|
|
Фиксированный порт |
1110110W |
Порт |
|
|
|
XLAT – передать байт в AL |
11010111 |
|
|
|
|
LEA – загрузить EA в регистр |
10001101 |
mod reg r/m |
|
|
|
LDS–загрузить указатель в DS |
11000101 |
mod reg r/m |
|
|
|
LES–загрузить указатель в ES |
11000100 |
mod reg r/m |
|
|
|
LAHF – загрузить в AH признаки |
10011111 |
|
|
|
|
SAHF – запомнить AH в регистре признаков |
10011110 |
|
|
|
|
PUSHF – включить признаки |
10011100 |
|
|
|
|
POPF – исключить признаки |
10011101 |
|
|
|
Команды арифметических операций
|
Команды |
1-й байт |
2-й байт |
3-й байт |
4-й байт |
|
ADD – сложить |
|
|
|
|
|
Регистр/память с регистром |
000000DW |
mod reg r/m |
|
|
|
Непосредственный операнд c регистром/памятью |
100000SW |
mod 000 r/m |
data L |
data H (SW=01) |
|
Непосредственный операнд с аккумулятором |
0000010W |
data L |
data H, (w=1) |
|
|
ADC – сложить с переносом |
|
|
|
|
|
Регистр/память с регистром |
000100DW |
mod reg r/m |
|
|
|
Непосредственный операнд c регистром/памятью |
100000SW |
mod 010 r/m |
data L |
data H (SW=01) |
|
Непосредственный операнд с аккумулятором |
0001010W |
data L |
data H, (w=1) |
|
|
INC – инкремент |
|
|
|
|
|
Регистра/памяти |
1111111W |
mod 000 r/m |
|
|
|
Регистра |
01000reg |
|
|
|
|
AAA – ASCII – коррекция сложения |
00110111 |
|
|
|
|
DAA – десятичная коррекция сложения |
00100111 |
|
|
|
|
SUB – вычесть |
|
|
|
|
|
Регистр/память с регистром |
001010DW |
mod reg r/m |
|
|
|
Непосредственный операнд из регистра/памяти |
100000SW |
mod 101 r/m |
data L |
data H (SW=01) |
|
Непосредственный операнд из аккумулятора |
0010110W |
data L |
data H, (w=1) |
|
|
SBB – вычесть с заемом |
|
|
|
|
|
Регистр/память с регистром |
000110DW |
mod reg r/m |
|
|
|
Непосредственный операнд из регистра/памяти |
100000SW |
mod 011 r/m |
data L |
data H (SW=01) |
|
Непосредственный операнд из аккумулятора |
0010110W |
data L |
data H, (w=1) |
|
|
DEC – декремент |
|
|
|
|
|
Регистр/память |
1111111W |
mod 001 r/m |
|
|
|
Регистр |
01001reg |
|
|
|
|
NEG – изменить знак |
1111011W |
mod 011 r/m |
|
|
|
CMP - сравнить |
|
|
|
|
|
Регистр/память и регистр |
001110DW |
mod reg r/m |
|
|
|
Непосредственный операнд c регистром/памятью |
100000SW |
mod 111 r/m |
data L |
data H (SW=01) |
|
Непосредственный операнд с аккумулятором |
0011110W |
data L |
data H, (w=1) |
|
|
AAS – ASCII коррекция вычитания |
00111111 |
|
|
|
|
DAS – десятичная коррекция вычитания |
00101111 |
|
|
|
|
IMUL – умножение целых со знаком |
1111011W |
mod 101 r/m |
|
|
|
MUL – умножение без знака
|
1111011W |
mod 100 r/m |
|
|
|
AAM – ASCII – коррекция умножения |
11010100 |
00 001 010 |
|
|
|
DIV – деление без знака |
1111011W |
mod 110 r/m |
|
|
|
IDIV – деление со знаком |
1111011W |
mod 111 r/m |
|
|
|
AAD – ASCII коррекция деления |
11010101 |
00 001 010 |
|
|
|
CBW – преобразование байта в слово |
10011000 |
|
|
|
|
CWD – преобразование слова в двойное слово |
10011001 |
|
|
|
Команды логических операций и сдвигов
|
Команды |
1-й байт |
2-й байт |
3-й байт |
4-й байт |
|
NOT – инвертирование |
1111011W |
mod 010 r/m |
|
|
|
SHL/SAL – сдвиг логический/арифм. влево |
110100VW |
mod 100 r/m |
|
|
|
SHR – сдвиг логич. вправо |
110100VW |
mod 101 r/m |
|
|
|
SAR – сдвиг арифм. вправо |
110100VW |
mod 111 r/m |
|
|
|
ROL – сдвиг цикл. влево |
110100VW |
mod 000 r/m |
|
|
|
ROR – сдвиг цикл. вправо |
110100VW |
mod 001 r/m |
|
|
|
RCL – сдвиг цикл. влево |
110100VW |
mod 010 r/m |
|
|
|
RCR – сдвиг цикл. вправо через перенос |
110100VW |
mod 011 r/m |
|
|
|
AND – коньюнкция И |
|
|
|
|
|
Регистр/память с регистром |
001000DW |
mod reg r/m |
|
|
|
Непосредственный операнд c регистром/памятью |
1000000W |
mod 100 r/m |
data L |
data H (W=1) |
|
Непосредственный операнд с аккумулятором |
0010010W |
data L |
data H (W=1) |
|
|
TEST – И без записи результ. |
|
|
|
|
|
Непосред. операнд с аккум. |
1010100DW |
data L |
data H |
|
|
Регистр/память с регистром |
1000010W |
mod reg r/m |
|
|
|
Непосредственный операнд c регистром/памятью |
1111011W |
mod 000 r/m |
data L |
data H (W=1) |
|
OR – дизьюнкция ИЛИ |
|
|
|
|
|
Регистр/память с регистром |
000010DW |
mod reg r/m |
|
|
|
Непосредственный операнд c регистром/памятью |
1000000W |
mod 001 r/m |
|
|
|
Непосредственный операнд с аккумулятором |
0000110W |
data L |
data H (W=1) |
|
|
XOR – ИЛИ исключающее |
|
|
|
|
|
Регистр/память с регистром |
001100DW |
mod reg r/m |
|
|
|
Непосредственный операнд c регистром/памятью |
1000000W |
mod 001 r/m |
data L |
data H (W=1) |
|
Непосредственный операнд с аккумулятором |
0011010W |
data L |
data H (W=1) |
|
Команды операций с цепочками данных
-
Команды
1-й байт
REP - повторить
1111001Z
MOVS – передать байт/слово: [DI] [SI]
1010010W
CMPS – сравнить байт/слово: [DI] [SI]
1010011W
SCAS – сканировать байт/слово: асс [DI]
1010111W
LODS – загрузить байт/слово из [SI] в AL/AX
1010110W
STOS – запомнить байт/слово из AL/AX в[DI]
1010101W
Команды передачи управления (безусловные)
|
Команды |
1-й байт |
2-й байт |
3-й байт |
|
CALL – ВЫЗОВ |
|
|
|
|
Прямой в сегменте |
11101000 |
Мл. смещ. |
Ст. смещ. |
|
Косвенный в сегменте |
11111111 |
mod 010 r/m |
|
|
Прямой межсегментный |
10011010 |
Мл. смещ. |
Ст. смещ. |
|
|
|
Мл. сег. (4-й байт) |
Мл.сег.(5-й байт) |
|
Косвенный межсегментный (mod 11) |
11111111 |
mod 011 r/m |
|
|
JMP – БЕЗУСЛ. ПЕРЕХОД |
|
|
|
|
Прямой в сегменте |
11101001 |
Мл. смещ. |
Ст. смещ. |
|
Прямой в сегменте короткий |
11101011 |
Смещение |
|
|
Косвенный в сегменте |
11111111 |
mod 100 r/m |
|
|
Прямой межсегментный |
11101010 |
Мл. смещ. |
Ст. смещ. |
|
|
|
Мл. сег.(4-й байт) |
Мл.сег.(5-й байт) |
|
Косвенный межсегментный (mod 11) |
11111111 |
mod 101 r/m |
|
|
RET – ВОЗВРАТ |
|
|
|
|
В сегменте со слож. непосредст. операнда с SP |
11000010 |
data L |
data H |
|
В сегменте |
11000010 |
|
|
|
Межсегментный |
11001011 |
|
|
|
Межсегментный со слож. непосредст. операнда с SP |
11001010 |
data L |
data H |
Команды условных переходов и циклов
|
Команды |
Условие |
|
|
|
|
|
JA/JNBE |
CF ZF=0 |
> |
77 |
Смещ. |
Перейти, если выше* /не ниже или равно |
|
JNC/JAE/JNB |
CF=0 |
>= |
73 |
Смещ. |
Выше или равно/ не ниже (нет переноса) |
|
JC/JB/JNAE |
CF=1 |
< |
72 |
Смещ. |
Ниже/не выше или равно (есть перенос) |
|
JBE/JNA |
CF ZF=1 |
<= |
76 |
Смещ. |
Ниже или равно/не выше |
|
JE/JZ |
ZF=1 |
= |
74 |
Смещ. |
Равно/нуль |
|
JG/JNLE |
(SF+OF)ZF=0 |
> |
7F |
Смещ. |
Больше* /не меньше и = |
|
JGE/JNL |
SF+OF=0 |
>= |
7D |
Смещ. |
Больше или равно/не меньше |
|
JL/JNGE |
SF+OF=1 |
< |
7C |
Смещ. |
Меньше/не больше или равно |
|
JLE/JNG |
(SF+OF)ZF=1 |
<= |
7E |
Смещ. |
Меньше или равно/не равно |
|
JNZ/JNE |
ZF=0 |
|
75 |
Смещ. |
Не равно/не нуль |
|
JNO |
OF=0 |
|
71 |
Смещ. |
Нет переполнения |
|
JNP/JPO |
PF=0 |
|
7B |
Смещ. |
Нет паритета/паритет нечетный |
|
JNS |
SF=0 |
|
79 |
Смещ. |
Нет знака (отрицание) |
|
JO |
OF=1 |
|
70 |
Смещ. |
Есть переполнение |
|
JP/JPE |
PF=1 |
|
7A |
Смещ. |
Есть паритет/паритет четный |
|
JS |
SF=1 |
|
78 |
Смещ. |
Есть знак (отрицательный) |
|
JCNX |
(CX)=0 |
|
E3 |
Смещ. |
Содержение регистра CX=0 |
|
LOOP |
(CX) 0 |
|
E2 |
Смещ. |
Зациклить CX раз |
|
LOOPZ/LOOPE |
(CX)0, ZF=1 |
|
E1 |
Смещ. |
Зациклить до нуля/равно |
|
LOOPNZ/LOOPNE |
(CX)0, ZF=0 |
|
E0 |
Смещ. |
Зацикл. до нуля/не равно |
* Термины “больше”, “меньше” относятся к знаковым числам, представленным в ДК, а “выше”, “ниже” – к беззнаковым.
Команды прерывания
-
Команды
1-й байт
2-й байт
INT - прерывание
11001101
Тип
INT 3 – прерывание типа 3
11001100
INTO – прерывание по переп.
11001110
IRET – возврат из прерывания
11001111
Команды управления микропроцессором
-
Команды
1-й байт
2-й байт
CLC – сброс переноса
11111000
CMC – дополнение переноса
11110101
STC – установка переноса
11111001
STD – установка направления
11111101
CLD – сброс направления
11111100
CLI – брос прерываний
11111010
STI – установка прерываний
11111011
HLT – останов
11110100
WAIT – ожидание
10011011
ESC – обращение к сопроцес.
11011xxx
mod yyy r/m
LOCK – префикс блокировки
11110000
Префикс замены сегмента: 001sreg110
СОДЕРЖАНИе
|
1. ЛАБОРАТОРНАЯ РАБОТА 1………………….…………........................ |
3 |
|
2. ЛАБОРАТОРНАЯ РАБОТА 2..................…............................................... |
16 |
|
3. ЛАБОРАТОРНАЯ РАБОТА 3..............…................................................... |
25 |
|
4. ЛАБОРАТОРНАЯ РАБОТА 4........……..................................................... |
30 |
|
5. ЛАБОРАТОРНАЯ РАБОТА 4...….............................................................. |
35 |
|
6. ЛАБОРАТОРНАЯ РАБОТА 4…................................................................. |
38 |
|
ПРИЛОЖЕНИЕ. СИСТЕМА КОМАНД МП Intel 8086…....................... |
41 |
МИКРОПРОЦЕССОРЫ INTEL 80Х86.
АРХИТЕКТУРА И ПРОГРАММИРОВАНИЕ
Составил Л о к т ю х и н В и к т о р Н и к о л а е в и ч
Редактор И.П. Перехрест Корректор М.Е. Цветкова Подписано в печать 9.01.03. Формат бумаги 60x84 1/16.
Бумага офсетная. Печать трафаретная. Усл. печ.л. 3,0. Уч.-изд.л. 3,0. Тираж 75 экз. Заказ .
Рязанская государственная радиотехническая академия.
