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

Часть 2. Изучение команд передачи данных

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

Группа команд операций передачи данных содержит команды MOV (передача данных между регистрами и внутренней памятью данных, иначе называемой резидентной памятью данных, сокращённо РПД), MOVC (между памятью программ, сокращённо ПП, и аккумулятором), MOVX (между внешней памятью данных, сокращённо ВПД, и аккумулятором). Команда MOV использует четыре способа адресации: регистровый (A, Rn, DPTR), прямой (ad), косвенный (@Ri) и непосредственный (#d, #d16). Для указания приёмника данных используются три способа адресации (кроме непосредственного), для указания источника данных - все четыре.

При выполнении команды MOVC считывания данных из памяти программ используются два способа адресации: по базе DPTR и относительный. В обоих случаях смещение (целое число без знака) хранится в аккумуляторе, приемником данных также служит аккумулятор. Команда дает возможность быстрого использования таблиц массивов данных, хранящихся в памяти программ.

Для обращения к внешней памяти данных (ВПД) может использоваться только команда MOVX. Обмен осуществляется между аккумулятором и ячейкой ВПД. Ячейка ВПД может быть адресована через 16-разрядный указатель адреса DPTR и странично. Странично ячейка адресуется через 8-разрядные указатели адреса R0, R1 текущего банка регистров. В этом случае указателем страниц (регистром страниц) служит порт вывода старшего байта адреса Р2.

Таблица 1

Наименование команды

Мнемоника

Содержание команды

Пересылка

в

аккумулятор

из регистра (n=0..7)

MOV A,Rn

(A)(Rn)

прямоадресуемого байта

MOV A,ad

(A)(ad)

байта из РПД (i=0,1)

MOV A,@Ri

(A)((Ri))

Загрузка

в аккумулятор константы

MOV A,#d

(A)#d

Пересылка

в регистр

из аккумулятора

MOV Rn,A

(Rn)(A)

прямоадресуемого байта

MOV Rn,ad

(Rn)(ad)

Загрузка

в регистр константы

MOV Rn,#d

(Rn)#d

Пересылка

по

прямому

адресу

из аккумулятора

MOV ad,A

(ad)(A)

из регистра

MOV ad,Rn

(ad)(Rn)

прямоадресуемого байта

MOV add,ads

(add)(ads)

байта из РПД

MOV ad,@Ri

(ad)((Ri))

константы

MOV ad,#d

(ad)#d

Окончание табл. 1

Пересылка

в резидентную память данных

(РПД)

из аккумулятора

MOV @Ri,A

((Ri))(A)

прямоадресуемого байта

MOV @Ri,ad

((Ri))(ad)

константы

MOV @Ri,#d

((Ri))#d

Загрузка

указателя данных

MOV DPTR,#d16

(DPTR)#d16

Пересылка

в

аккумулятор

байта из памяти программ (ПП)

MOVC A,@A+DPTR

(A)((A)+(DPTR))

байта из памяти программ (ПП)

MOVC A,@A+РС

(РС)(PC)+1; (A)((a)+(PC))

байта из ВПД

MOVX A,@Ri

(A)((Ri))

байта из

внешней памяти данных (ВПД)

MOVX A,@DPTR

(A)((DPTR))

Пересылка из

аккумулятора

в ВПД

MOVX @Ri,A

((Ri))(A)

Пересылка из

аккумулятора

в ВПД

MOVX @DPTR,A

((DPTR))(A)

Загрузка

в стек

PUSH ad

(SP)(SP)+1; ((SP))(ad)

Извлечение

из стека

POP ad

(ad)(SP); (SP)(BP)-1

Обмен

с регистром

XCH A,Rn

(A)(Rn)

аккумулятора

с прямоадресуемым байтом

XCH A,ad

(A) (ad)

с байтом из РПД

XCH A,@Ri

(A) ((Ri))

младшей тетрады аккумулятора с младшей тетрадой байта РПД

XCHD A,@Ri

(A)3-0((Ri))3-0

Команды PUSH и POP, использующие только прямой способ адресации, осуществляют передачу данных между стеком и РПД, регистрами общего назначения (РОН), регистрами специального назначения (РСН).

Команды ХСН и XCHD обеспечивают (в отличие от других команд односторонней передачи данных) двусторонний обмен байтами (ХСН) между аккумулятором в РПД или двусторонний обмен полубайтами аккумулятора и ячейки РПД (XCHD).

Таблица 2

Обозначения

Назначение

Rn

Регистры текущего (выбранного) банка регистров

n

Номер регистра текущего банка

ad

Прямой 8-разрядный адрес ячейки РПД (О-127) или РСН (128-255)

ads

Прямой 8-разрядный адрес операнда - источника данных

add

Прямой 8-разрядный адрес операнда - приемника данных

ad16

16-разрядный адрес

ad11

11-разрядный адрес

bit

Прямой 8-разрядный адрес бита в РПД и РСН

rel

8-разрядный байт смешения (целое со знаком)

@Ri

Косвенно адресуемая 8-разрядная ячейка РПД

#d

8-разрядный непосредственный операнд

#d16

16-разрядный непосредственный операнд

(X)

Содержимое элемента X

((X))

Содержимое по адресу, хранящемуся в элементе X

Составление программ на языке Ассемблер имеет свои правила. Условно можно представить, что текст программы состоит из четырех столбцов, разделенных одним или несколькими пробелами:

Метка

Мнемокод

Операнд

Комментарий

Метка связывается со строкой, на которой стоит. Метки необходимы для осуществления условного или безусловного перехода на нужную строку. Метка может состоять из одного или нескольких символов и содержать в себе буквы или цифры. Она не должна содержать знаков препинания и пробелов и должна всегда начинаться с буквы. Любая метка должна заканчиваться двоеточием и стоять первой в строке. Например, metka: или m1:.

В поле "мнемокод" стоит команда.

В поле "операнд" записывается операнд. Операндом может быть число, адрес ячейки памяти, имя регистра, порта, бита.

Поле "комментарий" содержит текст, который поясняет то, что выполняет данная команда. Комментарий начинается со знака ";" (точка с запятой). Если текст комментария не помещается на одной строке, то на новой строке он должен начинаться со знака ";".

Кроме команд, в Ассемблере используются директивы (указания) компилятору, которые определяют порядок ассемблирования (компиляции) программы. Одной из часто употребляемых директив является директива equ, которая осуществляет присвоение символической переменной (состоящей из одного или нескольких символов) числовое значение. Например, директива X equ 10 указывает компилятору при проходе текста программы везде, где встречается имя X, заменить его в объектном коде программы на число 10. Эта директива также позволяет присваивать имена отдельным битам регистров. Например, директива RW equ P1.1 или RW equ P1_1 укажет компилятору, что записанное в разных строках текста программы слово RW будет означать имя первого бита порта Р1. Данная директива полезна тем, что облегчает программисту работу с программой. Вместо запоминания программистом числового адреса ячейки памяти данных, директивой ей можно присвоить имеющее смысл имя из букв.

Другой часто употребляемой директивой является директива org, например org 001bh. Она указывает компилятору, что следующая за этой директивой команда должна разместиться по адресу 001bh. Эта директива позволяет совмещать начало подпрограммы обработки прерывания с фиксированным начальным адресом подпрограммы обработки прерывания (вектором). При этом отпадает необходимость расчёта размеров команд, предшествующих точному адресу начала подпрограммы, который был бы необходим при отсутствии директивы org. Она также позволяет обходить адреса команд, зарезервированные, например, под подпрограммы обработки прерываний.

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