Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
34
Добавлен:
15.03.2016
Размер:
526.92 Кб
Скачать

ПРИЛОЖЕНИЕ 1 ТАБЛИЦЫ КОМАНД МИКРОПРОЦЕССОРОВ КР580ВМ80 И К1821ВМ85

И ИХ ПАРАМЕТРОВ

Микропроцессоры КР580ВМ80А (I8080) и К1821ВМ85 (I8085) относят к однокристальным микропроцессорам (МП) с фиксированной 8 - разрядной шиной данных и системой команд. Шина адреса является 16 -разрядной, поэтому размер адресного пространства составляет 216 = 65536 ячеек (64 К).

Рассматриваемые МП принадлежат к CISC архитектуре. Память программ и память данных находятся в едином адресном пространстве, нет никаких признаков, указывающих на тип информации в ячейке памяти. Поэтому по данному признаку рассматриваемые МП относят к фон-неймановской архитектуре.

Еще одна особенность данных МП - регистровая архитектура, которая определяется наличием достаточно большого регистрового файла внутри МП. Команды получают возможность обратиться к операндам, расположенным в одной из двух запоминающих сред: памяти или регистрах. Размер регистров фиксирован и совпадает с размером слова, физически реализованного в памяти. К любому регистру можно обратиться непосредственно, поскольку регистры представлены в виде массива запоминающих элементов - регистрового файла. Типичным является выполнение арифметических операций только в регистре, при этом команда содержит два операнда (оба операнда в регистре или один операнд в регистре, а второй в памяти).

МП I8080 разработан первым и имеет ряд недостатков: три напряжения питания (+5 В, + 12 В и –5 В), ограниченную тактовую частоту (2 МГц), необходимость использования набора микросхем для построения системы в минимальной конфигурации (тактовый генератор КР580ГФ24, системный контроллер КР580ВК28, шинные драйверы). Для I8085 требуется одно напряжение питания (+5 В), не нужны тактовый генератор и системный контроллер, однако, шина данных и младший байт шины адреса мультиплексированы.

Мнемоника команд и их машинные коды для обоих МП совпадают. По сравнению с системой команд I8080 в системе команд I8085 добавлены две дополнительные команды SIM и RIM.

Команды микропроцессора подразделяют по функциональному назначению на группы. В табл. 1 приведена система команд, содержащая мнемоники и соответствующие краткие описания операций команд. Таблица достаточно полно раскрывает выполняемые операции, поэтому поясним лишь некоторые, вызывающие затруднения при написании программ моменты.

В командах записи в стек PUSH PSW и считывания из стека POP PSW мнемоникой PSW обозначают регистровую пару из аккумулятора А и регистра признаков (флагов) F.

Команда десятичной коррекции суммы DAA используется после сложения упакованных двоично-десятичных чисел для преобразования результата в аккумуляторе в двоично-десятичный код. Так как команда десятичной коррекции разности отсутствует, то вычитание двоично - десятичных чисел следует заменять сложением с преобразованием вычитаемого в дополнительный код.

Команды сдвига обеспечивают кольцевой сдвиг содержимого аккумулятора с записью выдвигаемого из аккумулятора бита в разряд переноса CY регистра признаков.

После вызова подпрограммы обработки прерывания в микропроцессоре сбрасывается внутренний триггер разрешения прерывания. Поэтому вновь поступающие прерывания восприниматься не будут. Для разрешения последующих прерываний в подпрограмме должна присутствовать команда EI.

Таблица 1

Система команд МП КР580ВМ80 и К1821ВМ85

ОДНОБАЙТОВЫЕ ПЕРЕСЫЛКИ

 

 

 

 

ДВУХБАЙТОВЫЕ ПЕРЕСЫЛКИ

 

 

 

MOV R1, R

;

 

 

 

 

R R1

 

 

 

 

LXI YZ, D16

;

D16 YZ

 

MVI R, D8

;

 

 

 

 

D8 R1

 

 

 

 

SHLD ADR

;

HL M(ADR) M(ADR+1)

STAX YZ*

;

 

 

 

 

A M(YZ)

 

 

 

LHLD ADR

;

