自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

MTK_蛙蛙鱼

@坚持@才是难能可贵的品格

  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

翻译 《ld reference manual》— 3 Linker Scripts

《ld reference manual》——ld链接器参考手册“翻译”:MTK_蛙蛙鱼写作时间:2013年11月22日更新时间:2013年11月22日GNU-ld地址:ld reference manual>>序:这篇文章目前仅翻译链接脚本的部分,其实不能说是翻译,因为我压根儿就没打算把它全部翻译成中文,我的意思是把里面的重点通过中文来解释,这也是

2013-11-22 16:48:46 3588 7

原创 《程序员的自我修养—链接、装载与库》

《程序员的自我修养—链接、装载与库》——读书笔记2013年11月18日2.1 被隐藏了的过程预编译(cpp or gcc -E)-> 编译(cc1包含了预编译 or gcc -S)-> 汇编(as or gcc -c)-> 链接(ld)。2.2 编译器做了什么扫描-> 语法分析(前两个步骤也可称词法分析)-> 语义分析-> 源代码优化

2013-11-18 19:22:34 4111 9

原创 自己动手搭建 Linux 0.12 编译环境 — 编译

自己动手搭建 Linux 0.12 编译环境 — 编译篇作者:MTK_蛙蛙鱼写作时间:2013年11月13日更新时间:2013年11月13日一、make dep

2013-11-15 16:02:27 2453

原创 自己动手搭建 Linux 0.12 编译环境 — Makefile

自己动手搭建 Linux 0.12 编译环境——Makefile篇作者:MTK_蛙蛙鱼写作时间:2013年11月13日序:时隔几个月,我又开始了Linux 0.12的征程,现在的我变得更加成熟,掌握了更多的技能。时间在变,环境在变,心情也在变,唯一不变的是我探究你玩弄你的心,我喜欢沉浸在思考的世界里,喜欢揣测你想干什么,这好像已经成为了我生活的另外一个分支,一直一直伴随我的

2013-11-15 09:46:48 1991

翻译 Programming Floppy Disk Controllers (下)

原文:可编程软盘控制器Command Set总共有13个命令在uPD765和兼容的FDC上可用。还有4个命令将会在8207x的控制器上可用。扇区的识别由柱面,磁头,扇区号和扇区大小组成。这些可以告诉控制器命令执行的位置和扇区数目。所有命令和状态通过数据寄存器传输,端口号为3f7h或者377h。在写命令或者读状态之前,需要读取main status register的MRQ位。它决定

2013-08-02 23:13:19 1066

翻译 Programming Floppy Disk Controllers (中)

Data Register数据寄存器是一个8位的寄存器,类似其他的寄存器,它间接的提供了一个寄存器栈。一个命令可能是0~9个字节长,第一个字节告诉控制器可能的字节数目。控制器发送命令字节给栈里正确的寄存器,保存程序员需要的索引寄存器,类似于其他的设备(比如VGA的寄存器)。有些控制器,比如i82077A,它有一块可编程范围的缓冲区,允许一次传输多个字节。这样可以提高数据和命令的传输和减少u

2013-07-06 12:01:16 1146

翻译 Programming Floppy Disk Controllers (上)

原文:可编程软盘控制器这篇文章是想介绍一下使用一些寄存器对NEC uPD765和Intel 82072/7软盘控制器(FDCs)进行编程,文章分为下面4个部分:  1. Overview  2. Configuration of an FDC on a PC  3. FDC Registers  4. Command SetOverviewPC机常常使用NEC uPD7

2013-07-06 11:52:02 1260

原创 Linux 0.12 OS. block - ll_rw_blk.c

