c语言lst文件,Keil C51 之LST文件

Keil C51编译器在编译程序时,会生成一个扩展名为LST的列表文件,也被称为listing file。

这个文件包含了有关编译过程的丰富信息,该文件由多个段组成,其中Symbol Listing 和 Module Information两个段对于用户分析调试程序尤其有用,下面按照各个段在             listing file中出现的先后顺序加以说明:

一、页头段(Page Header)

每个lst文件都有一个包含了编译器版本号、源文件名称、日期、时间、页号的头部。示例:

C51 COMPILER V7.20   MEASURE       10/01/2004 14:05:05 PAGE 1

二、命令段(Command Line)

命令段展示了 Keil IDE 调用C51编译器时传递的所有命令, 示例:

C51 COMPILER V7.20, COMPILATION OF MODULE MEASURE

OBJECT MODULE PLACED IN Measure.OBJ

COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Measure.c HOLD(128,

-0,0) OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECT

-EXTEND CODE LISTINCLUDE SYMBOLS

三、源码段(Source Code)

源码段展示了每行源程序及其行号。

COND指令,可以控制条件编译代码(#if 作用范围内的代码)被源码段列出,NOCOND指令,可以控制条件编译代码不被源码段列出。

用户可以使用 LISTINCLUDE 指令,让源码段显示 #include 所包含的文件内容,默认情况下,#include包含的文件内容不被显示。

源码段示例:

53          char code ERROR [] = "\n*** ERROR: %s\n";

54

55          #define PERIOD     -250

56          #define WRONGINDEX 0xffff

57

58

59          /* The following function is called from */

60          /* the interrupt service routine. */

61          /* Save current measurements in save_record */

62

63

64          #pragma REGISTERBANK (1)

65

66          static void save_current_measurements (void) {

67   1        save_record[sindex++] = current;

68   1        if (sindex == SCNT) sindex = 0;

69   1        if (sindex == savefirst)  {

70   2          if (++savefirst == SCNT)  savefirst = 0;

71   2        }

72   1      }

73

74

75          /* Timer 0 interrupt service function */

76          /* executes each 250 usec @ 12 MHz Crystal Clock */

77

78          void timer0 (void) interrupt 1 using 1 {

79   1

80   1        unsigned char i;

81   1

82   1        if (measurement_interval)  {

83   2          save_current_measurements ();

84   2          measurement_interval = 0;

85   2        }

四、汇编代码段(Assembly Listing)

汇编代码段包含了由C语言程序编译产生的汇编代码,CODE 指令可以控制LST文件产生汇编代码段。

汇编代码段示例:

; FUNCTION save_current_measurements (BEGIN)

; SOURCE LINE # 66

; SOURCE LINE # 67

0000 0500        R     INC     sindex+01H

0002 E500        R     MOV     A,sindex+01H

0004 AE00        R     MOV     R6,sindex

0006 7002              JNZ     ?C0064

0008 0500        R     INC     sindex

000A         ?C0064:

000A 14                DEC     A

000B FF                MOV     R7,A

000C 120000      R     LCALL   L?0079

000F A809              MOV     R0,AR1

0011 FC                MOV     R4,A

0012 7D01              MOV     R5,#01H

0014 120000      R     LCALL   L?0077

; SOURCE LINE # 68

0017 E500        R     MOV     A,sindex+01H

0019 B4E80A            CJNE    A,#0E8H,?C0001

001C E500        R     MOV     A,sindex

001E B40205            CJNE    A,#02H,?C0001

0021 E4                CLR     A

0022 F500        R     MOV     sindex,A

0024 F500        R     MOV     sindex+01H,A

0026         ?C0001:

; SOURCE LINE # 69

0026 E500        R     MOV     A,sindex+01H

0028 B5001B      R     CJNE    A,savefirst+01H,?C0004

002B E500        R     MOV     A,sindex

002D B50016      R     CJNE    A,savefirst,?C0004

五、符号列表段(Symbol Listing)

符号列表段包含了源程序文件中定义的变量信息,比如变量名称、类别(SFR、structure、typedef、static、public、auto、extern)、存储空间、数据类型、偏移量、占用       字节数等。SYMBOLS 指令控制LST文件产生符号列表段。

符号列表段示例:

NAME                        CLASS   MSPACE  TYPE    OFFSET  SIZE

====                        =====   ======  ====    ======  ====

P4 . . . . . . . . . . . .  SFR      DATA   U_CHAR   00E8H  1

P5 . . . . . . . . . . . .  SFR      DATA   U_CHAR   00F8H  1

BD . . . . . . . . . . . .  ABSBIT   -----  BIT      00DFH  1

current. . . . . . . . . .  PUBLIC   DATA   STRUCT   0000H  11

ERROR. . . . . . . . . . .  PUBLIC   CODE   ARRAY    0416H  16

sindex . . . . . . . . . .  PUBLIC   DATA   U_INT    000BH  2

clock. . . . . . . . . . .  * TAG *  -----  STRUCT   -----  5

hour . . . . . . . . . .  MEMBER   -----  U_CHAR   0000H  1

min. . . . . . . . . . .  MEMBER   -----  U_CHAR   0001H  1

sec. . . . . . . . . . .  MEMBER   -----  U_CHAR   0002H  1

msec . . . . . . . . . .  MEMBER   -----  U_INT    0003H  2

size_t . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2

menu . . . . . . . . . . .  STATIC   CODE   ARRAY    00C7H  847

ADCON. . . . . . . . . . .  SFR      DATA   U_CHAR   00D8H  1

mdisplay . . . . . . . . .  STATIC   DATA   BIT      0001H  1

interval . . . . . . . . .  PUBLIC   DATA   STRUCT   0014H  4

interval . . . . . . . . .  * TAG *  -----  STRUCT   -----  4

min. . . . . . . . . . .  MEMBER   -----  U_CHAR   0000H  1

sec. . . . . . . . . . .  MEMBER   -----  U_CHAR   0001H  1

msec . . . . . . . . . .  MEMBER   -----  U_INT    0002H  2

wchar_t. . . . . . . . . .  TYPEDEF  -----  CHAR     -----  1

_getkey. . . . . . . . . .  EXTERN   CODE   PROC     -----  -----

BSY. . . . . . . . . . . .  ABSBIT   -----  BIT      00DCH  1

_toupper . . . . . . . . .  EXTERN   CODE   PROC     -----  -----

_printf. . . . . . . . . .  EXTERN   CODE   PROC     -----  -----

_set_interval. . . . . . .  EXTERN   CODE   PROC     -----  -----

_read_index. . . . . . . .  STATIC   CODE   PROC     0000H  -----

buffer . . . . . . . . .  AUTO     DATA   PTR      0000H  3

index. . . . . . . . . .  AUTO     DATA   INT      0003H  2

args . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1

measurement_interval . . .  STATIC   DATA   BIT      0002H  1

六、模块信息段(Module Infomation)

模块信息段提供了源程序文件中使用的各种存储区的尺寸信息,示例:

MODULE INFORMATION:   STATIC OVERLAYABLE

CODE SIZE        =    902    ----

CONSTANT SIZE    =   1062    ----

XDATA SIZE       =   8184    ----

PDATA SIZE       =   ----    ----

DATA SIZE        =     24       8

IDATA SIZE       =   ----      15

BIT SIZE         =      3    ----

END OF MODULE INFORMATION.

七、警告和错误段(Warnings and Errors)

LST文件将编译过程中产生的错误、警告信息,保存在警告和错误段中。这些信息和编译时屏幕显示的提示信息相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值