M(ADR) M(ADR+1) HL

LDAX YZ*

;

 

 

 

 

M(YZ) A

 

 

 

 

PUSH YZ**

;

YZ M(SP–1) M(SP–2), SP–2 SP

STA ADR

;

 

 

 

 

A M(ADR)

 

 

 

POP YZ** (POP / PSW)

;

M(SP) M(SP+1) YZ, SP+2 SP

LDA ADR

;

 

 

M(ADR) A

 

 

 

 

SPHL

;

HL SP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КОМАНДЫ ВВОДА И ВЫВОДА

 

 

 

 

ОБМЕН БАЙТАМИ

 

 

 

 

 

 

IN

N

 

;

 

 

 

 

(N) A

 

 

 

 

XCHG

;

HL DE

OUT

N

 

;

 

 

 

 

A (N)

 

 

 

 

XTHL

;

 

H M(SP–1), L M(SP–2)

 

 

 

 

 

 

 

 

 

 

АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ ОПЕРАЦИИ С ОДНИМ ОПЕРАНДОМ

 

 

 

 

 

 

CMC //

 

;

 

CY

CY

 

 

 

 

INR /// R

;

R + 1 R

 

STC //

 

 

;

 

 

1 CY

 

 

 

 

DCR /// R

;

R – 1 R

 

CMA

 

 

;

 

 

 

A

 

 

 

 

INX YZ

;

YZ + 1 YZ

 

 

 

 

A

 

 

 

 

DAA /

 

 

; ДЕСЯТИЧНАЯ КОРРЕКЦИЯ

 

 

 

DCX YZ

;

YZ – 1 YZ

 

 

 

 

 

АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ ОПЕРАЦИИ С ДВУМЯ ОПЕРАНДАМИ (8-БИТОВЫЕ ОПЕРАЦИИ)

ADD /

R

;

A + R A

 

 

ADI /

D8

;

A + D8 A

 

CPI /

D8

;

УСТАНОВКА ПРИЗНАКОВ

 

 

ADC /

R

;

A + R + CY A

 

 

ACI /

D8

;

A + D8 + CY A

 

CMP /

R

;

В СООТВЕТСТВИИ

SUB /

R

;

A – R A

 

 

SUI /

D8

;

A – D8 A

 

 

 

 

;

С A – D8 ИЛИ A – R

SBB /

R

;

A – R – CY A

 

 

SBI /

D8

;

A – D8 – CY A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ANA /

R

;

A R A

 

 

ANI /

D8

;

A D8 A

 

 

16-БИТОВЫЕ ОПЕРАЦИИ

ORA /

R

;

A R A

 

 

ORI /

D8

;

A D8 A

 

 

DAD // YZ ;

HL + YZ HL

XRA /

R

;

A R A

 

 

XRI /

D8

;

A D8 A

 

 

 

 

 

 

КОМАНДЫ СДВИГА СОДЕРЖИМОГО АККУМУЛЯТОРА

 

 

КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ

RLC //

; СДВИГ ВЛЕВО

 

 

 

PCHL

;

HL PC

RAL //

; СДВИГ ВЛЕВО ЧЕРЕЗ БИТ ПРИЗНАКА CY

 

 

JMP ADR

;

ADR PC

RRC //

; СДВИГ ВПРАВО

 

 

 

J-CON ADR ;

ADR PC

RAR //

; СДВИГ ВПРАВО ЧЕРЕЗ БИТ ПРИЗНАКА CY

 

 

 

 

 

СПЕЦИАЛЬНЫЕ КОМАНДЫ

КОМАНДЫ ВЫЗОВА И ВОЗВРАТА ИЗ ПОДПРОГРАММ

EI

 

; РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ

CALL

ADR

;

PC M(SP–1) M(SP–2), ADR PC

DI

 

; ЗАПРЕЩЕНИЕ ПРЕРЫВАНИЯ

C-CON ADR

;

PC M(SP–1) M(SP–2), ADR PC

HLT

 

; ОСТАНОВ

 

 

 

 

PC M(SP–1) M(SP–2),

NOP ; ХОЛОСТАЯ ОПЕРАЦИЯ

RST

X

;

