Раз элементы стека имеют тип байт, операция Push(a:byte) помещает в стек один байт, а функция Pop:byte извлекает байт из стека с соответствующим изменением в обеих случаях значения указателя. Для типа integer необходимо раздробить двухбайтовую переменную на два байте и дважды использовать Push, а при извлечении - склеить два последовательно извлеченных байта в одно
integer. Для longint аналогично, но работая с группами по 4 байта.
Смотри.
Представь себе, что у тебя органичение - не в двоичной системе, а в десятичной.
А именно - стек принимает трехзначные десятичные числа, а тебе нужно записать туда шестизначное, и потом извлечь.
Это понятно как делать - сначала три нижних разряда, потом - три верхних:
Помещение в стек:
Push(x mod 1000);
Push(x div 1000);
Извлечение:
x := Pop();
x := x + 1000 * Pop();
Почему 1000? Потому, что 1000 - это 10 в кубе: 10, потому что это основание десятичное системы счисления, а в кубе - потому что нам нужны три цифры.
Теперь смотрим, какая задача у тебя. Что такое байт? Это восемь бит. Переменная, занимающая один байт - это попросту восьмизначное *двоичное* число. А тебе нужно работать с шестнадцатизначным.
Поступаем совершенно аналогично - сначала нижние 8 бит, потом - верхние:
Помещение в стек:
Push(x mod 256);
Push(x div 256);
Извлечение:
x := Pop();
x := x + 256 * Pop();
Почему 256? Потому, что 256 - это 2 в восьмой: 2, потому что это основание двоичной системы счисления, а в восьмой - потому что нам нужно 8 бит.
Для longint попробуй сам.