指令系统及汇编语言程序设计
第3章 8086指令系统-汇编语言程序设计教程-陆遥-清华大学出版社

直接寻址方式可以利用变量名的偏移地址属性来 描述操作数的偏移地址(可直接用变量名,或将 变量名置于方括号[ ]中),段寄存器默认为DS。 如果实际使用的段寄存器不是DS,则必须用段 前缀明确指出。
【例3.7】设数据段内有如下变量定义语句
VAR DB 76H,5CH,0A3H,08H
分析以下指令的执行结果。
3.1 指令系统基本概念
指令是给计算机下达的一个简单操作任务,CPU 所能执行的所有指令构成了一个计算机的指令系 统(也称指令集)。
汇编语言指令是对机器指令的符号化表示,采用 助记符来表示指令的操作功能和操作对象。
指令通常可以分为以下几类:
⑴ 数据传送类指令。 ⑵ 算术运算类指令。
⑸ 程序控制类指令。 ⑹ 处理器控制类指令。
【例3.3】要求将数据68传送给AL寄存器,写出相应的传 送指令。 分析:由于AL寄存器接收数据,所以目的操作数为AL, 采用寄存器寻址方式,而源操作数为常数68,采用立即寻 址方式
MOV AL,68 ;AL←68
【例3.4】设被加数存于寄存器DX中,加数为512,写出相 应的加法指令。 分析:因为被加数由寄存器DX提供,所以DX为目的操作 数,采用寄存器寻址方式,而加数为常数512,采用立即 寻址方式
操作数。
2. ADD指令
指令格式:ADD DST,SRC 指令功能:DST←(DST)+(SRC) 。执行加法运算。 操作数特点:两个操作数。被加数DST为目的操作数,加
数SRC为源操作数。
3. NOT指令
指令格式:NOT OPR 指令功能:OPR←(OPR) 。执行逻辑非运算。 操作数特点:一个操作数。OPR既是目的操作数,也是源
段地址由段寄存器提供,用段前缀(DS:,ES:, CS:或SS:)来指明;偏移地址(亦称有效地址) 则有多种表示形式,由此形成了不同的存储器寻 址方式。
第5章 指令与指令系统和汇编语言程序设计(2)

运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D 20F0命令看内存的20F0区域中保存的运行结果,6个大写的英文字母 已经被修改为小写字母: 0061 0062 0063 0064 0065 0066
汇编语言程序设计
1 将寄存器R2和R3的内容相加,结果存入R0。 2 将寄存器R2和R3的内容相加,如果有进位,寄存器R0的内 容置1,否则置0 3 若R1的内容是负数则置R0为-1,否则置0(提示:用TEST) 4 检测R3的是奇数,R0的内容置为1,否则置为0。(提示: 用移位检测C的方法来测量一位) 5 将内存中1000H起始的10个单元的内容取出加2送入原地址。 6 已知内存中1000H起始的10个单元中的数是ASC码,将其取 出送显示。 7 将键盘录入的数存到内存1000H单元中。 8 将键盘录入的10个数存到内存1000H-1009H。
有寄存器寻址,寄存器间接寻址等7种。
从表5.1中可以看出, (A组) INC DR 单操作数(DR的内容加1) (B组) LDRR DR,[SR] 双操作数 (DR [SR])
(4)从指令的功能区分
有运算、读写内存类指令,输入输出指令,转移 指令,子程序调用指令,置进位标志指令等。
从表5.1中可以看出, (A组) ADD DR ,SR 加运算 (B组) LDRR DR,[SR] 读写内存
41 42 43 44 45 46
A 2080
MVRD R3, 0006 ;指定被读数据的个数
MVRD R2, 20F0 ;指定被读、写数据内存区首地址
(2084) LDRR R0, [R2]
;读内存中的一个字符到R0寄存器
CALA 2100 ;调用子程序(入口地址为2100),完成显示、
指令系统与汇编语言程序设计