RIM

; МАСКА ПРЕРЫВАНИЯ A

 

 

;

ADD PC, ГДЕ ДЛЯ X = 0, 1, 2, 3, 4, 5, 6, 7

SIM

; A МАСКА ПРЕРЫВАНИЯ

 

 

;

ADD СООТВЕТСТВЕННО РАВЕН 0H, 8H,

 

 

 

 

 

 

;

10H, 18H, 20H, 28H, 30H, 38H

ФОРМАТ РЕГИСТРА ФЛАГОВ F

 

 

 

 

 

 

 

PC, SP + 2 SP

D7 D6 D5 D4 D3 D2

D1 D0

RET

 

;

M(SP) M(SP+1)

 

S

Z

0 AC 0 P

1 CY

R – CON

;

M(SP) M(SP+1)

 

PC, SP + 2 SP

 

 

 

 

 

 

 

 

 

 

/

//

КОМАНДА ОКАЗЫВАЕТ ВОЗДЕЙСТВИЕ НА ВСЕ ПРИЗНАКИ

КОМАНДА ОКАЗЫВАЕТ ВОЗДЕЙСТВИЕ НА ПРИЗНАК CY

///– КОМАНДА ОКАЗЫВАЕТ ВОЗДЕЙСТВИЕ НА ВСЕ ПРИЗНАКИ, КРОМЕ ПРИЗНАКА CY

R, R1

СОДЕРЖИМОЕ РЕГИСТРОВ А, В, С, D, E, Н, L ИЛИ ЯЧЕЙКИ ПАМЯТИ M(HL)

YZ

СОДЕРЖИМОЕ РЕГИСТРОВОЙ ПАРЫ ВС, DE, НL ИЛИ РЕГИСТРА SP

YZ*

СОДЕРЖИМОЕ РЕГИСТРОВОЙ ПАРЫ ВС ИЛИ DE

YZ**

СОДЕРЖИМОЕ РЕГИСТРОВОЙ ПАРЫ ВС, DE, HL ИЛИ PSW

D8

8-РАЗРЯДНЫЙ ОПЕРАНД (СОДЕРЖИМОЕ ВТОРОГО БАЙТА КОМАНДЫ)

(N)– СОДЕРЖИМОЕ ПОРТА ВВОДА ИЛИ ВЫВОДА С НОМЕРОМ N (N = 0, 1..., 255)

D16

16-РАЗРЯДНЫЙ ОПЕРАНД (СОДЕРЖИМОЕ ВТОРОГО И ТРЕТЬЕГО БАЙТА КОМАНДЫ)

ADR

16-РАЗРЯДНЫЙ АДРЕС Б ТРЕХБАЙТОВОЙ КОМАНДЕ

М( )

СОДЕРЖИМОЕ ЯЧЕЙКИ ПАМЯТИ (АДРЕС ЯЧЕЙКИ УКАЗАН В СКОБКАХ)

– СОN

УСЛОВИЕ ПЕРЕДАЧИ УПРАВЛЕНИЯ, ВЫЗОВА И ВОЗВРАТА ИЗ П/П (–СОN NZ, Z, NС, С, РО, PE, Р ИЛИ М)

После исполнения команды останова НLТ микропроцессор переходит в состояние программного останова. Из этого состояния он может быть выведен поступившим запросом прерывания (если прерывания были разрешены командой EI) или сигналом аппаратного сброса.

При выполнении команд, отмеченных в табл. 1 значками « /, //, ///, » в регистре признаков F вырабатываются признаки состояния, при этом устанавливаются в «1» следующие бита регистра F:

бит CY - признак переноса/заема;

бит Р - признак четности количества единиц в коде результата;

бит AC - признак вспомогательного переноса из младшей тетрады аккумулятора в старшую;

бит Z - признак нулевого результата;

бит S - признак знака, который дублирует старший разряд аккумулятора.

В табл. 2 приводятся мнемоники и соответствующие описания условий передачи управления, используемые в командах условной передачи управления, условного вызова и возврата из подпрограмм.

Таблица 2

Условия передачи управления

Значение

Мнемоника

Описание

признака

условия

 

 

 

 

