Show and tell update: I fixed the amp and it works, so Serene is happy She might be happier if I gave her a preamp The headphone amp I passed around a while back would work A bit about the stack: "wikipedia stack" Should it be the stalactite? %rbp is the frame pointer %rsp is the stack pointer Stack management We kinda skipped this one, but we're coming back now If we want the top thing put in rax: mov (%rsp), %rax Second thing, assuming the first was 8 bytes: mov 8(%rsp), %rax Would it be easier to use the base pointer? Doesn't change with push and pop Let's allocate a bunch of local variables in a function! We'll have to remember where they are Also have to get rid of them before returning So what does -fomit-frame-pointer do? Let's have a look! Suppose we want three variables, a, b, and c Could we have that? We'll have to know the offset of each from the stack pointer Alternatively, we could use the base pointer Either way, we should put the stack pointer back at the end How would the calling process know how big our stack frame is? So what if we just want to jump between functions? Who needs ret anyway? Let's try it! What if we wanted to do that in C? setjmp and longjmp Alright, we exported a function to C the other day Let's return without fixing the stack pointer! Now that everything is broken: Assuming our stack frame kinda worked, can we pass a pointer? How about a swap function?