利用NASM编写引导程序
2012-05-06 19:57
239 查看
在学习操作系统时,为了编写引导程序,花了不少时间寻找合适的16位汇编器。
gas支持很多格式,但是语法太烦而且不能很好地支持实模式8086的16位编程;MASM不错但是不支持二进制输出格式,而且老式MASM和LINK与我的64位Windows7不兼容;as86能很好地支持16进制输出,但是我在网上找不到下载资源!最后,只能利用NASM了,NASM能支持很多格式,但是语法与以前学的MASM和gas还是有很大差别的。
然后今天尝试着写了个简单得引导程序,代码为:
jmp dword 0x07c0:go
go:
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $
DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,16
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$)db 0
dw 0xaa55
以二进制输出:
nasm test.asm -f bin -o test.bin
再将之写入软盘映像文件第一个扇区:
dd bs=512 count=1 if=test.bin of=test.img
最后运行bochs模拟器,成功在屏幕上打印出字符串。
需要注意的是nasm中长跳转的语法格式:
jmp dword 段地址:偏移地址
gas支持很多格式,但是语法太烦而且不能很好地支持实模式8086的16位编程;MASM不错但是不支持二进制输出格式,而且老式MASM和LINK与我的64位Windows7不兼容;as86能很好地支持16进制输出,但是我在网上找不到下载资源!最后,只能利用NASM了,NASM能支持很多格式,但是语法与以前学的MASM和gas还是有很大差别的。
然后今天尝试着写了个简单得引导程序,代码为:
jmp dword 0x07c0:go
go:
mov ax,cs
mov ds,ax
mov es,ax
call DispStr
jmp $
DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,16
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$)db 0
dw 0xaa55
以二进制输出:
nasm test.asm -f bin -o test.bin
再将之写入软盘映像文件第一个扇区:
dd bs=512 count=1 if=test.bin of=test.img
最后运行bochs模拟器,成功在屏幕上打印出字符串。
需要注意的是nasm中长跳转的语法格式:
jmp dword 段地址:偏移地址
相关文章推荐
- NASM 纯汇编打造简单中文操作系统(1.boot.asm 操作系统的开始--引导程序)
- 《c primer pius》第十章第6题,编写一个程序,初始化一个二维double数组,并利用练习2中的任一函数来把这个数组复制到另一个二维数组(因为二维数组是数组的数组,所以可以使用处理一维数组的
- 编写自己的缓冲区溢出利用程序
- 利用Delphi编写Socket通信程序
- 利用C#编写网页投票器程序
- 利用FIFO编写一个Server/Client程序
- 利用a、s、w、d来控制移动 按下空格会发射子弹 最简单的语法用心编写也会有好的程序
- 利用 Masm 编写 引导盘 Boot Sector 显示 Hello World
- 利用Recognizer编写自己的开机自启动程序
- 简单利用viewpagerindicator的两个类,而非整个工程实现程序引导页
- 利用 Spock 为Java程序编写单元测试
- 利用java编写网络通信程序
- 课程、问题-利用mincemeat编写简单的MapReduce程序-by小雨
- ICE专题:利用ICE编写程序的几个注意点
- node.js:利用cheerio编写的小爬虫程序
- 利用ASP.net编写发送Email程序
- 利用waveXXX系列函数编写播放声音程序,采用双缓冲技术
- 如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票
- 利用pcap编写自己的sniffer程序
- 利用 Masm 编写 引导盘 Boot Sector 显示 Hello World