linux
2016-07-25 17:29
411 查看
.globl begtext,begdata,begbss,endtext,enddata,endbss!定义了6个全局标识符 .text !文本段 begtext: .data!数据段 begdata: .bss!末初始化数据段(Block Started by Symbol) begbss: .text!文本段 SETUPLEN = 4 setup ! 程序的扇区数(setup-sectors)值; BOOTSEG = 0x07c0 bootsect ! 的原始地址 (是段地址,以下同); INITSEG = 0x90000 将boot !移到这里 -- 避开; SETUPSEG = 0x9020 setup!程序从这里开始; SYSSEG = 0x1000 !system ! 模块加载到 0x10000(64kB)处。 ENDSEG = SYSSEG + SYSSIZE ! 停止加载的段地址; !根文件系统设备使用与引导时同样的软驱设备; !根文件系统设备在第一个硬盘的第一个分区上,等等;ROOT_DEV = 0x306! ! 指定根文件系统设备是第2个硬盘的第一个分区。这是Linux 老式硬盘命名 entry start ! ! 告知连接程序从start 标号开始执行。 start:!17-26 行的作用是将自身(bootsect)从目前段位置0x07c0(31k) !移动到0x9000(576k)处,共256字(512字节),然后跳转到 !移动代码后的go 标号处,也即本程序的下一语句处。 mov ax,#BOOTSEG! 将ds 段寄存器位置置为0x7C0; mov ds,ax mov ax,#INITSEG! 将es段寄存器置为0x9000; mov es,ax mov cx,#256 ! 移动计数值 =256 字; sub si,si! 源地址 ds:si=0x07C00:0x0000 sub di,di! 目的地址:es:di = 0x90000:0x0000 rep ! 重复执行,直到 cx=0x0000 movw ! 移动1个字; jmpi go,INISEG!间接跳转。这里INITSEG 指出跳转到的段地址。 !从下面开始, CPU 执行已移动到 0x90000 段处的代码。 go:mov ax,cs!将ds、es和ss都置成移动后代码所在的段处(0x9000)。
本文出自 “专注php” 博客,请务必保留此出处http://jingshanls.blog.51cto.com/3357095/1829743
相关文章推荐
- linux服务器如何重置密码
- linux eclipse3.6.1 maven安装
- chmod 改变文件所有者
- 解决linux部署项目后,第一次访问初始化数据源的时候很慢的问题
- chown 改变文件所有者
- Linux进程状态解析之R、S、D、T、Z、X
- LVS(Linux Virtual Server) 学习笔记
- Linux svn自动更新时报错post-commit hook failed怎么办?
- CentOS6.8配置GO语言开发环境
- Linux文件操作总结
- shgrp 改变文件所属用户组
- linux SSH配合SecureCRT的密匙完美使用方法
- 【2016-7-20】VMWare12 安装 CentOS6.8、7
- linux解压war包
- Linux_KVM_KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机
- linux使用 java -jar来运行java非web程序
- 11个让你吃惊的 Linux 终端命令
- linux防火墙iptables使用方法
- linux配置文件的启动顺序
- 转载linux命令大全