简单到引导扇区汇编代码解释
2012-01-10 17:26
218 查看
org 07c00h
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
这个代码段是存于磁盘引导扇区的系统引导(自举)程序。若存于硬盘第一个扇区,则这段代码称为:硬盘主引导记录;若存于硬盘某个分区的第一个扇区,则称为:分区引导记录;若存于软盘的第一个扇区,则称为:软盘引导记录。称为磁盘引导记录的重要标志是:
dw 0xaa55
磁盘的一个扇区是512字节,标志0xaa55存于这个扇区的最后一个字(两字节,偏移地址为:1FEH),其余空间用于存储指令代码和一些参数、提示信息等。磁盘引导记录由ROM BIOS的INT 19H(引导加载程序,相当于热启动系统,对应的快捷键为:Ctrl+Alt+Del),固定装入内存的0000:7C00H,然后将控制权交给磁盘引导程序,相当于开始执行下面的程序段。下面详细解答一下这个程序段的功能:
org 07c00h ;调整偏移量伪指令ORG,指定下面的指令从7c00h处开始,因为BIOS一旦发现引导扇区,就会将这512字节装载到内存0000:7c00处
mov ax, cs ;数据传送指令,将代码段寄存器cs的内容赋给通用寄存器ax
mov ds, ax ;ax→ds,使数据段与代码段在同一个段
mov es, ax ;ax→es,使附加段与代码段在同一个段
call DispStr ;调用子程序DispStr,显示字符串信息:Hello, OS world!
jmp $ ;$表示当前地址,实现死循环
DispStr: ;子程序:显示字符串
mov ax, BootMessage ;BootMessage的首地址给ax
mov bp, ax ;BootMessage首地址给堆栈指针BP
mov cx, 16 ;要显示的字符数
mov ax, 01301h ;AH=13h,int 10h,即视频中断13h号功能:写字符串;AL=01H,表示写完字符串后,更新光标位置
mov bx, 000ch ;BH=0,页号(视频缓冲区是分页的),初学者暂时不必理会;BL=0CH,字符显示属性,以黑底亮红显示字符
mov dl, 0 ;DH、DL=写串的光标位置,DH=行号,DL=列号
int 10h ;调用视频中断
ret ;子程序返回指令,返回调用者
BootMessage: db “Hello, OS world!” ;要显示的字符串信息
times 510-($-$$) db 0 ;$是当前地址,$$是首地址,总体意思就是从此处一直到510都用0填充
dw 0xaa55 ;磁盘引导记录重要标志 ,最后2个字节代表这是引导扇区。
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
这个代码段是存于磁盘引导扇区的系统引导(自举)程序。若存于硬盘第一个扇区,则这段代码称为:硬盘主引导记录;若存于硬盘某个分区的第一个扇区,则称为:分区引导记录;若存于软盘的第一个扇区,则称为:软盘引导记录。称为磁盘引导记录的重要标志是:
dw 0xaa55
磁盘的一个扇区是512字节,标志0xaa55存于这个扇区的最后一个字(两字节,偏移地址为:1FEH),其余空间用于存储指令代码和一些参数、提示信息等。磁盘引导记录由ROM BIOS的INT 19H(引导加载程序,相当于热启动系统,对应的快捷键为:Ctrl+Alt+Del),固定装入内存的0000:7C00H,然后将控制权交给磁盘引导程序,相当于开始执行下面的程序段。下面详细解答一下这个程序段的功能:
org 07c00h ;调整偏移量伪指令ORG,指定下面的指令从7c00h处开始,因为BIOS一旦发现引导扇区,就会将这512字节装载到内存0000:7c00处
mov ax, cs ;数据传送指令,将代码段寄存器cs的内容赋给通用寄存器ax
mov ds, ax ;ax→ds,使数据段与代码段在同一个段
mov es, ax ;ax→es,使附加段与代码段在同一个段
call DispStr ;调用子程序DispStr,显示字符串信息:Hello, OS world!
jmp $ ;$表示当前地址,实现死循环
DispStr: ;子程序:显示字符串
mov ax, BootMessage ;BootMessage的首地址给ax
mov bp, ax ;BootMessage首地址给堆栈指针BP
mov cx, 16 ;要显示的字符数
mov ax, 01301h ;AH=13h,int 10h,即视频中断13h号功能:写字符串;AL=01H,表示写完字符串后,更新光标位置
mov bx, 000ch ;BH=0,页号(视频缓冲区是分页的),初学者暂时不必理会;BL=0CH,字符显示属性,以黑底亮红显示字符
mov dl, 0 ;DH、DL=写串的光标位置,DH=行号,DL=列号
int 10h ;调用视频中断
ret ;子程序返回指令,返回调用者
BootMessage: db “Hello, OS world!” ;要显示的字符串信息
times 510-($-$$) db 0 ;$是当前地址,$$是首地址,总体意思就是从此处一直到510都用0填充
dw 0xaa55 ;磁盘引导记录重要标志 ,最后2个字节代表这是引导扇区。
相关文章推荐
- 引导扇区汇编代码解释
- 引导扇区汇编代码解释
- 简单c语言汇编后代码解释(1)
- 反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- GameBoy引导ROM汇编代码及注释
- 《Linux内核分析》week1作业-分析一个简单c语言的汇编代码
- java学习心得(一):代码的简单编译和解释的前期过程
- FAT32引导扇区代码
- hibernate学习笔记2--对简单例子的代码的解释与简单优化(规范)
- Linux汇编代码学习,反汇编简单的c及分析汇编代码工作过程
- 反汇编一个简单的C程序,分析汇编代码
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 主引导扇区代码(MBR)
- 汇编并分析一段简单C代码
- 一个最简单引导扇区的编写
- 计算机是如何工作的?--通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- vc++简单反汇编代码
- [原创]通过简单的汇编代码了解计算机的工作原理
- 堆与栈结合代码和汇编解释
- 一个简单C程序的汇编代码分析