先上代码。这段代码在我的BOCHS上跑着没问题。
*************************************************************************************************************************
1 !
2 !boot.s -- bootsect.s 的框架程序。用代码0x07替换msag中1字符,然后在屏幕第一行上显示
3 !
4
5 .globl begtext,begdata,begbss,endtext,enddata,endbss !全局标识符,供ld86链接使用
6 .text !正文段
7 begtext:
8 .data !数据段
9 begdata:
10 .bss !未初始化数据段
11 begbss:
12 .text !正文段开始
13 BOOTSEG = 0x07c0 !BIOS加载bootsect代码的原始段地址。这里注意是0x07c0这是段基址寄存器,在转换位物理地址是根据16位段寄存器来 表示20位总线寻址的技术,应该是左移4位,即0x7c00,这就是BIOS加载boot.s到内存的位置
14
15
16 entry start !告知链接程序,程序从strat标号处开始执行
17
18 start:
19 jmpi go,BOOTSEG !段间跳转。BOOTSEG指出跳转段的地址,标号go是偏移地址 ???????????????
20 go: mov ax,cs !段寄存器cs值-->ax,用于初始化数据段寄存器ds和es,ax是16位通用寄存器,cs段寄存器,经过上一条指令段寄存器的值
已经从0x0000变为0x07c0。
21 mov ds,ax !ds数据段寄存器,
22 mov es,ax !es附加段寄存器,
23 mov [msg1+17],ah !0x07-->替换字符串1个点符号,喇叭会鸣一声??????????????????
24 mov cx,#20 !共显示20个字符,包括回车换行符,dx可用于通用寄存器,还常用来保存计数值,如在移位指令,循环和串处理指令中 用作隐含的计数器。
25 mov dx,#0x1004 !字符串显示在屏幕第17行,第5列处
26 mov bx,#0x000c !字符显示属性(红色)
27 mov bp,#msg1 !指向要调用的字符串(中断调用要求)
28 mov ax,#0x1301 !写字符串并移动光标到串结尾处
29 int 0x10 !BIOS中断调用0x10,功能0x13,子功能01
30 !Write string (EGA+, meaning PC AT minimum) AH=13h AL = Write mode, BH = Page Number, BL = Color, CX = String length, DH = Row, DL = Column, ES:BP = Offset of string这段是在外国网站找到的资料这样就能解释24-29.。网址http://en.wikipedia.org/wiki/INT_10H
行赋值的作用
31 loop0: jmp loop0 !死循环
32
33 msg1: .ascii "Loading system..." !调用BIOS中断显示的信息。共20个ASCII码字符。
34 .byte 13,10 !在ASCII中13表示回车,10表示换行,这里注意回车的作用是使光标移动到行的开始
35
36
37 .org 510 !表示以后语句从地址510(0x1FE)开始存放
38 .word 0xAA55 !有效引导扇区标志,供BIOS加载引导扇区使用。
39
40 .text
41 endtext:
42 .data
43 enddata:
44 .bss
45 endbss:
*******************************************************************************************************
其间很多疑问已在程序的注释中表明,还有两个问题没有解决,上面注明???。
第一个是你如果把go该变成为制定 的值还是会正确运行,第二个是ah替换字符串最后一个字节就会响声????
其实这个程序的理解还远不止这么多,我觉得对于初学者最关键的是要搞明白两个值,0x07c0还有 0xAA55
这才是这段程序最神奇的地方。:-)呵呵呵。
关于0x07c0这个值看这篇文章:
http://blog.csdn.net/ccccdddxxx/archive/2011/06/07/6529721.asp
相信看完就理解的差不多啦
关于0xAA55这个值我也不是很清楚;
http://www.linkedin.com/answers/technology/software-development/TCH_SFT/648541-63552830
看完依然不清出。嘿嘿