Приветствуем, геймер! Ты можешь или
16+
1336767112530

Геймер Arkanus 28

158

Учебник по DCPU-16. Часть 1: Знакомство с регистрами и инструкциями

Учебник по DCPU-16. Часть 1: Знакомство с регистрами и инструкциями
0x10c - Учебник по DCPU-16. Часть 1: Знакомство с регистрами и инструкциямиУчебник по DCPU-16. Часть 1: Знакомство с регистрами и инструкциями

Память DCPU-16

В других языках вы могли встретиться с понятием "переменная". Переменная — это объект, принимающий произвольное значение. В ассемблере DCPU-16 у нас есть регистры — блоки памяти. В них могут содержаться слова, которые будут храниться внутри процессора, то есть мы сможем очень быстро получать доступ к ним.

В DCPU-16 есть восемь регистров значений:

A, B, C, X, Y, Z, I, J.
А еще есть три дополнительных:

    SP - указатель стека;

    PC - счётчик команд;

    O - переполнение.

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






Инструкции

Давайте взглянем на список основных инструкций:

Код
Инструкция
Комментарий
0х0
N/A
не основная, см. далее
0х1
SET a, b
присваивает a значение b
0х2
ADD a, b
присваивает a значение a+b, в случае переполнения присваивает регистру переполнения O значение 0x0001, иначе — 0х0
0х3
SUB a, b
присваивает a значение а-b, в случае переполнения присваивает регистру переполнения O значение 0xffff, иначе — 0х0
0х4
MUL a, b
присваивает а значение a*b, присваивает регистру переполнения O значение ((a*b)>>16)&0xffff
0x5
DIV a, b
присваивает а значение а/b, присваивает регистру переполнения O значение ((a<<16)/b)&0xffff. Если же b==0, присваивает а и O значение 0
0x6
MOD a, b
присваивает а значение а%b. Если же b==0, присваивает а значение 0
0x7
SHL a, b
присваивает а значение а<<b, присваивает регистру переполнения O ((a<<b)>>16)&0xffff
0x8
SHR a, b
присваивает а значение а>>b, присваивает регистру переполнения O значение ((a<<16)>>b)&0xffff
0x9
AND a, b
присваивает а значение a&b
0xa
BOR a, b
присваивает а значение a|b
0xb
XOR a, b
присваивает а значение a^b
0xc
IFE a, b
выполняет следующую инструкцию только тогда, когда a==b
0xd
IFN a, b
выполняет следующую инструкцию только тогда, когда a!=b
0xe
IFG a, b
выполняет следующую инструкцию только тогда, когда a>b
0xf
IFB a, b
выполняет следующую инструкцию только тогда, когда (a&b)!=0
Сейчас мы рассмотрим следующие инструкции: SET, ADD, SUB, MUL, DIV, MOD. Условные инструкции IFE, IFN, IFG, IFB будут рассмотрены в следующей части учебника.

Итак, приступим!






SET

SET используется для присвоения регистру некоторого значения. Давайте возьмём регистр А и присвоим ему значение 10. Наша инструкция будет выглядеть так:

SET A, 10
Теперь регистр А принял значение 10.






ADD, SUB, MUL, DIV

А вот и четвёрка основных операций: сложение, вычитание, умножение и деление. Использовать их крайне просто: как и в случае с инструкцией SET, сначала нужно выбрать регистр. На этот раз выберем B.

Сначала нужно присвоить значение, а уже потом использовать операцию. Если нам нужно сложить 20 и 30, поступим так:

SET B, 30

ADD B, 20

Теперь B принял значение 50.

С остальными операндами можно поступить точно так же.

SET B, 30

SUB B, 10

Даст нам значение 20.
SET B, 6

MUL B, 3

Даст нам значение 18.

Порядок операций

Допустим, нам надо вычислить 30+5*10. Нужно помнить, что умножение проводится перед сложением. Код будет таким:

SET A, 10

MUL A, 5

ADD A, 30

Нетрудно догадаться, что мы получим 80.






Использование нескольких регистров

Порой необходимо использовать не один, а два и более регистров, но это довольно легко реализовать.

Пусть нам надо вычислить 15*3+20*4, для этого нужно два регистра.

SET A, 15

SET B, 20

MUL A, 3

MUL B, 4

ADD A, B

Результатом будет 125. Это значение хранится в А, как было оговорено в определении инструкции АDD.






Нахождение остатка от деления

Инструкция MOD находит остаток, когда делится делимое. Например:

SET A, 15

MOD A, 4

Мы делим 15 на 4, в регистре А теперь хранится значение остатка — 3. Если производится деление нацело, регистр примет значение 0. Например:
SET A, 15

MOD A, 5

А принял значение 0, поскольку 15 делится на 5 без остатка.






В следующей части учебника мы рассмотрим условные инструкции. При создании поста использовались DCPU-16 DASM Assembly Tutorials.

158
Еще в блоге
Интересное на Gamer.ru

2 комментария к «Учебник по DCPU-16. Часть 1: Знакомство с регистрами и инструкциями»

    Загружается
Чат