Алгоритм | Пример |
(A):=(A)Å((Ri)), где iÎ{0,1} | ;(A)=22H, (R0)=55H, ;в РПД (55H)=33H XRL A,@R0 ;(A)=11H, ;(R0)=55H, в РПД (55H)=33H |
XRL A, direct | 0 1 1 0 0 1 0 1 | direct |
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм | Пример |
(A):=(A)Å(direct) | ;(A)=23H, (PSW)=34H XRL A, PSW ;(A)=17H, (PSW)=34H |
XRL A,#data8 | 0 1 1 0 0 1 0 0 | data8 |
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм | Пример |
(A):=(A)Ådata8 | ;(A)=36H XRL A,#22H ;(A)=14H |
XRL direct, A | 0 1 1 0 0 0 1 0 | direct |
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм | Пример |
(direct):=(A)Å(direct) | ;(A)=55H, (P2)=63H XRL P2,A ;(A)=55H, (P2)=36H |
XRL direct,#data8 | 0 1 1 0 0 0 1 1 | direct | data8 |
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм | Пример |
(direct):=(direct)Ådata8 | ;(P1)=0FFH XRL P1,#11H ;(P1)=0EEH |
2.2.2. Директивы языка АСМ51
Директивы в отличие от команд ассемблерного языка не преобразуются в объектный код и применяются для управления процессом трансляции исходной МК-программы.
Рассмотрим основные директивы языка АСМ51.
ASCII <операнды>
Директива последовательно размещает в ячейках памяти программ (ПП) коды ASCII символов строки, указанной в поле <операнды> и заканчивающейся возвратом каретки. | Пример |
;MT1 соответствует адресу ;20FH в ПП MT1 ASCII PEN ;в ПП (20FH)=50H, ;(210H)=45H, (211H)=4EH |
DB <операнды>
Директива последовательно размещает в ячейках памяти программ (ПП) байтовые константы, перечисленные через запятую в поле <операнды>. Если указанное поле отсутствует, то используется одна ячейка ПП, в которую заносится "0". | Пример |
;MT1 соответствует адресу ;1FFH в ПП MT1 DB 12H,<.NOT.11H+1 DB 10100101B,32 ;в ПП (1FFH)=12H, ;(200H)=0EFH, ;(201H)=0A5H, (202H)=20H |
DS <операнды>
Директива резервирует ячейки памяти программ (ПП), причем количество этих ячеек определяется значением, указанным в поле <операнды>. | Пример |
;MT2 соответствует адресу ;200H в ПП MT2 DS 12H ;(PC)=212H |
DW <операнды>
Директива последовательно размещает в ячейках памяти программ (ПП) 2-байтовые константы, перечисленные через запятую в поле <операнды>. Если указанное поле отсутствует, то используются две ячейки ПП, в которые заносится "0". | Пример |
;MT1=20FH MT1 DW 3212H DW ;в ПП (20FH)=32H, ;(210H)=12H, ;(211H)=(212H)=00H |
END
Директива определяет конец МК-программы.
ENDM
Директива определяет конец макроопределения.
<метка> EQU <операнды>
Директива присваивает символическому имени, размещенному в поле <метка>, байтовое или 2-байтовое значение, указанное в поле <операнды>. Это имя не может быть переопределено. | Пример |
SS EQU 25H ZZ EQU SS+2 PP EQU ZZ-1 MOV A,#PP ;(A)=26H |
EXTERN <операнды>
Директива объявляет символические имена, указанные через запятую в поле <операнды>, как внешние, то есть определяемые в другой (других) МК-программе (МК-программах).
INCLUDE <операнды>
Директива включает в трансляцию файл, имя которого вместе с расширением указаны в поле <операнды>. Включения не могут подвергаться вложению.
LIST
Директива разрешает вывод листинга следующего за ней текста МК-программы. По умолчанию выполняется директива NLIST.
LONG <операнды>
Директива последовательно размещает в ячейках памяти программ (ПП) 4-байтовые константы, перечисленные через запятую в поле <операнды>. Если указанное поле отсутствует, то используются четыре ячейки ПП, в которые заносится "0". | Пример |
;MT1 соответствует адресу ;4EEH в ПП MT1 LONG 11223344H ;в ПП (4EEH)=11H, ;(4EFH)=22H, (4F0H)=33H, ;(4F1H)=44H |
<метка> MACRO <операнды>
Директива начинает макроопределение, которое составляется из операторов языка АСМ51 (строк исходного текста МК-программы) и должно заканчиваться директивой ENDM. Любое поле включенных в макроопределение операторов (кроме поля <комментарий>) может быть представлено формальным параметром, которые перечисляются через запятую в поле <операнды>. В поле <метка> указывается символическое имя макрокоманды, которая будет определяться данным макроопределением. Макрокоманда может использоваться в МК-программе произвольное число раз и при трансляции заменяется на тело своего макроопределения, причем фактические параметры, перечисленные через запятую в поле <операнды> макрокоманды подставляются вместо соответствующих формальных параметров макроопределения.
До трансляции | После трансляции |
TC MACRO x, y,z MOV A,#z x A,#y ENDM MOV R0,#25 TC ORL,15H,10 MOVX @R0,A END | 1 TC MACRO x,y,z 2 MOV A,#z 3 x A,#y 4 ENDM 5 0000 7819 MOV R0,#25 6 0002 TC ORL,15H,10 7 0002 740A MOV A,#10 8 0004 4415 ORL A,#15H 9 0006 ENDM 10 0006 F2 MOVX @R0,A 11 0007 END |
NLIST
Директива запрещает вывод листинга следующего за ней текста МК-программы, если ранее выполнялась директива LIST.
ORG <операнды>
Директива устанавливает значение программного счетчика PC, причем указанное значение определяется содержимым поля <операнды>. При отсутствии директивы исходное значение PC принимается равным нулю. | Пример |
;(PC)=1234H ORG 12H ;(PC)=0012H |
PUBLIC <операнды>
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |


