第02章 内核编程语言和环境.pptx_第1页
第02章 内核编程语言和环境.pptx_第2页
第02章 内核编程语言和环境.pptx_第3页
第02章 内核编程语言和环境.pptx_第4页
第02章 内核编程语言和环境.pptx_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

内核编程语言和环境 1 主要内容 as86汇编器GNUas汇编C语言程序C与汇编程序的相互调用Linux0 12目标文件格式Make程序和Makefile文件实验 2 1 as86汇编器 as86汇编器ld86链接器as86和ld86由MINIX 386主要开发者BruceEvans编写Linux系统用它来创建16位的启动引导扇区程序boot bootsect s和实模式下初始设置程序boot setup s的二进制执行代码该编译器语法与GNUas汇编编译器语法不兼容 3 示例程序 4 示例程序 续 赋值语句 伪操作符语句 伪操作码和0个或多个操作数组成每个操作码有一个点字符 表示编译过程中的位置计数器 开始标号 标识符后跟一冒号 5 as86汇编语言语法 命令行基本格式 as 选项 oobjfilesrcfileboot s编译连接过程as86 0 a oboot oboot sls86 0 s obootboot oddbs 32if bootof dev fd0skip 1注意 最后生成的boot程序不是512B 而是长了32B MINIX可执行文件的头结构 必须手工去掉这32B 6 2 GNUas汇编 内核其余部分 除bootsect s和setup s 外其余所有汇编语言程序 包括C语言产生的汇编程序 均使用gas来编译 并与C语言程序编译产生的模块链接 在编译C语言时 GNUgcc汇编器会首先输出一个作为中间结果的as汇编语言文件 然后gcc会调用as汇编器把这个临时汇编语言程序编译成目标文件 实际上 as汇编器最初是专门用于汇编gcc产生的中间汇编语言程序的 并非作为一个独立的汇编器使用 7 as汇编语法示例 Head s含有32位启动代码 text global idt gdt pg dir tmp floppy area pg dir st32artup 32 mov1 0 x10 eaxmov ax ds 8 关于实模式和保护模式 第一款微处理器芯片4004 Intel 是一个4位微处理器 第二款8位处理器8080 有1个主累加器 寄存器A 和6个次累加器 寄存器B C D E H和L 等 用来访问16位的内存地址 也就是说8080可访问到64K内的地址空间 还没有段的概念 访问内存都要通过绝对地址 因此程序中的地址必须进行硬编码 第三款16位处理器8086 标志着IntelX86王朝的开始 因为8086处理器引入了一个重要概念 段 9 关于实模式和保护模式 续 8086处理器的寻址目标是1M大的内存空间 其地址总线扩展到了20位 但是其数据总线却只有16位 为了支持分段 Intel在8086CPU中设置了四个段寄存器 CS DS SS和ES 分别用于可执行代码段 数据段 堆栈段及其他段 每个段寄存器都是16位的 对应于地址总线中的高16位 即内存总线中的高12位与段寄存器中的16位相加 而低4位保留不变 这样就形成一个20位的实际地址 实现了从16位内存地址到20位实际地址的转换 或者叫 映射 实模式 80286处理器1982年问世 其地址总线位数增加到了24位 因此可以访问到16M的内存空间 更重要的是从此开始引进了一个全新理念 保护模式 这种模式下内存段的访问受到了限制 访问内存时不能直接从段寄存器中获得段的起始地址了 而需要经过额外转换和检查 10 关于实模式和保护模式 续 80386是32位CPU 地址址总线与数据总线宽度一致 都是32位 因此其寻址能力达到4GB 80386以后 Intel的CPU经历了80486 Pentium PentiumII PentiumIII等型号 虽然它们在速度上提高了好几个数量级 功能上也有不少改进 但基本上属于同一种系统结构的改进与加强 而无本质的变化 所以我们把80386以后的处理器统称为IA32 32BitIntelArchitecture 11 3 C语言程序 C程序编译过程如下 cpp对C语言程序中指示符和宏进行替换处理 12 gcc用法示例 编译hello c程序 生成执行文件hellogcc ohellohello c编译hello c程序 生成对应汇编程序hello sgcc S ohello shello c编译hello c程序 生成对应目标文件hello o而不链接gcc c ohello ohello c 13 嵌入汇编 内联汇编 内核C语言程序中嵌入汇编语句通常使用汇编语句最方便的方式是把他们放在一个宏内 14 嵌入汇编示例 15 4 C与汇编程序的相互调用 汇编中调用C函数比较 自由 只要在栈中适当位置的内容就都可以作为参数供C函数使用 16 4 C与汇编程序的相互调用 续 在C程序中调用汇编 如果调用的汇编语言程序比较短 可以直接在C程序中使用内联汇编语句 17 汇编程序callee s C程序caller c 5 Linux0 12目标文件格式 Linux0 12使用了两种编译器as86 ld86 编译链接运行在实地址模式下的16位内核引导扇区程序bootsect S和设置程序setup Sgas gcc gld 其它 18 6 Make程序和Makefile文件 make程序 自动编译所有内核代码文件 要使用make工具程序 必须编写一个名称为Makefile 或makefile 的文件Makefile文件 主要包含一些make要遵守的执行规则和要求执行的命令等内容 用于告诉make需要对所涉及的源文件做哪些操作和处理以生成相应的目标文件 19 Makefile文件示例 Makefileforthesimpleexamplekernel AS86 as86 0 aLD86 ld86 0AS gasLD gldLDFLAGS s x Mall ImageImage bootsystemddbs 32if bootof Imageskip 1ddbs 512if systemof Imageskip 2seek 1sync 20 Makefile文件示例 续 disk Imageddbs 8192if Imageof dev fd0sync sync synchead o head ssystem head o LD LDFLAGS head o osystem System mapboot boot s AS86 oboot oboot s LD86 s obootboot oclean rm fImageSystem mapcoreboot osystem 21 Makefile文件中的规则 target 目标 prerequisites 先决条件 command 命令 注意 每个命令之前键入一个制表符 Tab键 22 隐含规则 根据目标文件的命名形式使用 cc c 命令根据相应的 c文件更新对应的 o文件 同时 可以先觉条件中的 c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论