установите себе вторую операционку типа Колибри, она вся написана на ассемблере, там есть компилятор и т.д. кроме того, найдите пару учебников и справочников по ассемблеру. и начинайте делать пробные небольшие программы. постепенно научитесь!
не надо всё смешивать в одну кучу mul и shr. рассмотрим сдвиги:
представим например число 1 в двоичном исчислении 8 бит: 00000001.
что будет если сдвинуть биты влево? - что в десятичной системе будет 2.
ещё сдвинем влево - получится 00000100 - в десятичной это 4.
вот получается и умножение при сдвиге влево. а при сдвиге вправо - деление
для начала нужно исправить ошибку - команды pop должны вызываться в обратном порядке, по сравнению с командами push, а у Вас они идут НЕ в обратном порядке