Z = 0

NZ

Результат не равен нулю

Z = 1

Z

Результат равен нулю

CY = 0

NC

Признак переноса не установлен

CY = 1

С

Признак переноса установлен

P = 0

РО

Число единиц в аккумуляторе не четно

Р = 1

РЕ

Число единиц в аккумуляторе четно

S = 0

Р

Результат больше или равен нулю

S = 1

M

Результат меньше нуля

Табл. 3 предназначена для нахождения шестнадцатеричных эквивалентов машинных кодов команд. Первая цифра кода соответствует номеру строки таблицы. Например, команда MOV В, С имеет код операции 41H. Условными знаками в табл. 3 обозначены:

N - номер порта ввода/вывода;

& - двухбайтовый операнд - D16;

* - двухбайтовый операнд - ADR;

# - однобайтовый операнд - D8.

Табл. 3 можно использовать как для прямого перевода мнемоники в машинные коды, так и для обратного перевода из машинных кодов в мнемонику команд.

Табл. 4 и 5 позволяют определить длительность выполнения команд в машинных тактах. Команды условной передачи управления, условного вызова и возврата из подпрограмм в зависимости от выполнения условия имеют разную длительность. Для случая невыполнения условия число тактов в табл. 4 и 5 указано над разделительной чертой, при выполнении условия - под чертой.

Необходимо помнить, что в трехбайтовых командах коды операндов или младший и старший байты явно заданного адреса размещаются так, чтобы в ячейке программной памяти с меньшим адресом содержался младший операнд или байт адреса, т. е. младший и старший байты операнда надо менять местами.

 

 

 

 

Машинные коды команд МП КР580ВМ80 и К1821ВМ85

 

 

 

 

Таблица 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КОД

0

1

2

3

4

5

6

7

8

9

A

В

С

D

E

F

КОД

 

0

NOP

LXI

STAX

INX

INR

DCR

MVI

RLC

-

DAD

LDAX

DCX

INR

DCR

MVI

RRC

0

 

B, &

B

В

В

В

B, #

В

В

В

С

С

C, #

 

 

 

 

 

 

 

 

1

-

LXI

STAX

INX

INR

DCR

MVI

RAL

-

DAD

LDAX

DCX

INR

DCR

MVI

RAR

1

 

D, &

D

D

D

D

D, #

D

D

D

E

E

E, #

 

 

 

 

 

 

 

 

2

RIM

LXI

SHLD

INX

INR

DCR

MVI

DAA

-

DAD

LHLD

DCX

INR

DCR

MVI

CMA

2

 

(85)

H, &

*

H

H

H

H, #

H

*

H

L

L

L, #

 

 

 

 

 

 

 

3

SIM

LXI

STA

INX

INR

DCR

MVI

STC

-

DAD

LDA

DCX

INR

DCR

MVI

CMC

3

 

(85)

SP, &

*

SP

M

M

M, #

SP

*

SP

A

A

A, #

 

 

 

 

 

 

 

4

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

6

 

В, В

B, C

B, D

B, E

B, H

B, L

B, M

B, A

C, B

C, C

C, D

C, E

C, H

C, L

C, M

C, A

 

 

 

 

5

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

5

 

D, B

D, C

D, D

D, E

C, H

D, L

D, M

D, A

E, B

E, C

E, D

E, E

E, H

E, L

E, M

E, A

 

 

 

 

6

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

6

 

H, B

H, C

H, D

H, E

H, H

H, L

H, M

H, A

L, B

L, C

L, D

L, B

L, H

L, L

L, H

L, A

 

 

 

 

7

MOV

MOV

MOV

MOV

MOV

MOV

HLT

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

MOV

7

 

M, В

M, С

M, D

M, E

M, H

M, L

M, A

А, В

A, C

A, D

A, E

A, H

A, L

A, M

A, A

 

 

 

 

 

8

ADD

ADD

ADD

ADD

ADD

ADD

ADD

ADD

ADC

ADC

ADC

ADC

ADC

.ADC

ADC

ADC

8

 

В

С

D

E

H

L

M

A

В

С

D

E

H

L

M

A

 

 

 

 

9

