【www.shanpow.com--热门范文】
一:[com格式]COM文件格式
COM文件不允许分段,所占有的空间不允许超过64KB,其入口点(开始运行的起始点)必须是100H(其前面的256个字节为程序前缀所在地),且不必设置堆栈段.在程序装入时,由系统自动把SP建立在该段之末.对所有的过程应定义为NEAR属性.
标准格式:
program SEGMENT
ORG 100H
ASSUME CS : program, DS : program, ES : program, SS : program
main PROC NEAR
;code go here 汇编代码*/
MOV AX , 4C00H ;return to DOS
INT 21H
;data go here 数据定义*/
program ENDS
END main
对于MASM 5.0, 6.0版,也可用如下格式:
;title go here
.model tiny
.code
ORG 100H
start: JMP begin
;data go here
begin:
;code go here
MOV AX , 4C00H
INT 21H
END start
对于com注意以下几个问题: 1.com没有header 2.com程序不分段 3.com入口点必须是100h 4.com不必设置stack,sp=段尾 5.com的过程为near 然后用exe2bin把exe变成com
COM格式文件最大64K,无重定位项目,加载速度快,且DS=ES=CS=SS,IP=100即其第一条指令位于段内偏移量100H的位置,其格式为:================================================================== .model tiny ;这句很关键 .data ;对于COM格式文件,数据段的内容会自动放到代码段后data db "My data Area!",0 .code .startup ;可使下面的指令从0100H 开始(适应COM格式文件的要求) .exit ;结束程序,相当于 MOV AH,4CH/INT 21H end------------------------------------------------------编译链接:ml 文件名.asm,而后直接生成可执行文件:文件名.com------------------------------------------------------;例:下面是一个COM格式的文件,涉及到结构的使用。;文件名:1.asmMAN STRUCT ;定义一个结构,在win32中非常常用! W dw 1234h ;dw 也可用 word B db 9 dup(?) ;db 也可用 byteMAN ENDS.model tiny ;COM格式文件.data ;对于COM格式文件,数据段的内容会自动放到代码段后zz MAN <>,<1,"abcd">,<3,"Ldf">.code ;代码段.startup ;可使下面的指令从0100H 开始(COM格式文件要求) mov ax,3031h mov zz.W,ax ;对结构赋值 mov zz.B,"1" mov ax,type(MAN) ;取结构所占字节数 .exit ;可设置返回码,如:.EXIT 3相当于 MOV AX,4C03H/INT 21H end-----------------------------------------------------------下面是生成1.com文件的详细操作过程D:/Masm615>dirVolume in drive D has no labelVolume Serial Number is 18F0-186BDirectory of D:/Masm615. 〈DIR〉 02-04-03 21:56 ... 〈DIR〉 02-04-03 21:56 ..MASMREF DOC 264,704 02-23-00 20:00 MASMREF.DOCML ERR 9,687 03-16-00 16:20 ML.ERRML EXE 385,072 02-04-03 21:57 ML.EXEMASM EXE 49,152 12-30-00 14:04 MASM.EXELINK EXE 364,544 01-13-95 14:10 LINK.EXE1 ASM 566 02-15-03 11:10 1.asm 6 file(s) 1,073,725 bytes 2 dir(s) 2,410,340,352 bytes freeD:/Masm615>ml 1.asmMicrosoft (R) Macro Assembler Version 6.15.8803 Patched for you by promethee [ECL] in the year 2001 - enjoyCopyright (C) Microsoft Corp 1981-2000. All rights reserved.Assembling: 1.asmMicrosoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994Copyright (C) Microsoft Corp 1984-1993. All rights reserved.Object Modules [.obj]: 1.obj /tRun File [1.com]: "1.com"List File [nul.map]: NULLibraries [.lib]:Definitions File [nul.def]:D:/Masm615>dir 1Volume in drive D has no labelVolume Serial Number is 18F0-186BDirectory of D:/Masm6151 ASM 566 02-15-03 11:10 1.asm1 OBJ 156 02-15-03 11:13 1.obj1 COM 51 02-15-03 11:13 1.com 3 file(s) 773 bytes 0 dir(s) 2,410,332,160 bytes free---------------下面是用debug查看程序的结果--------------------rAX=0000 BX=0000 CX=0033 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=0B7F ES=0B7F SS=0B7F CS=0B7F IP=0100 NV UP EI PL NZ NA PO NC0B7F:0100 B83130 MOV AX,3031-u100 1100B7F:0100 B83130 MOV AX,30310B7F:0103 A31201 MOV [0112],AX0B7F:0106 C606140131 MOV BYTE PTR [0114],310B7F:010B B80B00 MOV AX,000B0B7F:010E B44C MOV AH,4C0B7F:0110 CD21 INT 21-d112 L210B7F:0110 34 12 00 00 00 00-00 00 00 00 00 01 00 61 4............a0B7F:0120 62 63 64 00 00 00 00 00-03 00 4C 64 66 00 00 00 bcd.......Ldf...0B7F:0130 00 00 00
二:[com格式]COM文件格式
codes segment public ‘code‘ org 100H assume cs:codes,ds:codes,es:codesmain proc near jmp startmess db ‘How are you?$‘
start: mov ah,09H mov dx,offset mess int 21H
int 20Hmain endpcodes ends end main
三:[com格式]COM文件格式
codes segment public "code" org 100H assume cs:codes,ds:codes,es:codesmain proc near jmp startmess db "How are you?$"
start: mov ah,09H mov dx,offset mess int 21H
int 20Hmain endpcodes ends end main