Индексация

прединдексация, например LD B *++А7[5],А4

АИ = А7+ 1 ×5

STH А4,*--А7[5]

АИ = А7-2×5

постиндексация, например STx А4,*А7++[5]

АИ = содержимому А7

LDх *А7--[5],А4

АИ = содержимому А7

Примеры команд загрузки и хранения:

1. LDW.D1 *A10,B1 (косвенная) 2. LDВ.D1 *-A5[4],A7 (базирование)

Перед командой после 4 тактов Перед командой после 4 тактов

В1 хххх ххххh 21F3 1996h А5 0000 0204h 0000 0204h

A10 0000 0100h 0000 0100h A7 хххх ххххh FFFF FFE1h

Mem 100h 21F3 1996h 21F3 1996h Mem 200h E1h E1h

3. LDН.D1 *++A4[А1],A8 (преиндекс.) 4. STН.D1 A1,*A10--[А11] (постиндекс.)

Перед командой после 4 тактов Перед командой после 1 такта

А1 0000 0002h 0000 0002h А1 9А32 7634h 9А32 7634h

A4 0000 0020h 0000 0024h А10 0000 0100h 0000 00F8h

А8 хххх ххххh FFFF A21Fh А11 0000 0004h 0000 0004h

Mem 24h A21Fh A21Fh Mem 100h В000 800Аh 0000 7634h

5. LDВ.D2 *+В14[36],В1 (конст. >25-1) 6. LDW.D1 *A4++[1],A6 (постиндекс.)

Перед командой после 4 тактов Перед командой после 4 тактов

В1 хххх ххххh 0000 0012h A4 0000 0100h 0000 0104h

В14 0000 0100h 0000 0100h А6 хххх ххххh 0798 F25Ah

Mem 124h 12h 12h Мem 100h 0798 F25Ah 0798 F25Ah

Команды ввода исходных данных

MVК ( с расширением знаком)

MVК.S1 293,A1 MVК.S1 0А95АF12h,A1

перед командой после 1 такта перед командой после 1 такта

А1 хххх ххххh 0000 0125h A1 хххх ххххh FFFF АF12h

MVКH


MVКH.S1 0А3291h,A1

перед командой после 1 такта

А1 хххх 7634h 000А 7634h

 
 
MVКLH


MVКLН.S1 7A8h,A1

перед командой после 1 такта

A1 хххх F25Ah 07А8 F25Ah

Арифметические команды

ABS – вычисление абсолютной величины.

Особенность команды: результат представляется в дополнительном коде.

ABS.L1 A1,A5 (отрицательное) ABS.L1 A1,A5 (положительное)

перед командой после 1 такта перед командой после 1 такта

А1 8000 4E3Dh 8000 4E3Dh A1 3FF6 0010h 3FF6 0010h

A5 xxxx xxxxh 7FFF B1C3h A5 xxxx xxxxh 3FF6 0010h

ADDК – сложение со знаковой константой

ADDК.S1 15401,A1 (1540110 = 3С29h)

перед командой после 1 такта

А1 0021 37E1h 0021 740Ah

ADD2 – сложениемладших и старших полуслов

ADD2.S1X A1,B1,А2

перед командой после 1 такта

А1 0021 37E1h 0021 37Е1h

В1 039A E4B8h 039A E4B8h

А2 xxxx xxxxh 03BB 1C99h

ADD – сложение знаковых целых

Особенности команды:

- полагается, что операнды уже представлены в дополнительном коде;

- только первый операндом может быть знаковой константой, но длиной не более 5 двоичных разрядов;

- только второй операнд может быть длинным (40-разрядным);

- переполнение исключено.

ADD.L2X A1,В1,В2

перед командой после 1 такта

A1 0000 325Ah 0000 325Ah

В1 FFFF FF12h FFFF FF12h

В2 xxxx xxxxh 0000 316Ch

ADDU – сложение беззнаковых целых

Особенность команды: приемником результата всегда является регистровая пара, поскольку возможно переполнение

ADDU.L1 A1,А2,A5:A4

перед командой после 1 такта

A1 0000 325Ah 0000 325Ah

A2 FFFF FF12h FFFF FF12h

A5:A4 xxxx xxxxh 0000 0001:0000 316Ch

ADDU.L1 A1,А3:А2,A5:A4

перед командой после 1 такта

A1 0000 325Ah 0000 325Ah

А3:A2 0000 00FF:FFFF FF12h 0000 00FF:FFFF FF12h

A5:A4 0000 0000: 0000 0000h 0000 0000: 0000 316Ch

нет доступа

SUB – вычитание знаковых целых

Особенности команды:

- если уменьшаемой положительное, вычитаемое предварительно преобразуется в дополнительный код, после чего производится сложение. Здесь приемником результата является регистр.

- если уменьшаемое отрицательное, то после преобразования вычитаемого в дополнительный код оба операнда расширяются знаком до 40-разрядных чисел, затем производится сложение.

SUB.L1 A1,А2,A3

перед командой после 1 такта

A1 0000 325Ah 0000 325Ah

A2 FFFF FF12h 0000 00ЕЕh

A3 xxxx xxxxh 0000 3348h

SUB.L1 A1,А2,A5:А4

перед командой после 1 такта

A1 FFFF CDA6h FF:FFFF CDA6h

A2 0000 00EEh FF:FFFF FF12h

A5:A4 0000 0000h:0000 0000h 0000 00FF:FFFF CCB8h

SUBU – вычитание беззнаковых целых

Особенность команды: 32-разрядное вычитаемое расширяется знаком до 40-разрядного, затем преобразуется в дополнительный код, после чего производится сложение.

SUBU.L1 A1,А2,A5:А4

перед командой после 1 такта

A1 0000 325Аh 00:0000 325Аh

A2 FFFF FF12h 00:0000 00ЕЕh

A5:A4 0000 0000:0000 0000h 0000 0000:0000 3348h

SUBU.L1 A1,А2,A5:А4

перед командой после 1 такта

A1 FFFF CDA6h 00:FFFF CDA6h

A2 0000 00EEh FF:FFFF FF12h

A5:A4 0000 0000h:0000 0000h 0000 0000:FFFF CCB8h

MPY – умножение младших знаковых полуслов

Особенность команды: только первый операнд может быть знаковой константой, но длинной не более 5 двоичных разрядов.

MPY.M1 A1,А2,A3

перед командой после 2 тактаКомментарий:

A1 0000 0123h 0000 0123h (FA81 – доп. код числа -057Fh)

А2 01E0 FA81h 01E0 FA81h (-057Fh´0123h = -0006 3F5Dh)

A3 xxxx xxxxh FFF9 C0A3h

MPYU – умножение младших беззнаковых полуслов

MPYU.M1 A1,А2,A3

перед командой после 2 тактаКомментарий:

A1 0000 0123h 0000 0123h (FA81h берется как положительное)

А2 0F12 FA81h 0F12 FA81h

A3 xxxx xxxxh 011C C0A3h (результат без знака)

MPYUS (первый операнд – без знака, второй – знаковый)

MPYUS.M1 A1,А2,A3

перед командой после 2 тактаКомментарий:

A1 1234 FFA1h 1234 FFA1h (FA81h берется как положительное)

А2 1234 FFA1h 1234 FFA1h (FA81h – доп. код числа -5Fh)

A3 xxxx xxxxh FFA1 2341h (FA81h´-5Fh = -005Е DBFh)

MPYSU (первый операнд – знаковый, второй – без знака)

MPYSU.M1 13,A1,А2

перед командой после 2 такта

А1 3497 FFF3h 3497 FFF3h

А2 xxxx xxxxh 000C FF57h


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: