boot/bootsect.s
来源:互联网 发布:淘宝助手上传宝贝很慢 编辑:程序博客网 时间:2024/05/22 00:16
MOVW:将DS:SI的内容送至ES:DI,是复制过去,原来的代码还在。很多书用了“移”这个字,实际上是复制过去。
Linux内核中引导部分一开始有这样一段代码:
45 entry start ! 告知连接程序,程序从start 标号开始执行。
46 start:
47 mov ax,#BOOTSEG ! 将ds 段寄存器置为0×7C0;
48 mov ds,ax
49 mov ax,#INITSEG ! 将es 段寄存器置为0×9000;
50 mov es,ax
51 mov cx,#256 ! 移动计数值=256 字;
52 sub si,si ! 源地址 ds:si = 0×07C0:0×0000
53 sub di,di ! 目的地址 es:di = 0×9000:0×0000
54 rep ! 重复执行,直到cx = 0
55 movw ! 移动1 个字;
56 jmpi go,INITSEG ! 间接跳转。这里INITSEG 指出跳转到的段地址。
57 go: mov ax,cs ! 将ds、es 和ss 都置成移动后代码所在的段处(0×9000)。
! 47–56 行作用是将自身(bootsect)从目前段位置0×07c0(31k)
! 移动到0×9000(576k)处,共256 字(512 字节),然后跳转到
! 移动后代码的go 标号处,也即本程序的下一语句处。
注意,在55行执行完毕之后,0×7c00之后的512字节应当与0×9000之后的512字节一模一样。
然后看56行,这里的go是段内偏移,也就是0×39(十进制的57),而INITSEG=0×9000,所以执行这条语句是跳到0×9000:0×39也就是复制过去的第57行,这样代码就相当于在一个程序里继续执行了。
- Linux/boot/bootsect.S
- /linux/boot/bootsect.s
- boot/bootsect.s
- Linux 0.11/boot/bootsect.s
- Linux0.11内核读书笔记/boot/bootsect.s
- linux-0.12/boot/bootsect.S源代码阅读
- bootsect.s
- bootsect.S
- linux-0.12/boot/bootsect.S下的常见问题
- 系统启动bootsect.s linux
- bootsect.s代码注释
- Linux-bootsect.s
- linux0.11--bootsect.s
- 读bootsect.s
- 真正的BOOTSECT.S
- 系统启动bootsect.s linux
- linux源代码----bootsect.s
- bootsect.S 剖析
- java中成员变量和局部变量的区别
- 鉴别不使用的索引
- .net原理
- 收集了一些python的文章
- 10款最佳CSS/jQuery开源图片说明
- boot/bootsect.s
- 智慧园区与物联网产业发展论坛将于6月26日在北京举行
- Recreating an Activity
- struts2.3.4,jar包必须添加完整
- 读取Spring配置文件的3种方式
- Java Script 求值
- 硬盘接口比较
- CCRenderTexture
- Mysql函数Last_insert_id()的真正含义