ITEEDU

12.2 C语言程序的汇编输出

在Turbo C++或Borland C++编程环境下,我们可TCC或BCC行命令把一个C语言的源程序转换成汇编语言的源程序。通过阅读汇编语言程序可以很准确地知道C语言语句的功能是如何实现的,这样,可为将来学习《编译原理》课程中的"寄存器调度"和"代码生成"等相关知识打下良好的基础。

C语言源程序转换的命令格式如下:

 TCC -S t1.cpp 或 BCC -S t1.cpp   ;假设其文件名为t1.cpp

若命令TCC/BCC不带参数的话,则将显示其使用方法。

下面是C语言程序及其相对应的汇编语言程序,希望读者能逐行对照理解它们语句之间的转换关系,这将能进一步理解高级语言的语句功能。

1、C语言程序清单


#include 

              int       sum(int a, int b, int c)

{

return (a+b+c);

}

void main()

{int a, b, c;

           a  =         b = 12      ;

           c  =         32          ;

printf("%d", sum(a,b,c));

} 

2、生成的汇编语言程序清单

…… ;一系列辅助说明信息

          _TEXT segment  byte      public 'CODE'          ;代码段的开始

;int sum(int a, int b, int c) ;C语言语句 

              assume    cs : _TEXT

@sum$qiii proc near ;过程说明,对应于C语言sum过程

push bp ;为读取堆栈中的参数作准备,可参见第7.3.3节内容

mov bp, sp

;{

;return(a+b+c); 

;} 

;void main() 

;{int a, b, c; ;局部变量是用堆栈来存储的,请见第7.5.10节

; a = b = 12; ;给局部变量赋值

; c = 32; 

; printf("%d", sum(a,b,c)); ;调用系统标准函数 

; } 

_TEXT ends ;代码段的结束

_DATA segment word public 'DATA' ;数据段的定义

s@ label byte

db '%d'

db 0

_DATA ends

public _main ;下面说明函数的属性,请见第7.6.3节

public @sum$qiii

extrn _printf : near

_s@ equ s@

              end