学习bootsects中经常会问到的问题51427.docVIP

  • 1
  • 0
  • 约7.55千字
  • 约 8页
  • 2015-08-11 发布于山西
  • 举报
学习bootsects中经常会问到的问题.txt为什么我们在讲故事的时候总要加上从前?开了一夏的花,终落得粉身碎骨,却还笑着说意义。 学习bootsect.s中经常会问到的问题 转自oldlinux论坛 这个是我学习bootsect.s文件时,看完了本版关于bootsect文件后汇集了一下。 有些问题实在是书上很明显的地方,我就没有摘录上去 有些问题实在和bootsect这个代码没有关系,我也没有摘录上去 都是大家问的问题,也是自己最想问的问题。我看了几遍依然还是有很多问题。 其实很多问题,以前大家都问过了,确实是这样的。 查阅很方便,都是按照行号来的! ---------------------------------------- 关于bootsect.s中出现的移位指令 操作数的长度用加在指令后的符号表示b(byte, 8-bit), w(word, 16-bits), l(long, 32-bits),如“movb %al, %bl”,“movw %ax, %bx”,“movl %eax, %ebx ”。 如果没有指定操作数长度的话,编译器将按照目标操作数的长度来设置。 比如指令“mov %ax, %bx”,由于目标操作数bx的长度为word,那么编译器将把此指令等同于“movw %ax, %bx”,指令“mov $4, %ebx”等同于指令“movl $4, %ebx”,“push %al”等同于“pushb %al”。 对于没有指定操作数长度,但编译器又无法猜测的指令,编译器将会报错,比如指令“push $4”。 ====================================== L25 .globl begtext,begdata,begbbs,endtext,enddata,endbbs L26 .text L27 begintext: L28 .data L29 begdata: L30 .bss L31 begbbs: L32 .text ... L255 .text L256 endtext: L257 .data L258 enddata: L259 .bss L260 endbbs: Q: 可以看出.text .data .bss重叠的,我的疑问是在模块连接时,.text 和其他模块的.text合并,.data和其他模块的.data合并,那不会出现问题? 还有就是语法问题,为什么.text会出现3次? A: 重叠段的用法通常只用于单个文件。 前后两个.text开始text段并起定义段“标号”的用途,这样在带符号调试时可以分清。bootsect和setup都单独编译链接,不与其他目标文件合并。在组建内核Image文件时,tools/build.c文件会直接把他们去除各自的头结构后顺序组合在一起。.text就定义其后面的代码在. text段中。若后面又出现其他.XXXX,则表示.XXXX后面开始是XXXXX段中的代码或数据。 ########################################################################### 最近我在学习as汇编,了解了分段方面的知识。但在阅读bootsect.s文件时产生了疑问 整个文件的结构是这样的 .globl begtext,begdata,begbbs,endtext,enddata,endbbs .text begintext: .data begdata: .bss begbbs: .text ... .text endtext: .data enddata: .bss endbbs: Q:我不理解这种分段的方法,难道linus为了把代码段和数据段编译在一个段内? 即便如此,为什么最后还要有endtext等标示符? A: bootsect程序都统统放在512字节之内。在这么小的地方没有必要分离各个sections。 标号begtext和endtext可分别用来指明text段的开始和结束。 ########################################################################## 25 .globl begtext, begdata, begbss, endtext, enddata, endbss 26 .text 27 begtext: 28 .data 29 begdata: 30 .bss 31 begbss: 32 .text Q: 我看了一下MASM的语法,然后又看了一下as86的帮助,但是不知道上面几句话到底起什么作用,在MASM中有定义段的语句,正好对应段寄存器, as86的帮助上说.text,.data是置当前段(set cu

文档评论(0)

1亿VIP精品文档

相关文档