文档介绍:汇编源程序的编程格式
系统功能调用
程序设计举例
Windows 汇编语言编程初步
第6章汇编语言程序设计
汇编源程序有两种编程格式:
EXE文件的编程格式:只能生成扩展为EXE
的可执行文件;
COM文件的编程格式:
的可执行文件。
COM文件的执行级别高于EXE文件,同名的BAT(批处理)文件执行级别最低。
源程序的编程格式
EXE文件的编程格式
此格式允许源程序使用多个逻辑段(包括据段、堆栈段、代码段及其它逻辑段);
在实模式下,每个逻辑段的目标块不超过64K;
适合编写大型程序。
.486
DATA SEGMENT USE16 ;定义数据段
MESG DB ‘I AM A STUDENT!’,’$’
DATA ENDS
CODE SEGMENT USE16 ;定义代码段
ASSUME CS:CODE,DS:DATA
BEG: MOV AX,DATA
MOV DS,AX
LAST: MOV AH,9
MOV DX,OFFSET MESG
INT 21H
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END BEG
EXE文件的内存映象
磁盘上的EXE文件包括两部分:
装入模块和重定位信息
DOS装载EXE文件时,根据重定位信息完成装入模块的重定位。同时,重定位信息被丢弃。
DOS在同一内存块的用户程序上方(低地址处)偏移地址为00H~FFH的单元处自动生成一个 256字节的数据块,称为程序段前缀(PSP)。
DOS自动使DS=ES=存放PSP的段基址,使CS:IP指向用户程序的启动地址
INT 20H
数据段
代码段
堆栈段
DS,ES
CS:IP
SS
SP
注:DOS把EXE文件调入内存后,自动给SS、SP赋初值, 程序中给SS、SP赋初值的指令可省略。
PSP(256字节)
用户程序
COM文件的编程格式
汇编语言要求此格式必须符合以下规定:
· 源程序只允许使用一个逻辑段,即代码段,不允许设置堆栈段;
· 程序使用的数据,可以集中设置在代码段的开始或未尾;
· 在代码段偏移地址(有效地址)为100H的单元,必须是程序的启动指令;
· 代码段目标块小于64K。
COM文件的编程格式适合于编写中小型程序。
.486
CODE SEGMENT USE16
ASSUME CS:CODE
ORG 100H
BEG: JMP START
MESG DB ‘HELLO’,0DH,0AH,’$’;用户程序数据区
START: MOV CX,10 ;设置循环次数
LAST: MOV AH,9
MOV DX,OFFSET MESG
INT 21H ;显示一行HELLO
LOOP LAST ;循环计数
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END BEG
COM文件的内存映象
文件没有重定位信息,体积比EXE文件小。
文件时,在同一内存块的用户程序上方(低地址处)偏移地址为00H~FFH的单元处自动生成一个 PSP;
然后从偏移地址100H处开始存放用户程序;
DOS自动使CS=DS=ES=SS=存放PSP的段基址,使IP=100H,SP=FFFEH。
INT 20H
代码段
堆栈段
CS,DS
ES,SS
IP
(FFFEH)
SP
PSP(256字节)
用户程序
(64K-256)