Advertisement
trannus_aran

stack pointer

Feb 23rd, 2025
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.64 KB | None | 0 0
  1. void stack_in_bounds(struct machine *machine)
  2. {
  3.     // make sure that 0 <= SP <= 15
  4.     // SP is signed, so no need to check for negative
  5.     assert(machine->registers.stack_pointer < 16);
  6. }
  7.  
  8. void stack_push(struct machine *machine, uint16_t value)
  9. {
  10.     stack_in_bounds(machine);
  11.     machine->stack[machine->registers.stack_pointer] = value;
  12.     machine->registers.stack_pointer++;
  13. }
  14.  
  15. uint16_t stack_pop(struct machine* machine)
  16. {
  17.     machine->registers.stack_pointer--;
  18.     stack_in_bounds(machine);
  19.     /* intuitively, this seems to pop the _2nd_ value, not the top */
  20.     return machine->stack[machine->registers.stack_pointer];
  21. }
  22.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement