鱼C论坛

 找回密码
 立即注册
查看: 3527|回复: 2

[争议讨论] 中文汇编

[复制链接]
发表于 2011-9-13 14:22:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用 中文汇编语言 写操作系统(一)
2011年03月13日 星期日 11:59
声明:本文部分内容参考自《自己动手写操作系统》-于渊 著

若要转载,请注明出处:http://hi.baidu.com/helingyuan/blog


需要的编程环境:中汇.exe     WinHex     NASM(可选)

中汇帮助文档


需要的 外部设备:一个U盘。

环境搭建(以中汇为例):

假如你的 中汇.exe 在 E:\Tools\汇编 目录下,你就在 环境变量 的PATH中加入:“;E:\Tools\汇编”。


再假如你的 程序 放在E:\汇编目录下,运行cmd,输入E: 回车,再输入 cd 汇编,现在就进入了你的工作目录。(输入 中汇 -帮助  ,可以查看帮助信息)




我们在记事本中写入以下汇编代码:
(如果你没有Nasm,你可以绕过这段nasm汇编程序)

org 07c00h                                //告诉编译器程序加载到7c00处
mov ax, cs
mov ds, ax
mov es, ax
call DispStr                                //调用显示字符串子程序
jmp $                                       //无限循环
DispStr:
mov ax,BootMessage
mov bp, ax                                //es:bp=串地址
mov cx, 16                                  //cx=串长度
mov ax, 01301h                       //ah=13,al=01h
mov bx, 000ch                           //页号为0(bh=0) 黑底红字(bl=0ch)高亮
mov dl, 0
int 10h                                        //10h号中断
ret
BootMessage:  db  "Hello,OS world!"
times 510-($-$$)db0                    //填充剩下的空间,使生成的二进制代码恰好为512字节

dw 0xaa55                                    //结束标志



把以上内容存为boot.asm格式,用nasm编译成bin格式的二进制文件。
(输入命令:nasm boot.asm -o boot.bin即可编译)
把得到的boot.bin文件用WinHex打开,全部复制,再选择工具-〉打开磁盘-〉物理磁盘-〉你的U盘-〉确定
接下来选择 起始扇区 ,全选,ctrl+B粘贴,ctrl+S保存。重启电脑,选择U盘启动,即可看见屏幕显示:Hello,OS world!


***********************************************************************************

接下来,我们用中文汇编代码写这段程序,代码如下:

起始地址 07c00h                             //告诉编译器程序加载到7c00处
移动 累加器, 代码段
移动 数据段, 累加器
移动 附加段, 累加器
调用 显示字符串                              //调用显示字符串子程序
跳转到 $                                            //无限循环
显示字符串:
移动 累加器, 启动信息
移动 基址指针, 累加器                    //附加段:基址指针=串地址
移动 计数器, 16                              //计数器=串长度,你可以任意改变数值“16”。
移动 累加器, 01301h                      //累加器高8=13,累加器低8=01h
移动 基址器, 000ch                        //页号为0(基址器高8=0) 黑底红字(基址器低8=0ch)高亮
移动 数据器低8, 0
中断 10h                                          //10h号中断
返回
启动信息: 定义字节 "Hello,OS World! "  //如果要显示汉字,需要字库的支持。
次数 510-($-$$) 定义字节 0              //填充剩下的空间,使生成的二进制代码恰好为512字节

定义字 0xaa55                                 //结束标志



把以上内容存为boot1.asm格式,用中汇.exe编译成bin格式的二进制文件。
(输入命令:中汇 boot1.asm -输出 boot1.bin即可编译)
把得到的boot1.bin文件用WinHex打开,全部复制,再选择工具-〉打开磁盘-〉物理磁盘-〉你的U盘-〉确定

接下来选择 起始扇区 ,全选,ctrl+B粘贴,ctrl+S保存。重启电脑,选择U盘启动,即可看见屏幕显示:Hello,OS world!



注:如果需要把boot1.asm编译成img格式,可以输入:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-14 10:48:27 | 显示全部楼层
把自己写的启动代码装入U盘用WinHex,装入软盘可以用WinImg,不知道怎么装入光盘镜像呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-14 11:36:26 | 显示全部楼层
我现在还在看 不知道什么时候能看完{:7_148:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 04:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表