Вторник, 21.05.2024, 21:48

Каталог статей

Главная » Статьи » DCPU-16 » Туториалы

Немного о стеке и JSR
Для начала, давайте разберемся, что же такое стек?
Стек - это совокупность данных, в котором данные "вытаскиваются" те, которые были последними "засунуты" в стек. (Это так, моё образное представление)

Стек подчиняется принципу LIFO (Last In - First Out).
Возьмем пример: есть у нас числа 1, 2, 3, 4, 5.
Мы их по очереди кладем в стек. Получается массив из чисел 1, 2, 3, 4 ,5. Проблема в том, что эти числа мы можем доставать лишь с конца. Что последним положили, то первым и возьмем. (LIFO)
Т.е. при доставании чисел из стека, мы из будем доставать в порядке 5, 4, 3, 2, 1.

Итак, чтобы положить элемент в стек, мы используем:

SET PUSH, A ; Кладем в стек значение регистра А

Что бы достать элемент проделываем это:

SET A, POP ; Устанавливаем регистру А значение последнего элемента

PUSH и POP можно использовать и в других командах.

Наверное, вы хотели создать свою функцию? Есть такая прекрасная вещь, как JSR.
JSR - почти аналогичен SET PC, key, за исключением того, что он кладет текущее значение PC плюс единичка в стек.

Как это работает? - Очень просто!

; Stack test
; Author: x0m9k

SET PC, main

: func1
SET [0x8001], 0xf041 ; Выводим букву А.
SET PC, POP ; Достаем элемент из стека, т.е. место вызова (JSR) но следующая строка.

: func2
SET [0x8002], 0xf042 ; Выводим букву B.
SET PC, POP

: main ; Основная часть программы
SET [0x8000], 0xf043 ; Выводим С...
JSR func1 ; ...А...
JSR func2 ; ...B...

: end
SET PC, end

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

Источник: http://vk.com/topic-37480485_26395122
Категория: Туториалы | Добавил: x0m9k (15.04.2012) | Автор: Артем Кузнецов
Просмотров: 390 | Теги: ассемблер, dcpu-16, stack, стек, assembler | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Defend Developing | 2024 | Нашёл баг?