1010011i n
85 n1 n2
MOV DPTR,#d1d2 ;DPTR←d1d2
90 d1 d2
习题1:找出配对指令,实精现选p反pt 向传送。
《单片机原理及应用》教学课件
例2-4-1:顺序执行下列指令序列,求每一步执行结果。
MOV A,#30H
;A= 30H
MOV 4FH,A
;(4FH)= 30H
2-1 指令格式
一. 汇编语言指令格式 [标号:]操作码 操作数1,操作数2[;注释]
换行表示一条指令结束。 例: LOOP: MOV A,#40H ;取参数
1.标号:指令的符号地址 2.操作码:指明指令功能。 3.操作数:指令操作对象 数据、地址、寄存器名及约定符号。 4.注释行:说明指令在程序中的作用。
第2章 指令系统与汇编语言程序设计 2-1 指令格式 2-2 指令寻址方式 2-3 状态标志 2-4 MCS-51指令系统
《单片机原理及应用》教学课件
单片机指令系统概述
一、MCS-51指令分类
MCS-51单片机共有111条指令。 1.按指令所占的字节数分类
①单字节指令49条 ②双字节指令46条 ③三字节指令16条 每条指令的平均字节数:
精选ppt
《单片机原理及应用》教学课件
例:查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H单元中,要 求将查表求Y,存入片内RAM21H单元。
2)指令地址
1000H 1002H 1004H 1005H 1007H 1008H 100BH
源程序
ORG 1000H
;程序起始地址
SQU: MOV A,20H ;取X
操作码和操作数是指令主体。
精选ppt
第三章MCS51单片机的指令系统和汇编语言程序示例(第5范文

第三章MCS51单片机的指令系统和汇编语言程序示例(第5、6、7节)1.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1)MOV A,#19HADD A,#66H(2)MOV A,#5AHADD A,#6BH2.已知:A=85H,R0=30H,(30H)=11H, (31H)=0FFH,C=1,试计算单片机执行下列指令后累加器A和C中的值各是多少?(1)ADDC A,R0, (2)ADDC A,31H(3) ADDC A,@R0, (4) ADDC A,#85H3.已知M1和M2中分别存放两个16位无符号数的低8位,M1+1和M2+1中分别存放两个16位无符号数的高8位,计算两数之和(低8位存放在M1,高8位存放在M1+1,设两数之和不超过16位)。
4.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?CLR CMOV A,#52HSUBB A,#0B4H5.已知:A=0DFH,R1=40H,R7=19H,(30H)=00H,(40H)=0FFH,试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1) DEC A (2) DEC R7 (3) DEC 30H (4) DEC @R16.试写出能完成85+59的BCD加法程序,并对工作过程进行分析。
7.已知:两个8位无符号乘数分别放在30H和31H单元中,编程实现他们乘积的低8位存放在32H,高8位存放在33H。
8.已知:R0=30H,(30H)=0AAH,试分析执行下列指令后累加器A和30H单元的内容是什么?(1)MOV A, #0FFH ANL A, R0(2)MOV A, #0FH ANL A, 30H(3)MOV A, #0F0H ANL A, @R0(4)MOV A, #80H ANL 30H, A9.设:A=0AAH和P1=0FFH,试编程把累加器A的低四位送入P1口的低四位,P1口的高四位保持不变。
指令系统与汇编语言程序设计例