SUB

SUB

SUB

SUB

SUB

SUB

SUB

SUB

SBB

SBB

SBB

SBB

SBB

SBB

SBB

SBB

9

 

В

С

D

E

H

L

M

A

В

С

D

E

H

L

M

A

 

 

 

 

А

ANA

ANA

ANA

ANA

ANA

ANA

ANA

ANA

XRA

XRA

XRA

XRA

XRA

XRA

XRA

XRA

А

 

 

В

С

D

E

H

L

M

A

В

С

D

E

H

L

M

A

 

 

В

ORA

ORA

ORA

.ORA

ORA

ORA

ORA

ORA

CMP

CMP

CMP

CMP

CMP

CMP

CMP

CMP

В

 

 

В

С

D

E

H

L

M

A

В

С

D

E

H

L

M

A

 

 

С

RNZ

POP

JNZ

JMP

CNZ

PUSH

ADI

RST

RZ

RET

JZ

-

CZ

CALL

ACI

RST

С

 

В

*

*

*

В

#

0

*

*

*

#

1

 

 

 

 

 

 

 

 

D

RNC

POP

JNC

OUT

CNC

PUSH

SUI

RST

RC

-

JC

IN

CC

-

SBI

RST

D

 

D

*

N

*

D

#

2

*

N

*

#

3

 

 

 

 

 

 

 

 

E

RPO

POP

JPO

XTHL

CPO

PUSH

ANI

RST

RPE

PCHL

JРЕ

XCHG

CPE

-

XRI

RST

E

 

 

 

H

*

 

*

H

#

4

 

 

*

 

*

 

#

5

 

 

F

RP

POP

JP

DI

CP

PUSH

ORI

RST

RM

SPHL

JM

EI

CM

-

CPI

RST

F

 

PSW

*

*

PSW

#

6

*

*

#

7

 

 

 

 

 

 

 

 

 

 

Таблица 4

Длительность команд МП КР580ВМ80 в машинных тактах

КОД

0

1

2

3

4

5 6

7

8

9

А

В

С

D

E

F

КОД

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

4

10

7

5

 

 

7

4

10

7

5

 

 

7

4

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

16

 

 

 

 

 

 

 

16

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

13

 

10

 

 

 

 

 

13

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

5

 

 

 

 

 

 

5

 

 

 

 

 

 

 

5

4

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

4

 

 

 

 

 

 

4

 

 

 

 

 

 

 

4

8

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А

В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С

5/11

11

10

 

11/17

11

 

11

5/11

 

 

11/17

17

 

11

С

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

 

10

 

 

 

 

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Е

 

 

 

18

 

 

 

 

 

5

 

4

 

 

 

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 5

Длительность команд МП К1821ВМ85 в машинных тактах

КОД

0

1

2

3

4

5 6

7

8

9

А

В

С

D

E

F

КОД

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

4

10

7

6

 

 

7

4

10

7

6

 

 

7

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

4

 

16

 

 

 

 

 

 

 

16

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

13

 

10

 

 

 

 

 

13

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

4

 

 

 

 

 

7

4

 

 

 

 

 

 

 

7

4

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

7

 

 

 

 

 

5

7

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

4

 

 

 

 

 

7

4

 

 

 

 

 

 

 

4

8

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А

В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С

6/12

10

7/10

10

9/18

12

 

12

6/12

10

7/10

9/18

18

 

12

С

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

 

 

10

 

 

 

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Е

 

 

 

16

 

 

 

 

 

6

 

4

 

 

 

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Еще одно замечание касается организации стековой памяти. Стек в данных микропроцессорах перевернутый, то есть запись в стек сопровождается уменьшением адреса в указателе стека SP. В начале пользовательской программы, как правило, необходимо настроить стек, то есть записать адрес его вершины в регистр SP.

МП К1821ВМ85 имеет две дополнительные команды SIM и RIM.

Команда SIM (установить маску прерываний) используется для того, чтобы определить разрешенные и запрещенные прерывания. Эта команда копирует содержимое аккумулятора в регистр масок прерываний процессора. Кроме того, при единичном состоянии бита 6 аккумулятора состояние бита 7 аккумулятора выводится на одиночную выходную линию данных с обозначением SOD.

Команда RIM читает маску прерываний в аккумулятор. Кроме того, значение одиночной входной линии данных SID загружается в разряд 7 аккумулятора.

ПРИЛОЖЕНИЕ 2

ПРОГРАММА DEBUG

DOS-программу DEBUG можно применять для написания совсем небольших программ, для отладки программ, или для просмотра содержимого файла либо памяти. Эту программу (файл DEBUG.EXE) можно найти в директории DOS для систем, работающих под управлением DOS, или вызвать в Windows, выбрав в меню Start команду MSDOS Prompt. Для получения копий экрана удобнее всего запустить DEBUG в отдельном окне. Пользуясь командами из системного меню окна, можно копировать фрагменты его содержимого в буфер обмена или вставлять текст из буфера в окно.

Для запуска DEBUG из командной строки наберите DEBUG и нажмите <Enter>. DEBUG загрузится с диска в память. Когда символ-приглашение появится на экране, DEBUG будет готов воспринимать ваши команды (приглашение представляет собой дефис, хотя и похоже на текстовый курсор).

DEBUG можно запускать двумя способами:

1.DEBUG без указания аргументов, чтобы просмотреть содержимое памяти или создать новый файл.

2.DEBUG <имя файла>, чтобы отладить или модифицировать существующую программу.

Загрузчик программ размещает DEBUG в памяти, и DEBUG выводит дефис (-) в качестве приглашения. Регистры CS, DS, ES и SS инициализированы адресом 256байтового (100Н) префикса сегмента программы (PSP), а ваша рабочая область в памяти начинается с адреса PSP + 100Н. DEBUG отображает значения флагов следующим образом:

 

Перепол-

Направ-

Преры-

Знак

Нуль

Вспомогат.

Четность

Перенос

 

нение OF

ление F

вание IF

SF

ZF

перенос AF

PF

CF

1

OV

DN

EI

NG

ZR

AC

PE

CY

0

NV

UP

DI

PL

NZ

NA

PO

NC

Ссылка на память может задаваться в виде сегмент: смещение, например, DS:120, или в виде только смещения, например, 120. Можно также напрямую обращаться к адресам в памяти, например, 40:17, где 40[0]Н - адрес начала сегмента, а 17Н - смещение. Заметьте, что сегмент данных для программ типа .ЕХЕ начинается с адреса DS:0, а для программ типа .СОМ - с DS: 100.

DEBUG воспринимает все вводимые числа как шестнадцатеричные, т.е. вводить завершающую букву Н не нужно. Клавиша F1 воспроизводит последнюю команду по

одной букве за нажатие, a F3 - целиком. Кроме того, DEBUG не различает строчные и заглавные буквы.

Далее в алфавитном порядке перечислены команды DEBUG.

A (Assemble)

Транслирует ассемблерные команды в машинный код. Операция особенно полезна для написания и тестирования маленьких программ на ассемблере и для изучения небольших фрагментов кода. Адрес начала кода по умолчанию - CS:0100H. Формат команды: А [<адрес>], где адрес по умолчанию - 0100Н.

DEBUG поддерживает следующие возможности:

определение элементов данных в программах с помощью DB и DW;

операнд в квадратных скобках, например, [12Е], указывает адрес (смещение) в памяти;

оператор PTR можно использовать для указания байта или слова, например, INC BYTE PTR [12Е].

Можно применять все виды косвенной адресации с использованием регистров, например, [BP+DI] или 25 [ВХ].

Ниже приведен пример создания маленькой ассемблерной программы из пяти инструкций. Вводить нужно только инструкции; DEBUG указывает адрес сегмента кода (показанный здесь в виде хххх:) и смещения, начиная со 100Н:

А (или А 100)

<Enter>

;Начать ввод с адреса

хххх:0100 MOV CX, [10D]

<Enter>

;Прочитать в СХ значение из DS:10D

хххх:0104 ADD CX,1A

<Enter>

;Прибавить к содержимому СХ

 

 

; непосредственное значение

хххх:0107 MOV [10D], CX

<Enter>

