![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux 0.12 OS. math
Hony杨
算法 内核 人生
展开
-
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 · 1123 阅读 · 2 评论 -
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 · 1327 阅读 · 0 评论 -
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 · 1510 阅读 · 0 评论 -
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 · 969 阅读 · 0 评论 -
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 · 951 阅读 · 0 评论 -
Linux 0.12 OS. math - CR0
从这篇文章开始算是正式进入math模块的学习,前期我花了大量的时间来储备必要的知识,这个工作早在今年年初就进行了,可是被各种原因耽搁,我也寄希望于接下来能顺利进行。这里得说一下,我是一边学习一边做的笔记,因此非常大可能出现错误。如果在文章发表后发现错误,我会及时更新上去,希望尽可能不给大家的理解造成困扰。一 CR0控制寄存器- NE浮点处理器操作模式,0为MS-DOS co原创 2013-05-10 22:38:00 · 1228 阅读 · 0 评论 -
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 · 1349 阅读 · 0 评论 -
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 · 1011 阅读 · 0 评论 -
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 · 1008 阅读 · 0 评论 -
Linux 0.12 OS. math - math_emulate.c
好像math模块的分析接近尾声了,其实不然,之前的内容可以归纳为它的核心算法介绍,而这篇文章将勾画出它的框架。所谓的‘框架’就是把浮点处理器能支持的所有指令给解析了一遍,多是多了点儿,可结构清晰简单。一 math结构图二 FPU指令分类三 code部分I. __math_abortvoid __math_abort(struc原创 2013-06-15 10:29:26 · 1060 阅读 · 0 评论 -
Linux 0.12 OS. math - error.c
这是math模块里最后一个文件,对这个模块的学习前前后后到现在也有半年时间了,我还依稀记得是从年初那时的一个论坛帖子开始的,它记录下了我前期大量的准备工作。学习从大的说是一件一辈子都不能忘记的事情,如果你是一个上进的人,那么请抽出适量的时间来提升自己,这点我个人还做的不是很好,因为我总是在闲得无聊的时候才想起来学点东西。如果你是搞IT这行当的,那么技术学习是一门永远的课程,你可以选择自己喜原创 2013-06-15 10:30:47 · 1178 阅读 · 0 评论 -
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 · 1015 阅读 · 0 评论 -
Linux 0.12 OS. math - add.c
临时实数的加法运算模拟了整数的加法运算,把符号位和尾数部分整合成一个signed整数,在利用add指令完成加法操作。一 正数与负数这里说一下我自己理解的另一种补码的表现方式,以下用一个byte来做解释,先来举个例子5的补码:0b00000101,它对应的无符号值也是为5-5的补码:0b00000101 -> 取反-> 0b11111010 -> +1 ->0b11111011,它对原创 2013-06-01 09:15:11 · 948 阅读 · 0 评论 -
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 · 1082 阅读 · 0 评论