主题:哪里出错了?
helun
[专家分:40] 发布于 2006-05-12 17:24:00
.model tiny
.code
.startup
mov dx,offset str
mov ah,9
int 21h
.exit 0
str db 'first .com file',0dh,0ah,24h
end
这个小程序就是为了生成一个.com文件
可是为什么每次都江编不成功呢?
回复列表 (共1个回复)
沙发
chenzep [专家分:3640] 发布于 2006-05-13 19:55:00
转贴人家的,自己看把
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.asm
MAN STRUCT ;定义一个结构,在win32中非常常用!
W dw 1234h ;dw 也可用 word
B db 9 dup(?) ;db 也可用 byte
MAN 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>dir
Volume in drive D has no label
Volume Serial Number is 18F0-186B
Directory 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.DOC
ML ERR 9,687 03-16-00 16:20 ML.ERR
ML EXE 385,072 02-04-03 21:57 ML.EXE
MASM EXE 49,152 12-30-00 14:04 MASM.EXE
LINK EXE 364,544 01-13-95 14:10 LINK.EXE
1 ASM 566 02-15-03 11:10 1.asm
6 file(s) 1,073,725 bytes
2 dir(s) 2,410,340,352 bytes free
D:\Masm615>ml 1.asm
Microsoft (R) Macro Assembler Version 6.15.8803
Patched for you by promethee [ECL] in the year 2001 - enjoy
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.
Assembling: 1.asm
Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994
Copyright (C) Microsoft Corp 1984-1993. All rights reserved.
Object Modules [.obj]: 1.obj /t
Run File [1.com]: "1.com"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:
D:\Masm615>dir 1
Volume in drive D has no label
Volume Serial Number is 18F0-186B
Directory of D:\Masm615
1 ASM 566 02-15-03 11:10 1.asm
1 OBJ 156 02-15-03 11:13 1.obj
1 COM 51 02-15-03 11:13 1.com
3 file(s) 773 bytes
0 dir(s) 2,410,332,160 bytes free
---------------下面是用debug查看程序的结果-------------------
-r
AX=0000 BX=0000 CX=0033 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0B7F ES=0B7F SS=0B7F CS=0B7F IP=0100 NV UP EI PL NZ NA PO NC
0B7F:0100 B83130 MOV AX,3031
-u100 110
0B7F:0100 B83130 MOV AX,3031
0B7F:0103 A31201 MOV [0112],AX
0B7F:0106 C606140131 MOV BYTE PTR [0114],31
0B7F:010B B80B00 MOV AX,000B
0B7F:010E B44C MOV AH,4C
0B7F:0110 CD21 INT 21
-d112 L21
0B7F:0110 34 12 00 00 00 00-00 00 00 00 00 01 00 61 4............a
0B7F:0120 62 63 64 00 00 00 00 00-03 00 4C 64 66 00 00 00 bcd.......Ldf...
0B7F:0130 00 00 00 ...
-
==============================================怜香于2003/02/12================
我来回复