首页
社区
课程
招聘
[旧帖] [分享]如何用MASM写COM格式的程序,引导程序,好不容易搞明白了,大家一起来学习吧 0.00雪花
发表于: 2012-5-18 17:49 1031

[旧帖] [分享]如何用MASM写COM格式的程序,引导程序,好不容易搞明白了,大家一起来学习吧 0.00雪花

2012-5-18 17:49
1031
搞了两天才搞明白,发出来让再碰到这问题的人也来看看.
前几天在看于渊的<自已动手写操作系统>,上面介绍是用NASM来写引导程序.NASM生成.COM文件很方便,一个直接编译就行了.
换成MASM可就有点难了.要先编译后连接才行,其中还有格式和程序加载地址的问题.
MASM中的编译器ML.EXE支持两种目标文件格式:COFF和OMF.想生成.COM文件,我调试的时候两种都试了试,发现只有OMF才行.为什么COFF格式不行,有知道可以解释下.
MASM中连接器分两种LINK16和LINK32. 其中LINK16名字叫做分段可执行文件链接器(Segmented Executable Linker),LINK32的叫做增量链接器(Incremental Linker),VC6以后带的那种都是这种类型的.其中只有LINK16支持.COM文件链接.
大家可以先看下下面的代码,然后我再解释下,初显的功能很简单,显示了一个字符串,如果把"org 100h"改成"org 7c00h"的话就可以做一个引导程序用.
[COLOR="Green"];cmd>ml /omf /c /nologo debug.asm
;cmd>link16 /TINY /nologo debug.obj,debug.com;[/COLOR]
.386p
.model tiny
code segment use16
	org	100h			;7c00h
start:	mov	ax, cs
	mov	es, ax
	mov	bp, offset msg		;字符串地址, es:bp
	mov	cx, 16			;字符串长度
	mov	ax, 1301h		;功能号,显示模式
	mov	bx, 000ch		;显示属性,颜色
	mov	dx, 0000h		;显示位置
	int	10h			;调用显示中断
	jmp	$			;为了能看到显示字符就来个死循环吧
msg	db	"Hello, OS world!"
code ends
end	start

最要注意的一点是这里的"org 100h"和NASM中的"org 100h",有很大区别.
http://www.masm32.com/board/index.php?action=printpage;topic=10947.0

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//