;Поместить содержимое СХ в DS:10D

хххх:010В JMP 100

<Enter>

;Вернуться к началу программы

xxxx:010D DW 2500

<Enter>

;Определение элемента данных по

 

 

; адресу DS:10D

 

<Enter>

;Завершение ввода

С учетом размера PSP DEBUG устанавливает IP равным 100Н, и инструкции программы начинаются с этого адреса. Последнее нажатие <Enter> (два <Enter> подряд) указывает DEBUG, что ввод программы завершен. Теперь можно при необходимости использовать команды U (Unassemble) для просмотра машинного кода или Т (Trace) для наблюдения за выполнением программы.

Можно заменять любые введенные команды или элементы данных, при условии, что новые инструкции или элементы будут иметь ту же длину. Например, чтобы заменить инструкцию ADD, расположенную по адресу 104Н, на SUB, введите

А 104

<Enter>.

хххх:0104 SUB CX, 1A

<Enter> <Enter>

При повторном исполнении программы значение в IP будет продолжать увеличиваться. Для занесения в IP значения 100Н используйте команду R (Register). Для выхода используйте команду Q.

С (Compare)

Сравнивает содержимое двух областей памяти. По умолчанию используется регистр DS. В команде можно указывать длину сравниваемых участков или диапазон адресов:

1. С <начальный_адрес_1> L<длина> <начальный_адрес_2>

Пример команды, сравнивающей 20Н байтов, начиная с адреса DS:050, с байтами,

начинающимися с DS:200:

 

С 050 L20 200

;Сравниваем 20Н байт

2. С <начальный_адрес_1> <конечный_адрес_1> <начальный_адрес_2>

Пример команды, сравнивающей байты от DS:050H до DS:070H с байтами, начи-

ная с DS:200:

 

С 050 070 200

;Сравниваем диапазоны

Операция выводит на дисплей адреса и содержимое несовпадающих байтов.

D (Display или Dump)

Выводит на экран содержимое области памяти в шестнадцатеричной и ASCIIформах. Регистр по умолчанию - DS. Эту команду также можно использовать, указывая длину или диапазон:

1. D [<начальный_адрес> [L<длина>]].

Можно указывать начальный адрес с необязательной длиной. Длина по умолчанию - 80Н (128) байт. Вот несколько примеров:

D 200

;Вывести 80Н байт, начиная с адреса DS:200H

D

;Вывести 80Н байт, начиная с адреса конца последней

 

; выведенной области

D CS:150

;Вывести 80Н байт, начиная с адреса CS:150H

D DS:20 L5

;Вывести 5 байт, начиная с адреса DS:20H

2. D [начальный_адрес конечный_адрес].

Пример:

 

D 300 32С

;Вывести байта, начиная с 300Н, и заканчивая 32СН

Е (Enter)

Позволяет вводить в память данные или инструкции машинного кода. Регистр по умолчанию - DS, формат команды - Е<адрес> [<список>]. Команда предоставляет две возможности:

1. Заменять байты на указанные в списке, как показано ниже:

Е105 13 3А 21 ;Ввести три байта, начиная с адреса DS:105H

ЕС3:211 21 2А ;Ввести два байта, начиная с адреса CS:211H

Е 110 'anything' ;Ввести строку символов, начиная с адреса DS:110H Использовать для ограничения строк можно как одинарные, так и двойные кавыч-

ки.

2. Последовательно редактировать байты. Введите адрес, где расположен байт, который вы хотите просмотреть:

Е 12С ;Просмотреть содержимое байта DS:12CH

Операция будет ожидать ввода с клавиатуры. Введите один или несколько байтов в шестнадцатеричной форме, разделяя их пробелами, начиная с DS:12CH.

F (Fill)

Заполняет область памяти значениями из списка. Регистр по умолчанию - DS. Команду можно использовать как с длиной, так и с диапазоном:

1. F <начальный_адрес> L<длина> '<данные>'. Например: F 210 L19 'Help!' ;Используем длину 19Н (25) байт

2. F <начальный_адрес> <конечный_адрес> '<данные>'. Например: F 210 229 'Help! ' ;Используем диапазон от 210Н до 229Н