问自己的问题- lock_buffer:  static inline void lock_buffer(struct buffer_head * bh)  {      cli(); // 1. 为什么需要用cli/sti来控制IF中断屏蔽?      while(bh->b_block) // 2. 'while'可以用'if'替换吗?          sleep_o

2013-07-03 15:55:11 1587

原创 Linux 0.12 OS. block - blk.h

重点摘要i. 设备支持目前系统支持的设备为0 - unused (无设备)1 - /dev/mem (内存盘)2 - /dev/fd (软盘)3 - /dev/hd (硬盘)4 - /dev/ttyx (串口)5 - /dev/tty (控制台)6 - /dev/lp (并口)7 - unnamed pipes (无名管道)ii. 数据结构- dev

2013-07-03 15:51:57 1168

原创 8259A 可编程中断控制器

一 8259A 结构图I. 主片结构 (IBM PC/XT)II. 主从结构 (IBM PC/AT)III. 微机结构 (IBM PC/AT)二 8259A pin脚介绍- CS:片选信号,只有CS有效时,CPU才能进行读写操作- WR:写信号,当WR有效且CS有效时,wr使8259A接受CPU送来的命令字- RD:读信号,当RD有效且CS有效时

2013-06-28 23:15:17 4846 4

原创 Linux 0.12 OS. math - error.c

这是math模块里最后一个文件,对这个模块的学习前前后后到现在也有半年时间了,我还依稀记得是从年初那时的一个论坛帖子开始的,它记录下了我前期大量的准备工作。学习从大的说是一件一辈子都不能忘记的事情,如果你是一个上进的人,那么请抽出适量的时间来提升自己,这点我个人还做的不是很好,因为我总是在闲得无聊的时候才想起来学点东西。如果你是搞IT这行当的,那么技术学习是一门永远的课程,你可以选择自己喜

2013-06-15 10:30:47 1155

原创 Linux 0.12 OS. math - math_emulate.c

好像math模块的分析接近尾声了,其实不然,之前的内容可以归纳为它的核心算法介绍,而这篇文章将勾画出它的框架。所谓的‘框架’就是把浮点处理器能支持的所有指令给解析了一遍,多是多了点儿,可结构清晰简单。一 math结构图二 FPU指令分类三 code部分I. __math_abortvoid __math_abort(struc

2013-06-15 10:29:26 1030

原创 Linux 0.12 OS. math - compare.c

#define clear_Cx() (I387.swd &= ~0x4500) /* reset C0,C3,C2 */static void normalize(temp_real * a){ int i = a->exponent & 0x7fff; int sign = a->exponent & 0x8000; if (!(a->a || a->b)) { /* zero

2013-06-15 10:25:48 913

原创 Linux 0.12 OS. math - div.c

static void shift_left(int * c){ __asm__ __volatile__("movl (%0),%%eax ; addl %%eax,(%0)\n\t" "movl 4(%0),%%eax ; adcl %%eax,4(%0)\n\t" "movl 8(%0),%%eax ; adcl %%eax,8(%0)\n\t" "movl 12(%0),%

2013-06-15 10:25:24 941

原创 Linux 0.12 OS. math - mul.c

/* c数组有128位,采用加法加自身即可 */static void shift(int * c){ __asm__("movl (%0),%%eax ; addl %%eax,(%0)\n\t" "movl 4(%0),%%eax ; adcl %%eax,4(%0)\n\t" "movl 8(%0),%%eax ; adcl %%eax,8(%0)\n\t" "movl 1

2013-06-15 10:25:06 1095 2

原创 Linux 0.12 OS. math - add.c

临时实数的加法运算模拟了整数的加法运算,把符号位和尾数部分整合成一个signed整数,在利用add指令完成加法操作。一 正数与负数这里说一下我自己理解的另一种补码的表现方式,以下用一个byte来做解释,先来举个例子5的补码:0b00000101,它对应的无符号值也是为5-5的补码:0b00000101 -> 取反-> 0b11111010 -> +1 ->0b11111011,它对

2013-06-01 09:15:11 935

原创 Linux 0.12 OS. math - get_put.c

get_put.c提供浮点协处理器与操作数之间的交互功能,get_xxx可以把操作数读取出来转换为临时实数,put_xxx可以把浮点指令计算结果写到目的操作数里。一 get/put_xxx说明- get/put_short_real:load/store单精度实数(m32r)- get/put_long_real:load/store双精度实数(m64r)- get

2013-06-01 09:14:43 979

原创 Linux 0.12 OS. math - ea.c

这个.c档可以计算出操作数的内存地址,当然既然内存地址那必须是内存操作数。浮点协处理器内存操作数包括短整(m16j)、整数(m32j)、长整(m64j)、单精度实数(m32r)、双精度实数(m64r)、临时实数(m80r)。要读懂ea.c的两个函数,需要先学习Intel指令解析的一些内容,建议阅读Intel spec的第6、7章节。一 r/m字段/*计算出info结构体里成员的地

2013-06-01 09:14:11 981

原创 Linux 0.12 OS. math - convert.c

convert.c提供了多种数据格式转换的功能,包含了单精度实数、双精度实数、临时实数和整数。I. short_to_temp单精度实数的格式:符号位/bit31指数/bit30~23 尾数/bit22~0临时实数的格式:符号位/bit79指数/bit78~64 尾数/bit63~0void short_to_temp(const short_real * a, temp_re

2013-05-25 09:11:50 979

原创 Linux 0.12 OS. math - math_emu.h

算是把math模块读了个大概了,已经可以着手把该记录的写下来了。总体来讲,math结构简单便于理解,而且它本身与系统之间的耦合度很低,所以我们可以把更多的时间花在知识点的学习上面。直白的说,这个模块非常独立,完全超出了你的预期!一 结构体I. struct infostruct info { long ___math_ret; long ___orig_eip; long

2013-05-25 09:10:29 1315

原创 Linux 0.12 OS. math - CR0

从这篇文章开始算是正式进入math模块的学习,前期我花了大量的时间来储备必要的知识,这个工作早在今年年初就进行了,可是被各种原因耽搁,我也寄希望于接下来能顺利进行。这里得说一下,我是一边学习一边做的笔记,因此非常大可能出现错误。如果在文章发表后发现错误,我会及时更新上去,希望尽可能不给大家的理解造成困扰。一 CR0控制寄存器- NE浮点处理器操作模式,0为MS-DOS co

2013-05-10 22:38:00 1189

原创 Intel Spec. Floating-point Instructions 7 - Floating-point Coprocessor Instruction Set Refrence

Intel Spec. Processor Instructions 6 - Floating-point Coprocessor Instruction Set RefrenceI. How to read the instruction set reference pages- Opcode column   /n: This value goes in the reg

2013-04-30 10:30:46 1067

原创 Intel Spec. Processor Instructions 6 - Processor Instruction Set Reference

Intel Spec. Processor Instructions 6 - Processor Instruction Set ReferenceI. How to read the instruction set reference pages- Opcode column   /digital: It indicates that the ModRM byte of

2013-04-29 15:43:41 1311

原创 Intel Spec. Processor Instructions 6 - Instruction Statements

Intel Spec. Processor Instructions 6 - Instruction StatementsI. Instruction statement syntax   assembler instruction: [label] : [prefix] mnemonic [argument [, . . . ]]   label: a unique iden

2013-04-28 21:56:37 1487

原创 自己动手搭建 Linux 0.12 编译环境 — Boot

通过前面两篇的介绍,相信对搭建Linux 0.12编译环境的诸多工具有了基础的了解,但不论是Bochs还是Linux主机,它们只是你搭建过程中的棋子而已,因为真正的工作环境是Linux 0.12 OS,前面铺垫了很多就是为了它能快速简单的搭建。下面两篇的内容个人觉得很赞,是搭建Linux 0.12 OS的重点。首先通过这篇文章我们来了解一下Linux 0.12的启动过程,然后学习如何修改b

2013-04-20 11:18:54 1906

原创 自己动手搭建 Linux 0.12 编译环境 — Linux主机

Hi,又见面了,这两天事情比较少,所以又快速构思这篇的内容。上篇我用极简模式说完了关于Linux 0.12的模拟环境Bochs,这篇同样沿袭上篇的思路,不过主要内容是关于Linux主机。在搭建Linux 0.12编译环境的时候,你需要一个Linux主机环境来完成几乎你想实现的所有工作,这里我选择了CentOS,这完全又是一个巧合,我一开始也是使用的是Ubuntu,后来为什么换成CentOS了,

2013-03-31 11:28:46 2360

原创 自己动手搭建 Linux 0.12 编译环境 — Bochs

从一篇开始,我们慢慢会展开主题。Linux 0.12已经是一个可以运行起来的OS,它需要一个Intel 386的硬件环境来支撑,选择Bochs作为虚拟环境完全是因为当初学习Oldlinux的缘故,慢慢地也就懒得去尝试其他的虚拟机了,这部分我会在闲下来后或者觉得有必要尝试更优秀的软件的时候去做它。因此此刻此景,我们还是将就一下吧,如果你在使用qemu虚拟机,完全可以直接跳过~[Bochs].

2013-03-26 19:39:46 2699

原创 自己动手搭建 Linux 0.12 编译环境 — 开篇

起因 =>在想到说要搭建0.12的编译环境之前,我一直在学习0.12的math/模块,从基础知识延伸出很多内容都是我从未涉足过的东西。我翻看了Intel Spec的很多章节,虽然英文很差,可是我会多看一遍,久而久之,感觉比较乏味。我不是很耐得住很长一段时间做同一件事情的人,不过这样的僵局即将打开。偶然看到论坛中有人分享Linus早期经历,看得很兴奋,Linux在Linus设定的一个个目标中

2013-03-23 23:16:04 2388 5

原创 Google Code Jam 2012 Qualification Round. Problem D. Hall of Mirrors

Google Code Jam,由google发起的一个网络算法竞赛,一0年的时候参加过一次,只进了Round 2,那时我已经大三了。现在,我已经工作快两年了(到今年7月)。  一0年还参加过一次百度举行的“百度之星”的网络竞赛,也算是算法竞赛,那次进了复赛前400名,拿了件T恤。为了让人生稍微完整一些,于是准备今年的GCJ,希望能拿到一件google T恤也就满意了。  两年没写算法了(

2013-02-02 16:58:51 1539 2

原创 whoami

呵呵,不好意思咯,这个标题可能会被搜索引擎误导,因为这里的内容不是解释这个linux command的。  这个CSDN账号开了不算久,可是一篇文章都没写,因为一直在犹豫到底写什么才算真正的有帮助(不论是自己还是热爱技术的朋友)。曾经在大学时代写过不少文章:1. 网易博客,主要是算法方面,现在已经关了。2. CSDN博客,主要是linux方面的,早就没更新了。3. oldlinux

2013-01-27 00:13:25 651

实数的二进制表示

请把它放到Linux下运行,直接输入需要转换的实数按回车即可得到80位临时实数二进制结果。

2013-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除