Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_РАБ АРХ_ЭВМ.DOC
Скачиваний:
47
Добавлен:
15.04.2015
Размер:
627 Кб
Скачать
☆

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. Варианты заданий

  1. Скопировать строку в обратном порядке.

  2. Найти строку (список) с ключевым словом.

  3. Найти в строке символ и заменить его.

  4. Найти в строке символ «точка» и после нее заменить все элементы пробелами.

  5. Найти в строке справа налево первый символ «;». Элементы, размещенные справа от ; , заменить пробелами.

  6. Найти две одинаковые строки и одну из них заменить новой.

  7. Составить из 3-х строк (слов) предложение.

  8. Подсчитать число элементов в строке до символа ВК.

  9. Определить в строке число полей, разделенных пробелами. Найти в строке комбинацию двух символов и заменить их.

6.5. Порядок выполнения работы

  1. Изучите форматы цепочечных команд и примеры программ обработки строк (пп. 6.2 - 6.3).

  2. Разработайте для заданного варианта (п. 6.4.) программу обработки строк. Для более наглядного выполнения программы используйте процедуры ввода и изображения строк, приведенные в примере 6.4.

  3. С помощью системных программ (см. работу 4) сформируйте исходный объектный и исполняемый модули.

  4. Выполните программы в отладчике TD.

  5. Выполните программу в DOS.

6.5. Содержание отчета

  1. Программа для заданного варианта.

  2. Результаты выполнения прграммы.

Приложение система команд мп 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,

при mod11 определяет эффективный адрес (ЕА) операнда в памяти в соответствии со следующей таблицей, в которой 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 экз. Заказ .

Рязанская государственная радиотехническая академия.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]