«Изучение формирования адресов с помощью отладчика afd»
. Система команд
Систему или набор (и даже репертуар команд МП К1810 образуют 113 базовых команд, многие из которых допускают использование разнообразных режимов адресации. В изучении системы команд МП помогает группирование команд по функциональному назначению. Кроме того, значительную помощь читателю окажут и подробные примеры выполнения команд.
. Команды передачи данных
Как любой современный процессор, МП К1810 имеет обширный набор команд, предназначенных для пересылок данных между регистрами, а также между регистрами и памятью. Команды передачи данных удобно разделить на четыре группы:
общие команды передачи данных;
команды передачи данных с привлечением стека (стековые команды);
команды ввода-вывода;
команды передачи цепочек байтов и слов.
В данном параграфе сравнительно подробно рассмотрены команды первых трех подгрупп, а команды манипуляций цепочками рассмотрены в другой методической разработке.
Относительной особенностью команд передач данных является то, что они не модифицируют состояние флажков. Исключение составляют только команды POPF и SAHF, которые прямо воздействуют на регистр флажков.
Общие команды передачи данных. Данная подгруппа включает в себя команды, осуществляющие передачи регистр-регистр, регистр-память и память-регистр. Наиболее мощной среди них является команда MOV (передать, переслать).
Команда MOV. Эта команда имеет следующее представление: MOV dst, src dst:=(src)
И осуществляет передачу содержимого источника src в получатель dst. Команда MOV имеет несколько форматов, показанных на рис. 1.1.
Самой гибкой и универсальной является команда MOV mem/reg1, mem/reg2. Она содержит постбайт режима адресации, с помощь, которого можно задавать любой допустимый режим адресации. Наличие бита w показывает возможность передачи байт и слов, а бит d определяет направление передачи. Таким образом, с помощью одной этой команды осуществляются передачи регистр-регистр/память и память-регистр, при чем регистром может быть любой общий регистр. Длина команды составляет 2, 3 или 4 байта, а время выполнения равно двум тактам в формате регистр-регистр, (8+EA) тактам в формате память-регистр и (9+ЕА) тактам синхронизации в формате регистр-память.
Пример 1.
(SI)=3456 MOV CX,[SI] (CX)=3AAD
(DS)=ABCD
([AF126])=3AAD
Пример 2.
(BX)=789A MOV DL,BX (DI)=789A
Команда MOV mem/reg1, mem/reg2 выполняет функцию команды MOV r1, r2 микропроцессора К580, но является более универсальной.
Примеры записи команды на языке ассемблера приведены ниже.
MOV DX,CX ;Слово, регистр-регистр
MOV BP, GAMMA ;Слово, память-регистр
MOV TEMP, BL ;Байт, регистр-память
МOV [DI], BX ;Слово, регистр-память
MOV DX, [BP][SI] ;Слово, память-регистр
Примечание. Для лучшего усвоения кодирования команд рекомендуется самостоятельно построить машинные команды, реализующие приведенные выше операторы языка ассемблера. Символическим именам, например, GAMMA, TEMP, можно присваивать произвольные 16-битные значения. Такие же упражнения целесообразно выполнять для всех ассемблерных операторов, которые приводятся в качестве примеров.
Команда MOV mem/reg, data позволяет передать в регистр или ячейку памяти непосредственные данные. Она также допускает большинство режимов адресации и передачу байт или слов.
Длина команды в зависимости от режима адресации варьирует от 3 до 6 байт, а выполняется за (10+.ЕА) тактов синхронизации.
Пример 3.
(DI)=1000 MOV [DI], 8400H ([A4450])=8400
(DS)=A345
Примеры записи на языке ассемблера приведены ниже.
MOV [BX], 3450H ;Слово в память
MOV [BP][SI], 2CH ;Байт (или слово) в память
MOV CX, 1000H ;Слово и регистр
В этой команде нельзя определять сегментные регистры. Отсутствие команды загрузки непосредственных данных в сегментные регистры считается недостатком системы команд МП К1810, т. к. при инициализации системы в сегментные регистры приходится загружать константы. Решение этой проблемы приведено ниже.
Команда MOV reg, data представляет собой более короткий вариант предыдущей команды и осуществляет загрузку констант в общие регистры МП. Длина этой команды составляет 2 или 3 байта, а время выполнения равно 4 тактам синхронизации. Она эквивалентна командам MVI r, data и LXI rp, МП К580.
Примечание. Выше в примерах записи команды MOV mem/reg, data, на языке ассемблера была приведена команда MOV CX, 1000H. Возможно, естественно, закодировать ее 4 байтами в формате команды MOV mem/reg, data, однако программа-ассемблер выберет более короткий 3-байтный вариант команды и формате MOV reg, data.
Команды MOV ac, mem и MOV MEM, ac предназначены для загрузки и запоминания содержимого аккумуляторов. Например, команда MOVAL, BETA передаст и аккумулятор AL байт с адресом BETA, а команда MOV ALPHA, AX запоминает содержимое аккумулятора AX в слове памяти с адресом ALPHA. При выполнении последней команды содержимое регистра AL оказывается в байте с адресом ALPHA, а содержимое регистра AH – в байте с адресом ALPHA+1. Напомним, что оба байта находятся в текущем сегменте данных (если специально не определен другой сегмент) и указанные адреса представляют собой смещения в этом сегменте. Обе команды имеют длину 3 байта и выполняются за десять тактов синхронизации.
Команды MOV sreg, mem/reg и MOV mem/rrg, sreg осуществляют передачи между сегментными регистрами и регистрами/памятью. В них передаются только слова, а ячейка памяти может быть определена с помощью любого допустимого режима адресации. Отметим, что в команде MOV sreg, mem/reg нельзя указывать сегментный регистр кода CS, т. к. при этом результат операции не определен.
Обе команды имеют длину 2-4 байта в зависимости от режима адресации. Время выполнения в формате регистр-регистр составляет два такта синхронизации: при задании памяти первая команда выполняется за (84-EA), а вторая – за (9+EA) тактов синхронизации.
Команда MOV sreg, mem/reg применяется для инициализации сегментных регистров, т.е. для определения сегментов. Если, например, в сегментный регистр DS необходимо загрузить F000, то потребуются команды
MOV AX, 0F000H ; Инициализация
MOV DS, AX ; регистра DS на F000
При такой инициализации почти всегда как промежуточный используется регистр AX, т.к. команда MOV ac, data короче более общей команды MOV mem/reg, data.
Первый формат позволяет обменять содержимое любого общего регистра и ячейки памяти, а также любой пары общих регистров. Память адресуется в любом допустимом режиме адресации. Однобайтная команда XCHG предназначена для обмена любого общего регистра и аккумулятора AX. Первая команда имеет длину 2-4 байта и выполняется за четыре (регистр-регистр) или (17+EA) (регистр-память) тактов синхронизации.
Примеры использования команд обмена в ассемблерных операторах приведены ниже.
