01 2014 档案

摘要:在Linux0.11系统中,GNU gcc或gas编译输出的目标模块文件和链接程序生成的可执行文件都使用了UNIX传统的a.out格式。这是一种被称为汇编与链接输出(Assembly & linker editor output)的目标文件格式。对于具有内存分页机制的系统来说,这是一种简单有效的目标文件格式。a.out格式文件由一个文件头和随后的代码区(Text section,也称为正文段)、已初始化数据区(Data section,也称为数据段)、重定位信息区、符号表以及符号名字符串构成。 a.out格式7个区的基本定义和用途是:#执行头部分(exec header)。执行文件头部 阅读全文
posted @ 2014-01-21 17:44 萧瑟秋风_cyz 阅读(349) 评论(0) 推荐(0)
摘要:为了提高代码执行效率,内核源代码中有些地方直接使用了汇编语言编制。这就会涉及在两种语言编制的程序之间相互调用的问题。 函数调用包括从一块代码到另一块代码之间的双向数据传递和执行控制转移。数据传递通过函数参数和返回值来进行。另外,我们还需要在进入函数是为函数的局部变量分配空间,并在函数退出时回收者部分空间。Intel 8086 CPU为控制传递提供了简单的指令,而数据的传递和局部变量存储空间的分配与回收则通过栈操作来实现。 1.栈帧结构和控制转移权方式大多数CPU的程序实现使用栈来支持函数调用操作。栈被用来传递函数参数、存储返回信息、临时保存寄存器原有值和存储局部数据。单个函数调用操作所... 阅读全文
posted @ 2014-01-21 09:46 萧瑟秋风_cyz 阅读(245) 评论(0) 推荐(0)
摘要:内核C语言程序嵌入式汇编代码又叫内联汇编,具有输入和输出参数的嵌入汇编语句的基本格式为:**************************************************asm("汇编语句" : 输出寄存器 : 输入寄存器 : 会被修改的寄存器);**************************************************除第一行外,后面带冒号的行若不使用就可以省略。其中,"asm"是内联汇编语句关键词;"汇编语句"是写汇编指令的地方;“输出寄存器”表示当这段嵌入式汇编执行完成后,哪些寄存器用 阅读全文
posted @ 2014-01-16 11:56 萧瑟秋风_cyz 阅读(622) 评论(0) 推荐(0)
摘要:as86汇编仅仅用于编译内核中的boot/bootsect.s引导扇区程序和实模式下的设置程序boot/setup.s。内核中其余所有汇编语言程序(包括C语言产生的汇编程序)均使用gas来编译,并与C语言程序编译产生的模块链接。3.2.2 GUN汇编语法与INTEL汇编语法的主要区别: *AT&T语法(即GUN汇编语法)中立即操作数前面要加一个字符'$';寄存器操作数前面要加字符百分号'%';绝对跳转/调用(相对于与程序计数器有关的跳转/调用)操作数前面要加星号'*'。而intel汇编语法没有这些限制。 *AT&T语法与intel 阅读全文
posted @ 2014-01-14 11:20 萧瑟秋风_cyz 阅读(1712) 评论(0) 推荐(0)
摘要:在开始讲述as86汇编器前,这本书引用内核中bootsect.s框架程序汇编代码来解释,记录下这一小段代码中不理解的地方,下面是这段实例代码:.globl begtext, begdata, begbss, endtext, enddata, endbss .text !正文段 begtext: !标号 .data !数据段 begdata: !标号 .bss ... 阅读全文
posted @ 2014-01-11 16:41 萧瑟秋风_cyz 阅读(1147) 评论(0) 推荐(0)