move 0(fp), r0 add 4(fp), r0 move r0, 8(fp) # means 8(fp) := 0(fp) + 4(fp)
compare r1, r2 jumplt L10 # jumps to L10 if value of r1 < value of r2 jump L20 # unconditionally jump to L20
push 4(fp) push 1 call foo # calls foo(1, X) if X's offset is 4
L10: move r1, r2
declare x,y,z,a,b,c,d,e,f,g,h,i,j,k,l,m: integer; begin x := x+y+z+a+b+c+d+e+f+g+h+i+j+k+l+m; y := x+(y+(z+(a+(b+(c+(d+(e+(f+(g+(h+(i+(j+(k+(l+m)))))))))))))); z := -x-y-z-a-b-c-d-e-f-g-h-i-j-k-l+-m; a := -x-(y-(z-(a-(b-(c-(d-(e-(f-(g-(h-(i-(j-(k-(l+-m)))))))))))))); b := -x-y-z/a-b-c/d-e-f/g-h-i/j-k-l/m; end;
push fp # save the caller's fp sub 64,sp # allocate all the local variable space mov sp,fp # setup our fp, so we can access local variables offset(fp) push r0 # save the registers we will use (caller may need values) push r1 push r2 mov ... # code for assignment statements pop r2 # restore the registers we saved pop r1 pop r0 add 64,sp # deallocate the local variable space pop fp # restore the caller's fp ret # return to the caller (whose address is on top of stack)