Связь с администрацией сайта:       

demo

Среди толпы я одинок

Глава 8 - команды процессора: пересылка данных, стэк, ввод/вывод

 

Информация данного и последующих разделов относится к синтаксису и правилам применения команд процессора, её важно знать! Хотя если что то не понятно то ничего страшного - суть будет ясна на практических примерах.
 
Команда MOV
Команда MOV – основная команда пересылки данных, которая пересылает один байт или слово данных из памяти в регистр, из регистра в память или из регистра в регистр. Команда MOV может также занести число (непосредственный операнд) в регистр или память. В действительности команда MOV это целое семейство машинных команд микропроцессора. На приведенном ниже рисунке представлены различные способы, которыми в микропроцессоре можно пересылать данные из одного места в другое. Каждый прямоугольник означает здесь регистр или ячейку памяти. Стрелки показывают пути пересылки данных, которые допускает микропроцессор. Необходимо также помнить, что все команды микропроцессора могут указывать только один операнд памяти.
 
Из рисунка видно, что запрещены пересылки из одной ячейки памяти в другую, из одного сегментного регистра в другой, запись непосредственного операнда в память. Это обусловлено тем, что в персональном компьютере отсутствуют соответствующие машинные команды. Если по алгоритму необходимо произвести одно из таких действий, то оно обычно реализуется в две команды, пересылкой через какой-нибудь несегментный регистр. Кроме того, командой MOV нельзя менять содержимое сегментного регистра CS. Это связано с тем, что регистровая пара CS:IP определяет адрес следующей выполняемой команды, поэтому изменение любого из этих регистров есть ничто иное, как операция перехода. Команда же MOV не реализует переход.

mov cmd.bmp

Примеры использования команды пересылки: MOV Data,DI
MOV BX,CX
MOV DI,Index
MOV Start_Seg,DS
MOV ES,Buffer
MOV Days,356
MOV DI,0
Обмен данных - exchange
Команда XCHG меняет местами содержимое двух операндов. Порядок следования операндов не имеет значения. В качестве операндов могут выступать регистры (кроме сегментных) и ячейки памяти.
Примеры использования команды XCHG:
XCHG BL,BH
XCHG DH,Char
XCHG AX,BX
 
Перекодировка XLAT
Команда XLAT заменяет содержимое регистра AL байтом из таблицы перекодировки (максимальная длинна – 256 байт), начальный адрес которой относительно сегмента DS находится в регистре BX.
Алгоритм выполнения команды XLAT состоит из двух этапов:
1) содержимое регистра AL прибавляется к содержимому регистра BX;
2) полученный результат рассматривается как смещение относительно регистра DS. По данному адресу выбирается байт и помещается в регистр AL.
XLAT всегда использует в качестве смещения начала таблицы содержимое регистра BX, поэтому перед выполнением команды необходимо поместить в BX смещение таблицы.
Пример использования команды XLAT:
MOV BX,OFFSET Talbe
MOV AL,2
XLAT 
...
Table DB ‘abcde’
 
Работа со стеком
Как уже было указано ранее, процессор адресует стек с помощью регистровой пары SS:SP.
Помещение объектов в стек приводит к автоматическому декременту указателя стека, а извлечение – к инкременту, т.е. он «растет» в сторону меньших адресов памяти. 
Для сохранения и восстановления различных 16-битовых данных в стеке используются команды PUSH (протолкнуть) и POP (вытолкнуть). За кодами операций PUSH и POP следует операнд, который необходимо поместить (извлечь) в (из) стек. В качестве операнда может выступать регистр или ячейка памяти, которую можно адресовать, используя известные способы адресации.
Замечание: Команда POP CS недопустима (восстановление из стека в регистр CS осуществляется по команде RET).
Для помещения в стек и извлечения из стека регистра флагов используются специальные команды PUSHF и POPF соответственно.
Стек удобен для передачи информации в подпрограммы и из них. Для этого подпрограмма может использовать BP как указатель на область стека. Ниже приведен фрагмент программы, демонстрирующий использование BP для доступа к параметрам, переданным через стек.
CODE SEGMENT
...
PROC1 PROC
MOV BP,SP ;загрузка в BP текущего адреса стека
MOV BX,[BP+4];выборка из стека 1 параметра (ca) 
...
MOV BX,[BP+2];выборка из стека 2 параметра (ll)
...
RET 4 ;Возврат с удалением 4 слов из стека
PROC1 ENDP
START:
...
MOV AX,’ca’ ;Загрузка в AX символов
MOV CX,’ll’ ;Загрузка в CX символов
PUSH AX ;Сохранение AX в стек
PUSH CX ;Сохранение CX в стек
CALL PROC1 
...
CODE ENDS
 
Команды ввода-вывода
Все устройства ЭВМ принято делить на внутренние (центральный процессор ЦП, оперативная память ОП) и внешние (внешняя память, клавиатура, дисплей и т. д.). Под вводом-выводом понимается обмен информацией между ЦП и любым внешним устройством. В ЭВМ передача информации между ЦП и внешним устройством, как правило, осуществляется через порты. Порт – некоторый регистр размером в байт, находящийся вне ЦП (два соседних порта могут рассматриваться как порт размером в слово). Обращение к портам происходит по номерам. Все порты нумеруются от 0 до 0FFFFh. С каждым внешним устройством связан свой порт или несколько портов их адреса заранее известны. 
Запись и чтение порта осуществляется при помощи следующих команд:
Чтение (ввод): IN AL, n или IN AX, n
Запись (вывод):OUT n, AL или OUT n, AX
Номер порта n в этих командах может быть задан либо непосредственно, либо регистром DX (IN AX,DX).
Сценарий ввода вывода через порты существенно зависит от специфики того внешнего устройства, с которым ведется обмен, но обычно ЦП связан с внешним устройством через два порта: первый – порт данных, второй – порт управления и достаточно типичной является следующая процедура обмена:
1) ЦП записывает в порт управления соответствующую команду, а порт данных – выводимые данные;
2) внешнее устройство, считав эту информацию, записывает в порт управления команду «занято» и начинает непосредственно вывод (например, печать);
3) ЦП переходит либо в режим ожидания, опрашивая в цикле порт управления, либо занимается другой работой – до тех пор пока в порте управления не сменится сигнал «занято»;
4) внешнее устройство заканчивает вывод и записывает в порт управления сигнал об успешном завершении или об ошибке;
5) ЦП анализирует полученную информацию и продолжает свою работу.
 
Команды загрузки сегментных регистров
Эти команды загружают полный указатель из памяти и записывают его в выбранную пару «сегментный регистр : регистр». При этом первое слово из адресуемой памяти загружается в регистр первого операнда, второе в регистр DS, если выполняется команда LDS, или в регистр ES если выполняется команда LES.
Примеры использования команд:
LDS BX,[BP+4]
LES DI,TablePtr
 
 

 

Голосуй
(0 Голоса)