Материал: Функциональная организация микро-ЭВМ К1816ВЕ48

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

2

Ps @= A[3..0] ORLD

Ps, A 100011ss 2

Ps |= A[3..0]

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

;Прибавление OP1.X += OP2,

;где: X - битовое поле, размещенное в OP1[7..4],

;OP2 - операнд

;Считается, что переполнение поля X невозможно

MOV R0, #OP2 ; R0 = адрес OP2

MOV A,

@R0 ; A = (OP2)

RL

A

; позиционирование копии OP2 против поля X

RL

A

;

RL

A

;

RL

A

;

MOV R0,

#OP1 ; R0 = адрес OP1

ADD A,

@R0 ;подсуммирование копии OP1 к полю X

При использовании комады перестановки тетрад программа получается короче:

MOV R0,

#OP2

; R0 = адрес OP2

MOV A,

@R0 ; A = (OP2)

SWAP A

 

; позиционирование копии OP2 против

поля X

 

 

MOV R0,

#OP1

; R0 = адрес OP1

ADD A,

@R0

;подсуммирование копии OP1 к полю X

Код

команды

Операнд Машинный код команды Число циклов Действие

INC

A 00010111 1

A += 1 INC Rn

00011nnn

1

Rr += 1 INC @Rr 0001000r

1

D(Rr) += 1 DEC

A 00000111 1

Rr -= 1

DEC

Rn 11001nnn

1

Rr -= 1

ADD A, Rn

01101nnn

1

Rr += Rr ADDC A, Rn 01111nnn

1

Rr += Rr+(C) ADD

A, @Rr 0110000r

1

Rr += D(Rr) ADDC

A, @Rr 0111000r

1

Rr += D(Rr)+C ADD

A, #d 00000011 2

Rr += данные

ADDC A, #d 00010011 2

Rr += данные+(C) DA

A 01010111 1

A[3..0]>9||AC>1) ? C(Rr=Rr + 6; A[3..0]>9 || C>1 ? C (Rr = Rr + 60h RR

A 01110111 1

A = A[0])((A[7..1]) RL

A

11100111

1

Rr =(A[6..0])((A[7]) RRC

A 01100111 1

Rr((C) = (C) ( Rr RLC

A

11110111

1

(C)(Rr= Rr((C) SWAP

A 01000111 1

Rr=A[7..0]# A[15..8]

Изменение естественного порядка следования команд выполняется по специальным командам перехода. К этой группе команд в МК относятся команды безусловного перехода JMP и JMPP, организации цикла DJNZ, обращения к подпрограмме CALL, возврата из подпрограммы RET, возврата с восстановлением PSW RETR, а также большая группа команд ветвления. Все эти команды приведены в таблицах 4 и 5. В большинстве команд прямо указывается адрес перехода, причем в теле команды при этом содержится 8 (ad8) или 11 (ad11) бит адреса перехода.

Команда JMP позволяет передать управление в любое место 2048байтного банка памяти программ. Номер банка памяти программ определяется флагом DBF, значение которого копируется в старший бит счетчика команд (РС11) при выполнении команды JMP или CALL. Для перехода из нулевого банка памяти программ в первый недостаточно только установить флаг DBF, необходимо также выполнить команду перехода JMP, которая и изменит значение старшего бита счетчика команд.

Все остальные команды (кроме команд возврата) содержат только восемь младших бит адреса перехода. При этом оказывается возможным осуществить переход только в пределах одной страницы памяти программ (256 байт). Если команда короткого перехода расположена на границе двух страниц (т.е. первый байт команды на одной странице, а второй - на следующей), то переход будет выполнен в пределах той страницы, где располагается второй байт команды. Для условного перехода с одной страницы на другую можно воспользоваться тандемом из команды условного перехода и длинного безусловного перехода (JMP).

Мнемокод команды Операнд Машинный код

команды Число циклов Действие

JMP ad11

a10a9a810100 2

(PC[10..0]) = ad11 (PC[11]) = (DBF) JMPP

@A

10110011

2

(PC[7..0]) = ((A)) DJNZ

Rn, ad8

11101nnn

2

(Rn) -= (Rn);

(Rn != 0) ? (PC)=ad8 CALL

ad11 a10a9a810100 2

((SP)) = (PC):(PSW[7..4 ]); (SP) ++;

(PC) = ad11; (PC[11]) = (DBF) RET

10000011

2

(SP) -= (SP); (PC) = ((SP)) RETR

10010011

2

(SP) -= (SP); (PC) = ((SP);

(PSW[7..4]) = ((SP))