用debug对以下程序编译、连接后的代码进行研究,回答相关问题。
unsigned int n;
void f1();
int f2(int,int);
void far f3();
main(){n=0;f1();n=f2(1,2);f3();}
void f1(){n=1;}
int f2(int a,int b){int c;c=a+b;return c;}
void far f3(){n=10;}
汇编代码如下:
-u cs:1fa
0CBC:01FA C706A6010000 MOV WORD PTR [01A6],0000
0CBC:0200 E81600 CALL 0219 //0218处ret返回值后的语句即为全局变量n赋值为1;
0CBC:0203 B80200 MOV AX,0002 //n=f2(1,2);参数从右向左依次入栈
0CBC:0206 50 PUSH AX
0CBC:0207 B80100 MOV AX,0001
0CBC:020A 50 PUSH AX
0CBC:020B E81200 CALL 0220
0CBC:020E 59 POP CX
0CBC:020F 59 POP CX
0CBC:0210 A3A601 MOV [01A6],AX
0CBC:0213 9A3102BC0C CALL 0CBC:0231 //far标志调用函数时会显示段地址,常用于段间转移
0CBC:0218 C3 RET
0CBC:0219 C706A6010100 MOV WORD PTR [01A6],0001
函数f2的汇编代码如下:
-u
0CBC:0220 55 PUSH BP
0CBC:0221 8BEC