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

2.4. Команды передачи данных.

Во всех компьютерах необходимы команды, предназначенные просто для пересылок данных, адресов и непосредственных операндов в регистры или ячейки памяти. В микропроцессоре ВМ86 имеется 4 базовые команды передачи данных. MOV, LEA, LDS, и LTS. В данной работе подробно рассмотрим команду MOV. Остальные команды и их использование при разработке программ будем рассматривать по мере их использования.

Команда mov предназначена для пересылок байта или слова внутри ЦП или между ЦП и памятью. Ее формат может занимать от двух до шести байт в зависимости от способа адресации. Мнемоника и формат этой команды на ассемблере имеет вид:

MOV dst,src здесь dst операнд-получатель, src операнд-источник.

В зависимости от режима адресации эта команда может передавать информацию:

из регистра в регистр:

непосредственный операнд в регистр;

непосредственный операнд в ячейку памяти;

из ячейки памяти в регистр;

из регистра в ячейку памяти:

из регистра (ячейки памяти) в сегментный регистр (кроме регистра cs);

из сегментного регистра в регистр или ячейку памяти.

При выполнении команд передачи данных не изменяется ни один из флажков (кроме специальных команд пересылки). Существует ряд особенностей использования команды MOV. Во-первых, нельзя одной командой передать содержимое одной ячейки памяти в другую. Во-вторых, невозможно за одну операцию загрузить непосредственный операнд в сегментный регистр. В-третьих, нельзя непосредственно пересылать содержимое одного сегментного регистра в другой. Подобные ситуации разрешаются с использованием других регистров микропроцессора. Например:

Mov ax,segment

MOV DS,AX

МOV AX,DS

MOV ES,AX

или

PUSH DS

POP ES

Рассмотрим еще несколько примеров команды MOV:

1) MOV DS,AX; переслать (АХ) в DS

2) MOV AL,’E’; переслать в AL ASCII код буквы Е

3) Mov [bx],dx переслать (dx) в ячейку адресованную (вх)

Здесь ЕА прибавляется к (DS)×16.

4) MOV AX,Y[BP][SI]; переслать в АХ содержимое ячейки памяти, определенной суммой (ВР), (SI) и смещения Y

Здесь ЕА прибавляется к (SS)×16.

Отметим, что при использовании регистра ВР в качестве базового, эффективный адрес ЕА всегда складывается с содержимым сегментного регистра SS, умноженного на 16.

Приведем варианты фрагментов программы, которые помещают в регистр AL, используя различные способы адресации, ASCII код буквы I из символьной цепочки "ABCDEFGHIJKLM". Цепочка предварительно вводится в оперативную память командой ассемблера DB, которая помечается меткой CharStarmg. Отметим, что каждый символ занимает в памяти один байт. Символ I смещен относительно А на 8 байт. На рис.5 приведено расположение цепочки в памяти.

Рис.5. Расположение цепочки "ABCDEFGHIJKLM" в памяти

.DATA - определение сегмента данных

MAIN DB 'MAIN'

CharStrmg DB ’ABCDEFGHIJ’

.CODE - определение сегмента кода.

MOV AX,@DATA; в регистр АХ загружается сегментный адрес сегмента данных; MOV DS,AX; в регистр DS перемещается содержимое регистра АХ.

MOV SI,OFFSET CharString + 8; в регистр SI загружается смещение строки CharString относительно начала сегмента данных на 8 байт (непосредственная адресация)

MOV AL,[SI]; в регистр АХ помещается значение символа I из строки символов (регистровая относительная адресация)

MOV ВХ,8

MOV AL,[CharString + ВХ]

MOV BX,OFFSET CharString

MOV AL,[BX + 8]

MOV SI,6

MOV AL,[CharString + SI + 2]

MOV BX.OFFSET CharString

MOV DI,8

MOV AL,[BX + DI]

MOV SI,OFFSET CharString

MOV BX,8

MOV AL,[SI + BX]

MOV BX,OFFSET CharString

MOV SI,7

MOV AL,[BX + SI + 1]

В приведенном примере команда OFFSET загружает начальный адрес цепочки ABCDEFGHIJ относительно начала сегмента данных. Знак @ загружает адрес начала сегмента, имя которого стоит за этим знаком. В нашем примере сегмента данных DATA.

Если возникает необходимость сменить сегмент данных, то это можно сделать, например следующим образом: