Мнемоника | Режимы адресации | Время, такт | Действие | |||||
Арифметические инструкции | ||||||||
ADD,A,byte | Dir,Ind,Reg,Imm | A=A+byte | ||||||
ADDC A,byte | Dir,Ind,Reg,Imm | A=A+byte+C | ||||||
DA A | Аккумулятор | Десятичня коррекция | ||||||
DEC A | Аккумулятор | A=A-1 | ||||||
DEC byte | Dir,Ind,Reg | byte=byte-1 | ||||||
DIV AB | Аккумулятор и B | A=[A/B],B=mod(A/B) | ||||||
INC A | Аккумулятор | A=A+1 | ||||||
INC byte | Dir,Ind,Reg | byte=byte+1 | ||||||
INC DPTR | DPTR | DPTR=DPTR+! | ||||||
MUL AB | Аккумулятор и B | B,A=B*A | ||||||
SUBB A,byte | Dir,Ind,Reg,Imm | A=A-byte-C | ||||||
Логические инструкции | ||||||||
ANL A,byte | Dir,Ind,Reg,Imm | A=A&byte | ||||||
ANL byte,A | Dir | byte= byte&A | ||||||
ANL byte,#data | Dir | byte= byte&#data | ||||||
CLR A | Аккумулятор | A=00h | ||||||
CPL A | Аккумулятор | A=^(A) | ||||||
ORL A,byte | Dir,Ind,Reg,Imm | A=A v byte | ||||||
ORL byte,A | Dir | byte= byte v A | ||||||
ORL byte,#data | Dir | byte= byte v #data | ||||||
RL A | Аккумулятор | A=(A)ЦСЛ на 1бит | ||||||
RLC A | Аккумулятор | A=(A)ЦСЛ на 1бит через С | ||||||
RR A | Аккумулятор | A=(A)ЦСП на 1бит | ||||||
RRC A | Аккумулятор | A=(A)ЦСП на 1бит через С | ||||||
SWAP A | Аккумулятор | A(7...4) <=> A(3...0) | ||||||
XRL A,byte | Dir,Ind,Reg,Imm | A=A Å byte | ||||||
XRL byte,A | Dir | byte= byte Å A | ||||||
XRL byte,#data | Dir | byte= byte Å #data | ||||||
Инструкции передачи данных во внутренней памяти данных | ||||||||
MOV A,src | Dir,Ind,Reg,Imm | A=src | ||||||
MOV dest, A | Dir,Ind,Reg | dest=A | ||||||
MOV dest, src | Dir,Ind,Reg,Imm | dest=src | ||||||
MOV DPTR,#data | Imm | DPTR=data | ||||||
PUSH src | Dir | SP=SP+1; @SP=src | ||||||
POP dest | Dir | dest=@SP; SP=SP-1 | ||||||
XCH A,byte | Dir,Ind,Reg | A <=> byte | ||||||
XCHD A,@Ri | Ind | A <=> @Ri | ||||||
Инструкции передачи данных, использующие внешнюю память данных | ||||||||
MOVX A,@Ri | A=@Ri | |||||||
MOVX @Ri,A | @Ri=A | |||||||
MOVX A,@DPTR | A=@DPTR | |||||||
MOVX @DPTR,A | @DPTR=A | |||||||
Инструкции передачи данных, использующие память программ | ||||||||
MOVC A,@A+DPTR | A=@(A+DPTR) | |||||||
MOVC A,@A+PC | A=@(A+PC) | |||||||
Булевы инструкции | ||||||||
ANL C,bit | bit | C=C & bit | ||||||
ANL C,/bit | bit | C=C & ^bit | ||||||
CLR C | Битовый аккумулятор | C=0 | ||||||
CLR bit | bit | bit=0 | ||||||
CPL C | Битовый аккумулятор | C=^C | ||||||
CPL bit | bit | bit=^bit | ||||||
JC rel | Переход, если C=1 | |||||||
JNC rel | Переход, если C=0 | |||||||
JB bit,rel | bit | Переход, если bit=1 | ||||||
JNB bit,rel | bit | Переход, если bit=0 | ||||||
JBC bit,rel | bit | Переход, если bit=1; bit=0 | ||||||
MOV C,bit | bit | C=bit | ||||||
MOV bit,C | bit | bit=C | ||||||
ORL C,bit | bit | C=C v bit | ||||||
ORL C,/bit | bit | C=C v ^bit | ||||||
SETB C | Битовый аккумулятор | C=1 | ||||||
SETB bit | bit | bit=1 | ||||||
Инструкции безусловных переходов | ||||||||
CALL adr ACALL adr LCALL adr | Вызов подпрограммы переход на ± 211 байт переход на ± 216 байт | |||||||
JMP adr AJMP adr LJMP adr SJMP adr | PC=adr переход на ± 211 байт переход на ± 216 байт переход на ± 28 байт | |||||||
JMP @A+DPTR | PC=A+DPTR | |||||||
NOP | Пустая команда | |||||||
RET | Возврат из подпрограммы | |||||||
RETI | Возврат из обработчика прерывания | |||||||
Инструкции условных переходов | ||||||||
CJNE A,byte,rel | Dir,Imm | Переход, если A¹byte | ||||||
CJNE byte,#data,rel | Ind,Reg | Переход, если byte¹#data | ||||||
DJNZ byte,rel | Dir,Reg | byte=byte-1; переход, если byte¹0 | ||||||
JZ rel | Аккумулятор | Переход, если A=0 | ||||||
JNZ rel | Аккумулятор | Переход, если A¹0 | ||||||
Примечания
|
|
|
|
1.Режимы адресации:
Dir - прямая (регистры специальных функций или память данных);
Ind - косвенная (допустима только относительно регистров R0 и R1; в символической записи команды обозначается @R0 или @R1 соответственно);
Reg – регистровая;
Imm - непосредственная (в символической записи команды начинается с #);
bit - прямоадресуемый бит (в регистрах специальных функций или битовой памяти);
битовый аккумулятор - бит переноса C в PSW;
запись " byte " в графе "Мнемоника" оэначает, что операнд в этом поле может адресоваться с помощью любого режима адресации из указанных в графе "Режимы адресации";
в командах, допускающих прямую, но не регистровую адресацию, может указываться регистр общего назначения, однако при трансляции команды в машинное представление его номер будет в этом случае представлен не 3-, а 8-разрядным двоичным кодом, соответствующим прямому адресу этого регистра в памяти данных; некоторые Ассемблеры, в том числе используемый в данном лабораторном практикуме, требуют для таких команд указания в явном виде номера регистра как прямого адреса ячейки памяти данных.
2. Действия:
В инструкции MUL AB производится перемножение содержимого аккумулятора и регистра B. Старшие разряды произведения помещаются в аккумулятор, а младшие - в регистр B.
В инструкции DIV AB содержимое аккумулятора делится на содержимое регистра B. Частное помещается в аккумулятор, а остаток - в регистр B. Операнды рассматриваются как целые числа без знака.
& - конъюнкция.
v – дизъюнкция.
Å - “исключающее ИЛИ”.
^ - логическое “НЕ”.
ЦСЛ - циклический сдвиг влево.
ЦСП - циклический сдвиг вправо.
В операциях сдвига через С участвует 9-разрядный регистр (8-разрядный аккумулятор и бит переноса С).
<=> обмен местами операндов.
В инструкции XCHD A,@Ri осуществляется обмен только младших тетрад операндов.
В инструкциях переходов
для безусловных переходов adr показывает, что в команде кодируется абсолютный адрес памяти программ, по которому осуществляется переход;
для условных переходов rel показывает, что в команде кодируется относительный адрес памяти программ, по которому осуществляется переход при выполнении указанного условия.
Во всех командах перехода при записи программы на ассемблере адрес перехода может быть задан меткой.
Некоторые ассемблеры, в том числе используемый в данном лабораторном практикуме, для инструкции вызова подпрограммы и инструкции безусловного перехода требуют от программиста явного указания длины генерируемого адреса перехода, то есть записи в программе инструкций ACALL, LCALL, AJMP, LJMP, SJMP и не воспринимают инструкции CALL, JMP. Другие ассемблеры самостоятельно генерируют инструкции, имеющие необходимую длину поля адреса в зависимости от места расположения адреса перехода, и поэтому допускают использование инструкций CALL и JMP.