1
程序1
DATA SEGMENT
NAMES DB ‘TOM..’,20 DB ‘CATE’,25 DATA ENDS 该数据区在内存中的存放情况?
2
程序2
DATA SEGMENT A DB ‘123ABC’
DATA ENDS
DATA SEGMENT
9
10
)
序
,(
序
程
ห้องสมุดไป่ตู้
,
,
,
:
5
MOV DX 280H IN AL DX MOV CX 8 NEXT ROR AL 1 JNC NEXT1 MOV Byte PTR[BX]
0FFH JMP NEXT2 NEXT1 MOV [BX] 0
,
,
:
程序5(序)
NEXT2:INC BX LOOP NEXT …… 如果从280H端口输入的是
ASSUME CS:CODE, DS:DATA, ES:DATA
STR2 DB ‘HELLO WOOLD!’ FLAG DB ? CODE SEGMENT
DATA SEGMENT
6
程序4 (序)
START:MOV AX,DATA MOV DS,AX MOV ES,AX LEA BX,FLAG LEA SI,STR1 LEA DI,STR2 MOV CX,COUNT CLD
LP:MOV AH,2 MOV AL,[BX] XCHG AL,DL
CODE SEGMENT
INC BX
ASSUME CS:CODE,
DS:DATA
START:MOV AX, DATA
MCS-51单片机指令系统与汇编语言程序设计

docin/sundae_meng
P73 例2.58
ORG 0100H
MOV DPTR,#DATA LOOP2: MOV R1,A
MOV R0,#30H
INC R1
MOV R1,#40H LOOP: MOVX A,DPTR
START:
ORG 1000H MOV DPTR,#TABLE MOV A,20H ANL A,#0FH MOVC A,@A+DPTR MOV 21H,A
docin/sundae_meng
TABLE:
MOV A,20H ANL A,#0F0H
SWAP A MOVC A,@A+DPTR MOV 22H, A SJMP $ DB 30H,31H,32H,33H,34H
docin/sundae_meng
ORG 1000H
START: MOV A, 40H
; 将X送入A中
JZ COMP
; 若A为0,转至COMP处
JNB ACC.7, POST ; 若A第7位不为1(X为正数),则程序转到
POST处,否则(X为负数)程序往下执行
MOV A, #0FFH ; 将1(补码)送入A中
docin/sundae_meng
2.4.1 汇编语言程序设计的步骤
汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程称为汇编 语言程序设计。 汇编语言程序设计的步骤: (1)拟订设计任务书 (2)建立数学模型 (3)确定算法 (4)分配内存单元,编制程序流程图 (5)编制源程序
进一步合理分配存储器单元和了解I/O接口地址;按功能设计程序,明确 各程序之间的相互关系;用注释行说明程序,便于阅读和修改调试和修改。 (6)上机调试 (7)程序优化
第三章MCS51系列单片机指令系统及汇编语言程序设计

SJMP rel ;PC+ 2 + rel→PC 短转移指令为一页地址范围内的相对转移指令。因为rel为1字节补码 偏移量,且SJMP rel指令为2字节指令,所以转移范围为-126D~+ 129D 【4】间接转移指令
表3.4 程序存储器空间中的32个基本2K地址范围
0000H~07FFH 0800H~0FFFH 1000H~17FFH 1800H~1FFFH 2000H~27FFH 2800H~2FFFH 3000H~37FFH 3800H~3FFFH 4000H~47FFH 4800H~4FFFH 5000H~57FFH
3. 寄存器寻址
以通用寄存器的内容为操作数的寻址方式。通用寄存 器包括:A,B,DPTR,R0~R7。其中,R0~R7必须在 工作寄存器组之中。
例如:INC R0 ;(R0)+1→R0
需要注意的是,A和B既是通用寄存器,又是具有直 接地址的特殊功能寄存器。
4. 寄存器间接寻址
以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式。能够 用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP。其中,R0,R1必 须在工作寄存器组之中,SP仅用于堆栈操作。
MCS-51单片机共有111条指令,按功能分类, MCS-51指令系统可分为5大类:
➢ 数据传送类指令(共29条) ➢ 算术操作类指令(共24条) ➢ 逻辑操作类指令(共24条) ➢ 控制转移类指令(共17条) ➢ 布尔变量操作类指令(共17条)
1.数据传送类指令(共29条)
以累加器A为目的操作数类指令(4条)
大学课件MCS51单片机指令系统与汇编语言程序设计

ANL C, P ; (C)← (C)∧(P)
其中:P是PSW的第0位,C是PSW的第7位。
(4)字节符号地址(字节名称)加位序号的形式。对于部分特 殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名 称加位序号形式来访问某一位。AC 如:
定义:操作数存放在MCS-51内部的某个工作寄存器Rn (R0~R7)或部分专用寄存器中,这种寻址方式称为 寄存器寻址。
特点:由指令指出某一个寄存器的内容作为操作数。 存放操作数的寄存器在指令代码中不占据单独的一个 字节,而是嵌入(隐含)到操作码字节中。
寻址范围:四组通用寄存器Rn(R0~R7)、部分专用 寄存器( A, B, DPTR, Cy )。
伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制 信息,不产生可执行的目标代码,是CPU不能执行的指令。
(1)定位伪指令ORG
格式:ORG n
其中:n通常为绝对地址,可以是十六进制数、标号或表达式。
功能:规定编译后的机器代码存放的起始位置。在一个汇编 语言源程序中允许存在多条定位伪指令,但每一个n值都应和前
2.2.2 直接寻址
定义:将操作数的地址直接存放在指令中,这种寻址方式称为 直接寻址。 特点:指令中含有操作数的地址。该地址指出了参与操作的数 据所在的字节单元地址或位地址。计算机执行它们时便可根据 直接地址找到所需要的操作数。
寻址范围:ROM、片内RAM区、SFR和位地址空间。P42
2.2.3 寄存器寻址
定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址 方式称为位寻址方式。
特点:位寻址是直接寻址方式的一种,其特点是对8位二进制数中 的某一位的地址进行操作。
寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位 可以位寻址)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指令系统及汇编语言程序设计2.4 伪指令伪指令本身不会产生可执行的机器指令代码,它仅仅是告诉汇编程序有关源程序的某些信息,或者用来说明内存单元的用途。
伪指令在汇编过程中由汇编程序进行处理。
2.4.1 数据定义伪指令数据定义伪指令用于定义变量的类型、给存储器赋初值或给变量分配存储单元。
常用的数据定义伪指令有DB、DW和DD等。
格式: [变量名] 伪指令助记符数据表项功能:定义一个数据存储区,其类型由所定义的数据定义指令而指定。
操作说明:方括号中的变量名为任选项,变量名后面不跟冒号“:”。
数据表项可以包含多个数据之间用逗号分隔开。
数据定义伪指令助记符有以下三种:(1) DB定义变量类型为字节(BYTE),DB后面的每个数据占一个字节。
(2) DW 定义变量类型为字(WORD),DW后面的每个数据占一个字,即两个字节。
在内存中,低字节在前,高字节在后。
(3) DD 定义变量类型为双字(DWORD),后面的每个数据占两个字。
在内存中,低位字在前,高位字在后。
例如,有下列数据定义语句D1 DB 1,-12D2 DW 1,2010HD3 DD 1,10203040H数据表项中除了常数、表达式和字符串外,还可以是问号“?”,它仅给变量保留相应的存储单元,而不给变量赋初值。
相同的操作数重复出现时,可用重复符号“DUP”表示。
其格式为:n DUP(初值[,初值,……]);n表示重复的次数,圆括号中为重复的内容。
下面是用问号或DUP表示操作数的例子:ARRAY DB 1000 DUP(0)VAR DW ?,?2.4.2 符号定义伪指令1. 赋值伪指令格式:变量名 EOU 表达式功能:将右边表达式的值赋给左边的变量。
操作说明:表达式可以是一个常数、符号、数值表达式或地址表达式。
需要注意的是:EQU伪指令不允许对同一符号重复定义。
EQU伪指令具体应用举例如下:CR EQU ODH ;定义CR为常数(回车的ASCII代码)TAB EQU TABLE-ASCII ;定义变量DIS EQU 1024*768 ;定义数值表达式ADR EQU ES:[DI+3] ;定义地址表达式M EQU MOV ;定义助记符2.等号(=)伪指令格式:变量名=表达式功能:将右边表达式的值赋给左边的变量。
操作说明:等号(=)伪指令的功能与EQU伪指令相仿,它可以对同一个名字重复定义。
利用等号(=)伪指令可以使程序设计更加灵活。
例如下面的程序段:TABLE=1MOV AX,TABLERRRR:ADD AX,1┊TABLE=TABLE+1MOV AX,TABLECMP AX,100JNE RRRR┊3. 定义符号名伪指令LABEL格式:符号名 LABEL 类型功能:定义一个标号或变量名,并指定其类型。
操作说明:其中符号名可以是标号或变量,LABEL伪指令通常要与指令语句或DB、DW、DD伪指令语句连用。
与指令连用时,类型属性有NEAR和FAR两种;与DB等伪指令语句连用,可以使同一个数据区既有BYTE属性,又有WORD属性和DWORD属性,这样在以后的程序中根据不同的需要分别以字节或字为单位存取其中的数据。
LABEL伪指令具体使用如下:DATAW LABEL WORD ;变量DATAW类型为WORDDATAB DB 20 DUP(?) ;变量DATAB类型为BYTEMOV DATAW,AX ;按字存入MOV DATAB[2],AL ;按字节存入LABEL伪指令也可以将属性已经定义为NEAR的标号再定义为FAR属性。
例如:ABCF LABEL FAR ;过程入口(远程调用)ABC MOV AX,0000H ;过程入口(段内调用)上面的过程既可用标号ABC在本段调用,也可以用标号ABCF被其他段调用。
2.4.3 段定义伪指令段定义伪指令在汇编语言源程序中定义逻辑段。
常用的段定义伪指令有ASSUME、SEGMENT和ENDS等。
1. 段定义伪指令SEGMENT和ENDSSEGMENT和ENDS伪指令用于定义一个逻辑段,给逻辑段赋予—个段名,并在后面的任选项中给出这个逻辑段的其他特性,如定位类型、组合类型和类别。
段定义伪指令格式如下:段名SEGMENT [定位类型][组合类型][‘类别’]┊段名 ENDS说明: SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令则表示一个逻辑段的结束,这两个伪指令总是成对出现,而且前面的段名必须一致。
两个伪指令语句之间的部分是该逻辑段的内容。
汇编语言的逻辑段包括代码段、数据段和堆栈段等。
代码段主要是程序指令和某些伪指令;数据段用于定义数据和存储单元;堆栈段为堆栈操作预留出存储空间。
SEGMENT伪指令后面可以有三个任选项:1)定位类型定位类型任选项是告诉汇编程序如何确定逻辑段的边界在存储器中的位置,定位类型有四种:① BYTE表示逻辑段边界可以从任何一个字节开始。
② WORD 表示逻辑段边界从字地址开始,这样该逻辑段的起始地址必须是偶数。
③ PARA 表示逻辑段边界从节地址开始,16个字节称为一个节。
如果省略定位类型任选项,汇编语言程序默认该逻辑段为PARA。
④ PAGE表示逻辑段边界地址从页边界开始,256个字节称为一个页。
2)组合类型 SEGMENT伪指令的第二个任选项是组合类型,它告诉连接程序,装入存储器时各个逻辑段如何进行组合。
组合类型有6种。
① NONE 此项为不组合,如果编程时省略SEGMENT伪指令的组合类型。
② PUBLIC 汇编程序连接时,将不同程序模块中具有相同的类别名的逻辑段顺序连接成一个逻辑段装入内存。
③ STACK 组合类型为STACK时,编译程序把所有同名段连接成一个连续的堆栈段。
④ COMMON该组合类型产生一个覆盖段。
模块连接时,如果有相同的类别名,则都从同一个地址开始装入,因而连接的逻辑段将发生重叠。
连接以后段的长度等于原来最长的逻辑段的长度,重叠部分的内容是最后一个逻辑段的内容。
⑤ MEMORY组合类型为MEMORY时,表示本段在存储器中应定位在所有其他段的最高地址。
⑥ AT AT组合类型表示本段可以定位在表达式所指示的边界上。
如:AT 0830H ;本段的地址从0830H开始。
3)类别名类别名必须用单引号括起来,类别名可由程序设计人员自己选定任何字符串组成,但它不能再作为程序的标号,变量名或其他定义的符号。
在连接处理时,LINK程序把类别名相同的所有段存放在连续的存储区内。
下面是一个分段结构的源程序框架:DATAl SEGMENT┊DATAl ENDSSTACK1 SEGMENT PARA STACK┊STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAl,SS:STACKlBEGIN:……┊CODE ENDSEND BEGIN2. 指定段址伪指令ASSUME格式:ASSUME 段寄存器名:段名[,段寄存器名:段名,……]功能:指定段寄存器与某个逻辑段建立对应关系。
操作说明:其中段寄存器名是指四个段寄存器CS、SS、DS、ES中的一个,段名是指逻辑段的段名。
需要注意的是:ASSUME伪指令只是告诉汇编程序段寄存器与逻辑段的关系,并没有给段寄存器赋予实际的初值。
若要给段寄存器赋值,可参考下面程序:CODE SEGMENTASSUME CS:CODE,DS:DATA1,SS:STACKlMOV AX,DATA1MOV DS,AXMOV AX,STACKlMOV SS,AX┊CODE ENDS2.4.4 过程定义伪指令程序设计中,我们常常把具有一定功能的程序段设计成一个子程序。
汇编程序用“过程”来构造子程序。
格式:过程名 PROC [NEAR/FAR] ;NEAR与FAR只选一个,或都不选┊RET过程名 ENDP功能:定义一个过程(子程序)。
操作说明:其中,过程名不能省略,过程的开始和结束应使用同一个过程名。
过程名也就是子程序的程序名,可以通过CALI指令调用,它类同于一个标号的作用,具有三个属性:段、偏移量和类型。
类型可以选择NEAR或FAR,如果没有选择距离类型,则默认为NEAR。
2.4.5 定位伪指令ORG和当前位置计数器$格式:ORG 数值表达式功能:指定在它之后的程序段或数据块所存放的单元起始地址的偏移量。
当前地址计数器‘$’它表示当前地址,即地址计数器的值。
例如:DATA SEGMENTORG 20HD1 DB 12H,13HORG $+01HD2 DB 61H,62H,63HDATA ENDSCODE SEGMENTASSUME CS:CODE,……ORG 100HBEGIN: MOV AX,DATA┋CODE ENDS上面的数据段中,D1的段内偏移量为0020H而不是0000H,D2的段内偏移量是0023H。
代码段里,指令代码从偏移量0100H处开始。
2.4.6 结束汇编指令END格式: END 标号功能:通知汇编程序结束汇编。
操作说明:标号为主程序执行时的入口标号。
注意,该指令并表示执行程序结束,只是汇编程序结束汇编。
而要计算机停止执行程序而退回到DOS操作系统,需用DOS调用:MOV AH,4CHINT 21H第2章指令系统及汇编语言程序设计2.5 汇编语言程序设计2.5.1 汇编语言程序1. 汇编语言的基本概念使用助记符号来表示二进制格式的指令代码和变量地址的指令称为符号指令。
汇编语言程序运行之前要将其转换成机器代码,转换的过程是由编译程序完成。
2. 汇编语言源程序的格式汇编语言源程序采用分段式结构,一个汇编语言源程序由若干个逻辑段组成,每个逻辑段以SEGMENT语句开始,以ENDS语句结束,整个源程序以END语句结束(表示结束汇编)。
下面给出一个简单的汇编语言源程序。
DATA SEGMENT ;定义一个名字为DATA的段DAT DB 1,2,0 ;在DATA段内定义3字节数据DATA ENDS ;DATA段结束;---------------------------------------------------------STACK SEGMENT PARA STACK ;定义名字为STACK的堆栈段DW 20 DUP(0) ;堆栈段大小为20个字STACK ENDS ;堆栈段结束;---------------------------------------------------------CODE SEGMENT ;定义一个名为CODE的程序代码段ASSUME CS:CODE,DS:DATA,SS:STACKBEGIN: MOV AX,DATAMOV DS,AX ;给DS赋数据段初值MOV AL,DATADD AL,DAT+1 ;前两个数据相加MOV DAT+2,AL ;和存入第三个数据的位置MOV AH,4CHINT 21H ;使用系统调用返回操作系统CODE ENDS ;代码段结束;----------------------------------------------------------END BEGIN ;源程序结束,入口地址为BEGIN从上面的例子可以看出,汇编语言源程序由若干段组成,最上面是数据段,接下来是堆栈段,最后是代码段。