void PrintStack(int sp, int mem_base) { int argc; int addr; int i; int str_at; /* * print three words of zeros at stack top */ printf("sp:\t%8d: | %8d |\n",sp,*(int* )(&main_memory[sp+mem_base])); printf("\t%8d: | %8d |\n",sp+4,*(int *)(&main_memory[sp+4+mem_base])); printf("\t%8d: | %8d |\n",sp+8,*(int *)(&main_memory[sp+8+mem_base])); argc=*(int *)(&main_memory[sp+12+mem_base]); printf("\t%8d: | %8d | argc\n", sp+12,*(int *)(&main_memory[sp+12+mem_base])); printf("\t%8d: | %8d | &argv[0]\n", sp+16,*(int *)(&main_memory[sp+16+mem_base])); printf("\t%8d: | %8d | &envp[0]\n", sp+20,*(int *)(&main_memory[sp+20+mem_base])); for(i=0; i < argc; i++) { addr = sp+24+(i*4)+mem_base; str_at=*(int *)(&main_memory[addr]); printf("\t%8d: | %8d | argv[%d] -> %s\n", sp+24+(i*4),*(int *)(&main_memory[addr]), i,(char *)&main_memory[str_at+mem_base]); } return; }