#include int height = 0; // = height of stair case int numBricks = 0; // = num bricks needed to build staircase void c_tri() { if (0 < height) { numBricks = numBricks + height; height = height - 1; c_tri(); } } void asm_tri() { asm("push eax \n\t" "mov eax, _height \n\t" "cmp eax, 0 \n\t" "jna QUIT \n\t" "add _numBricks, eax \n\t" "sub eax, 1 \n\t" "mov _height, eax \n\t"); printf("height = %d, numBricks = %d\n", height, numBricks); // note that we can temporarily leave assembly for C asm("pop eax \n\t" "call _asm_tri \n" "QUIT: \n\t" "pop eax"); } int main(void) { while(1) { printf("-> "); scanf("%d", &height); if (height < 0) break; asm_tri(); printf("%d\n", numBricks); } printf("bye\n"); return 0; }