2017年8月21日

GDT/IDT

摘要: 全局符号与弱符号之间的区别主要有两点: (1). 当链接编辑器组合若干可重定位的目标文件时,不允许对同名的 STB_GLOBAL 符号(全局变量)给出多个定义。 另一方面如果一个已定义的全局符号已经存在,出现一个同名的弱符号并不会产生错误(强弱附后存在,取强)。链接编辑器尽关心全局符号,忽略弱符号。 阅读全文

posted @ 2017-08-21 23:16 chaunceyctx 阅读(618) 评论(0) 推荐(0) 编辑

2017年8月18日

调试信息的完成

摘要: gdb中-x是为了实现通过文件的初始化gdb GAS(gcc)(AT&T 语法),NASM(Intel 语法) 当boot loader 引导操作系统的时候,机器必须有如下的状态: EAX: 必须包含魔数OX2BADB002,这个值告诉操作系统目前它是由兼容的Multiboot 的boot load 阅读全文

posted @ 2017-08-18 22:49 chaunceyctx 阅读(291) 评论(0) 推荐(0) 编辑

2017年8月16日

vsprintf解析

摘要: printf函数: 栈是从内存的高地址向低地址生长的,函数参数压栈顺序是从右到左,printf的第一个参数就是那个字符指针即为被双引号括起来的那一部分,函数通过判断字符串里控制参数的个数(%5.4lf等等)来判断参数个数及数据类型。例如printf("%d,%d",a,b);汇编代码为: 参数是最后 阅读全文

posted @ 2017-08-16 12:27 chaunceyctx 阅读(5940) 评论(0) 推荐(0) 编辑

2017年8月14日

带grub的软盘镜像制作

摘要: 以下在ubuntu16.04(一定要root模式下(sudo -s)下测试通过 dd if=/dev/zero bs=512 count=2880 of=floppy.img 为了方便我们需要在镜像文件中建立文件系统,有了文件系统才比较方便放置、修改我们自己的内核和应用程序。 首先将软盘镜像与某个 阅读全文

posted @ 2017-08-14 17:04 chaunceyctx 阅读(889) 评论(0) 推荐(1) 编辑

2017年8月10日

SunnyOS准备4

摘要: 8086 CPU一般是这样:CS寄存器初始化为0xF000,IP寄存器初始化为0xFFF0,所以按照CPU实模式地址计算法则,CPU执行的第一条指令地址是CS*10h+IP,即0xFFFF0处 对于80386以上的CPU: 第一点,80386及其以上的现代CPU(以下简称CPU)加电Reset之后并 阅读全文

posted @ 2017-08-10 15:24 chaunceyctx 阅读(163) 评论(0) 推荐(0) 编辑

2017年8月9日

SunnyOS准备3

摘要: gcc编译链接分解: 主要过程为: 预处理(preprocess) > 编译(compilation) > 汇编(assembly) > 链接(linking) gcc指令: -E:表示只执行预处理(preprocess) -S:执行预处理和编译 -o:表示输出文件 -c:表示预处理,编译和汇编操作 阅读全文

posted @ 2017-08-09 22:59 chaunceyctx 阅读(158) 评论(0) 推荐(0) 编辑

SunnyOS准备2

摘要: Makefile: 我们如何编译链接程序,很简单按F9或ctrl+F5,这是绝大多数IDE帮我们做的工作,但是在unix系统下却没有这么幸运,当我们要编译链接程序时,我们使用gcc编译器: 实际上:gcc test.c -o test一步就可,上面只是对其的拆解 但是对于多个文件(一个大型项目来说) 阅读全文

posted @ 2017-08-09 14:39 chaunceyctx 阅读(161) 评论(0) 推荐(0) 编辑

2017年8月7日

SunnyOS准备1

摘要: AT&T语法汇编和Intel语法汇编比较: 1. 前缀: ①在AT&T语法中,寄存器以'%'为前缀,立即数则以'$'为前缀,而Intel语法中则没有; ②在Intel语法中,十六进制立即数以'h'结尾,二进制立即数则以'b'结尾。另外对于编译器来说,十六进制立即数不能以字符a~f打头,需要在前面上加 阅读全文

posted @ 2017-08-07 23:16 chaunceyctx 阅读(216) 评论(0) 推荐(0) 编辑

2017年8月6日

汇编第七日

摘要: 端口读写用in(从端口读)和out(往端口写)指令: in al 60h 从60h号端口读入一个字节 in和out只能使用ax或al存放从端口读入的数据或要发送到端口的数据 访问8位端口用al,16位用ax CMOS RAM 芯片有实时钟(靠电池供电,保证RAM信息不丢失)和128个存储单元的RAM 阅读全文

posted @ 2017-08-06 21:42 chaunceyctx 阅读(138) 评论(0) 推荐(0) 编辑

汇编第六日

摘要: flag寄存器: ZF=1表示计算结果为0,反之 PF = 0表示计算结果二进制表示中1的个数为奇数,反之 SF = 0表示计算结果为正,反之 CF为1,在加法中表明结果出现仅为,在减法中表明结果出现借位,反之 OF = 1表示计算结果溢出,反之 对于无符号数,CPU用CF位记录计算结果是否产生进位 阅读全文

posted @ 2017-08-06 21:34 chaunceyctx 阅读(156) 评论(0) 推荐(0) 编辑

导航