Стековая машина определяется следующими структурами данных:
Integer D[0..2n1] память данных, стек
Integer C[0..2n2] память команд
Integer p_D номер последней занятой ячейки в D, указатель стека
Integer p_C номер текущей просматриваемой ячейки в С, счетчик команд
Boolean ERROR индикатор ошибки
Массив D может содержать произвольные целые числа из диапазона [-9999 9999]. В элементах массива C могут находиться либо числа из диапазона [–10013 –10000], представляющие код одной из принимаемых стековой машиной команд, либо числа из диапазона [-9999 9999], представляющие аргументы следующих далеее команд. Приняты следующие правила кодирования команд:
Таблица 1
| Числовой код команды | Мнемоническое обозначение |
| -10000 | Add |
| -10001 | Mult |
| -10002 | Minus |
| -10003 | Div |
| -10004 | If= |
| -10005 | If< |
| -10006 | Goto |
| -10007 | Load |
| -10008 | Free |
| -10009 | Store |
| -10010 | Count |
| -10011 | |
| -10012 | Read |
| -10013 | Stop |
Для каждой из принимаемых стековой машиной команд определено ее назначение в соответствии со следующими правилами:
Таблица 2
| Мнемоническое обозначение | Выполняемые действия | Возможная реализация команды на псевдокоде |
| Add | Взять с вершины стека два элемента, поместить на вершину стека сумму этих элементов | p_D=p_D-1; D[p_D]=D[p_D]+D[p_D+1]; p_C=p_C+1; |
| Mult | Взять с вершины стека два элемента, поместить поместить на вершину стека произведение этих элементов | p_D=p_D-1; D[p_D]=D[p_D]*D[p_D+1]; p_C=p_C+1 |
| Minus | Взять с вершины стека один элемент, поместить на вершину стека отрицание числа | D[p_D]=-D[p_D]; p_C=p_C+1 |
| Div | Взять с вершины стека два элемента, поместить на вершину стека результат целочисленного деления первого элемента на второй | p_D=p_D-1; D[p_D]=D[p_D]/D[p_D+1]; p_C=p_C+1 |
| If= | Взять с вершины стека три элемента Если первые два снятых элемента стека(вершина стека и элемент под ней) равны, то счетчик команд сделать равным третьему снятому элементу | IF D[p_D]=D[p_D-1] THEN p_C=D[p_D-2] ELSE p_C=p_C+1 FI p_D=p_D-3; |
| If< | Взять с вершины стека три элемента Если первый снятый элемент стека (вершина стека) меньше второго, то счетчик команд сделать равным третьему снятому элементу | IF D[p_D]<D[p_D-1] THEN p_C=D[p_D-2] ELSE p_C=p_C+1 FI p_D=p_D-3; |
| Goto | Взять с вершины стека один элемент и присвоить его значение счетчику команд | p_C=D[p_D]; p_D=p_D-1 |
| Load | Взять с вершины стека один элемент и поместить на вершину стека значение элемента стека, индексированного значением снятого элемента | D[p_D]=D[D[p_D]]; p_C=p_C+1 |
| Free | Удалить с вершины стека один элемент | p_D=p_D-1; p_C=p_C+1 |
| Store | Взять с вершины стека один элемент и используя его значение как индекс элемента в стеке, поместить значение следующего элемента стека в индексируемый элемент | D[D[p_D]]=D[p_D-1]; p_D=p_D-1; p_C=p_C-1 |
| Count | Поместить на вершину стека количество элементов в нем | p_D=p_D+1; D[p_D]=p_D; p_C=p_C+1 |
| Вывести на устройство вывода значение элемента на вершине стека. Содержимое стека не изменяется. | PRINT(D[p_D]); p_C=p_C+1 | |
| Read | Прочитать целое число с устройства ввода, поместить его на вершину стека | p_D=p_D+1; READ(D[p_D]); P_C=p_C+1 |
| Stop | Остановить работу машины |
В том случае, когда счетчик команд указывает на элемент, содержащий аргумент команды (число из диапазона [-9999 9999]), выполняется его загрузка в стек данных и перемещение счетчика команд на следующий элемент:
p_D=p_D+1;D[p_D]=C[p_C];p_C=p_C+1






