wuzhengmin 发表于 2025-11-17 14:57:14

定位到\stc32_example\example_3_1\Listings目录下,打开main.lst文件:

wuzhengmin 发表于 2025-11-17 14:59:19

main.Ist文件


看反汇编,翻译的多好!


wuzhengmin 发表于 2025-11-17 15:01:20

也会生成demo.map文件

这里比较难懂是存储器映射:


wuzhengmin 发表于 2025-11-17 15:04:04

注意L251选项:
EDATE和HDATA 的位置

wuzhengmin 发表于 2025-11-17 15:07:56

我们先确定listing 选项


我们严格和何老师一样:


wuzhengmin 发表于 2025-11-17 15:15:25

要读懂编译连接的过程提示信息:

wuzhengmin 发表于 2025-11-17 15:58:09

查看生成的文件
目标文件:

wuzhengmin 发表于 2025-11-17 16:03:51

C251 COMPILER V5.60.0,main                                                               17/11/2516:06:10PAGE 1   


C251 COMPILER V5.60.0, COMPILATION OF MODULE main
OBJECT MODULE PLACED IN .\Objects\main.obj
COMPILER INVOKED BY: C:\Keil_v5\C251\BIN\C251.EXE main.c XSMALL INTR2 BROWSE DEBUG CODE LISTINCLUDE SYMBOLS PRINT(.\List
                  -ings\main.lst) OBJECT(.\Objects\main.obj)

stmtlevel    source

    1          sfr P4 = 0xc0;          //P4端口地址映射
    2          sfr P4M1 = 0xb3;      //P4端口配置端口地址映射
    3          sfr P4M0 = 0xb4;                //P4端口配置端口地址映射
    4          sfr P6 = 0xe8;                  //P6端口地址映射
    5          sfr P6M1 = 0xcb;                //P6端口配置端口地址映射
    6          sfr P6M0 = 0xcc;                //P6端口配置端口地址映射
    7         
    8          void main()
    9          {
   10   1            unsigned volatile long i;
   11   1            P4M0 = 0X00;
   12   1            P4M1 = 0X00;                                    //设置P4为准双向端口模式
   13   1            P6M0 = 0X00;
   14   1            P6M1 = 0X00;                                    //设置P6为准双向端口模式      
   15   1            P4 = 0;                                             //P4端口赋值为0,打开led灯总开关
   16   1            while (1)
   17   1            {
   18   2            P6=0x00;                                                      //P6赋值为低,点亮所有led灯
   19   2            //for(i=0;i<100000UL;i++);//计数延时,调试时,去掉该行代码。
   20   2            P6=0xFF;
   21   2            //for(i=0;i<100000UL;i++);//计数延时,调试时,去掉该行代码。
   22   2            }
   23   1      }
*** WARNING C47 IN LINE 10 OF main.c: 'i': unreferenced local variable
   24         
C251 COMPILER V5.60.0,main                                                               17/11/2516:06:10PAGE 2   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


;       FUNCTION main (BEGIN)
                                                ; SOURCE LINE # 8
                                                ; SOURCE LINE # 9
                                                ; SOURCE LINE # 11
000000 75B400         MOV      P4M0,#00H
                                                ; SOURCE LINE # 12
000003 75B300         MOV      P4M1,#00H
                                                ; SOURCE LINE # 13
000006 75CC00         MOV      P6M0,#00H
                                                ; SOURCE LINE # 14
000009 75CB00         MOV      P6M1,#00H
                                                ; SOURCE LINE # 15
00000C 75C000         MOV      P4,#00H
                                                ; SOURCE LINE # 16
               ?C0003:
                                                ; SOURCE LINE # 18
00000F 75E800         MOV      P6,#00H
                                                ; SOURCE LINE # 20
000012 75E8FF         MOV      P6,#0FFH
                                                ; SOURCE LINE # 22
000015 80F8         SJMP   ?C0003
;       FUNCTION main (END)

C251 COMPILER V5.60.0,main                                                               17/11/2516:06:10PAGE 3   

Name                                    Class    Space Type   Offset   Size
---------------------------------------------------------------------------

P6 . . . . . . . . . . . . . . . . . .sfr      datauchar0E8H   1
P6M1 . . . . . . . . . . . . . . . . .sfr      datauchar0CBH   1
P4 . . . . . . . . . . . . . . . . . .sfr      datauchar0C0H   1
P6M0 . . . . . . . . . . . . . . . . .sfr      datauchar0CCH   1
P4M1 . . . . . . . . . . . . . . . . .sfr      datauchar0B3H   1
P4M0 . . . . . . . . . . . . . . . . .sfr      datauchar0B4H   1
main . . . . . . . . . . . . . . . . .public   codefunct000000H23


Module Information          Static   Overlayable
------------------------------------------------
code size            =      23   ------
ecode size         =    ------   ------
data size            =    ------   ------
idata size         =    ------   ------
pdata size         =    ------   ------
xdata size         =    ------   ------
xdata-const size   =    ------   ------
edata size         =    ------   ------
bit size             =    ------   ------
ebit size            =    ------   ------
bitaddressable size=    ------   ------
ebitaddressable size =    ------   ------
far data size      =    ------   ------
huge data size       =    ------   ------
const size         =    ------   ------
hconst size          =    ------   ------
End of Module Information.


C251 COMPILATION COMPLETE.1 WARNING(S),0 ERROR(S)

我们看看list文件的内容:

wuzhengmin 发表于 2025-11-17 16:19:52

每个模块的地址,和最后的可执行文件的地址,是不同的,最终的地址是:

wuzhengmin 发表于 2025-11-17 16:31:33

接着看第二个demo.map文件
页面标题
每个列表页面都包含一个标题,其中包含链接器版本号、日期和页码:

demo.map-记事本
L251 LINKER/LOCATER V4.66.93.0                                                          11/17/202516:06:10PAGE 1


L251 LINKER/LOCATER V4.66.93.0, INVOKED BY:
C:\KEIL_V5\C251\BIN\L251.EXE .\Objects\main.obj TO .\Objects\demo PRINT (.\Listings\demo.map) CASE CLASSES (EDATA (0X0-0
>> XFFF), HDATA (0X0-0XFFF))


CPU MODE:   251 SOURCE MODE
MEMORY MODEL: XSMALL


INPUT MODULES INCLUDED:
.\Objects\main.obj (main)
         COMMENT TYPE 0: C251 V5.60.0
C:\KEIL_V5\C251\LIB\C2SXS.LIB (?C_START)
         COMMENT TYPE 0: A251 V4.69.6.0


ACTIVE MEMORY CLASSES OF MODULE:.\Objects\demo (main)

BASE      START       END         USED      MEMORY CLASS
==========================================================
000000H   000000H   000FFFH   000100H   EDATA
000000H   000000H   000FFFH               HDATA
FF0000H   FF0000H   FFFFFFH   000030H   CODE
000000H   000000H   00007FH   000008H   DATA


MEMORY MAP OF MODULE:.\Objects\demo (main)


START   STOP      LENGTH    ALIGNRELOC    MEMORY CLASS   SEGMENT NAME
=========================================================================
000000H   000007H   000008H   ---    AT..   DATA         "REG BANK 0"
000008H   000107H   000100H   BYTE   UNIT   EDATA          ?STACK
000108H   FEFFFFH   FEFEF8H   ---    ---      **GAP**
FF0000H   FF0002H   000003H   ---    OFFS..   CODE         ?CO?start251?4
FF0003H   FF0019H   000017H   BYTE   INSEG    CODE         ?PR?MAIN?MAIN
FF001AH   FF002CH   000013H   BYTE   UNIT   CODE         ?C_C51STARTUP
FF002DH   FF002FH   000003H   BYTE   UNIT   CODE         ?C_C51STARTUP?3



OVERLAY MAP OF MODULE:   .\Objects\demo (main)


FUNCTION/MODULE            BIT_GROUP   DATA_GROUP
--> CALLED FUNCTION/MODULESTARTSTOPSTARTSTOP
====================================================
?C_C51STARTUP               ----- ---------- -----

*** NEW ROOT **************

?C_C51STARTUP?3             ----- ---------- -----
+--> main/main

main/main                   ----- ---------- -----



PUBLIC SYMBOLS OF MODULE:.\Objects\demo (main)


      VALUE       CLASS    TYPE      PUBLIC SYMBOL NAME
      =================================================
      000000FFH   NUMBER   ---       ?C?CODESEG
      00FF0000H   CODE   ---       ?C?STARTUP
      00000001H   NUMBER   ---       ?C?XDATASEG
L251 LINKER/LOCATER V4.66.93.0                                                      11/17/202516:06:10PAGE 2


      00FF0000H   CODE   ---       ?C_STARTUP
      00FF0003H   CODE   ---       main
*SFR* 000000C0H   DATA   BYTE      P4
*SFR* 000000B4H   DATA   BYTE      P4M0
*SFR* 000000B3H   DATA   BYTE      P4M1
*SFR* 000000E8H   DATA   BYTE      P6
*SFR* 000000CCH   DATA   BYTE      P6M0
*SFR* 000000CBH   DATA   BYTE      P6M1



SYMBOL TABLE OF MODULE:.\Objects\demo (main)

      VALUE       REP       CLASS    TYPE      SYMBOL NAME
      ====================================================
      ---         MODULE    ---      ---       main
      00FF0003H   PUBLIC    CODE   ---       main
      000000E8H   SFRSYM    DATA   BYTE      P6
      000000CBH   SFRSYM    DATA   BYTE      P6M1
      000000C0H   SFRSYM    DATA   BYTE      P4
      000000CCH   SFRSYM    DATA   BYTE      P6M0
      000000B3H   SFRSYM    DATA   BYTE      P4M1
      000000B4H   SFRSYM    DATA   BYTE      P4M0

      00FF0003H   BLOCK   CODE   ---       LVL=0
      00FF0003H   LINE      CODE   ---       #8
      00FF0003H   LINE      CODE   ---       #9
      00FF0003H   LINE      CODE   ---       #11
      00FF0006H   LINE      CODE   ---       #12
      00FF0009H   LINE      CODE   ---       #13
      00FF000CH   LINE      CODE   ---       #14
      00FF000FH   LINE      CODE   ---       #15
      00FF0012H   LINE      CODE   ---       #16
      00FF0012H   LINE      CODE   ---       #18
      00FF0015H   LINE      CODE   ---       #20
      00FF0018H   LINE      CODE   ---       #22
      ---         BLOCKEND---      ---       LVL=0

      ---         MODULE    ---      ---       ?C_START
      00FF0000H   PUBLIC    CODE   ---       ?C?STARTUP
      00FF0000H   PUBLIC    CODE   ---       ?C_STARTUP

Program Size: data=8.0 edata+hdata=256 xdata=0 const=0 code=48
L251 RUN COMPLETE.0 WARNING(S),0 ERROR(S)
实际是连接器完成连接后生成的文件
页: 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22
查看完整版本: 跟着何宾老师学习STC32位8051单片机原理及应用-STC32G12K128