Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов. 8(977)608-78-62 adm@nixm.ru
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов. 8(977)608-78-62 adm@nixm.ru
Эмулятор троичного компьютера: стек
Эмулятор троичного компьютера: стек
Простенько и со вкусом. В качесве стека выбрала массив фиксированного размера.
В экспериментальном варианте для наглядности использовала целые числа вместо структуры.
В главной функции поочередно в стек ложим три целочисленных значения и так же поочередно
снимаем их со стека в обратном порядке как и требует алгоритм работы стека. Это только основа
которая будет в дальнейшем обрастать дополнительным кодом, например нужно будет
продумать изменение данных в регистре PS определяющим вершину стека, я склонна полагать
что раз адреса стека находятся вне адресного пространства то и стек PS можно организовать
как флаг из целого числа, а не структуры трайта и оставить так как есть в коде в виде глобальной
переменной во втором поле структуры стека.
[spoiler][/spoiler]
Пошла коммитить
В экспериментальном варианте для наглядности использовала целые числа вместо структуры.
В главной функции поочередно в стек ложим три целочисленных значения и так же поочередно
снимаем их со стека в обратном порядке как и требует алгоритм работы стека. Это только основа
которая будет в дальнейшем обрастать дополнительным кодом, например нужно будет
продумать изменение данных в регистре PS определяющим вершину стека, я склонна полагать
что раз адреса стека находятся вне адресного пространства то и стек PS можно организовать
как флаг из целого числа, а не структуры трайта и оставить так как есть в коде в виде глобальной
переменной во втором поле структуры стека.
[spoiler]
Код: Выделить всё
/* Надо написать еще две функции call и ret
* которые будут использовать pop и push
* и в конечном варианте надо подставить
* вместо данных определенную ранее структуру трайта.
*/
#include <stdio.h>
#include <stdlib.h>
#define STACK_S 10
typedef struct stack_t {
unsigned short data[STACK_S];
unsigned short size;
} Stack_t;
Stack_t stack;
void push(unsigned short value) {
if (stack.size == STACK_S)
exit(1);
stack.data[stack.size] = value;
stack.size++;
}
int pop() {
if (stack.size == 0)
exit(1);
stack.size--;
return stack.data[stack.size];
}
int main(void) {
unsigned short digit1 = 1;
unsigned short digit2 = 2;
unsigned short digit3 = 5;
push(digit1);
push(digit2);
push(digit3);
printf("%hu\n", pop());
printf("%hu\n", pop());
printf("%hu\n", pop());
return 0;
}
Пошла коммитить
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay