x86的通用寄存器有eax.ebx.ecx.edx.edi.esi.这些寄存器在大多数指令中是可以任意选用的,比如movl指令可以把一个立即数传送到eax中,也可传送到ebx中.但也有一些指令规定只能用其中某些寄存器做某种用途,例如除法指令idivl要求被除数在eax寄存器中,edx寄存器必须是0,而除数可以在任意寄存器中,计算结果的商数保存在eax寄存器中,而原来的被除数被覆盖掉,余数保存在edx寄存器中.也就是说,通用寄存器对于某些指令而言不是通用的. x86的特殊寄存器有ebp.esp.e…
C语言的本质(4)--浮点数的本质与运算 C语言规定了3种浮点数,float型.double型和long double型,其中float型占4个字节,double型占8个字节,longdouble型长度要大于等于double型,本文档将以float型为例进行介绍,double型和long double型只是比float型位数长,原理都是一样的. float型可以表示的范围是-3.402823466e38~3.402823466e38,而作为同为4个字节的定点数却只能表示-2147483648~2…
为了更加深入理解C语言的本质,我们需要学习一些汇编相关的知识.作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但是非常重要.因为它能够完成许多其它语言所无法完成的功能.就拿 Linux 内核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在 Linux 的启动部分.由于这部分代码与硬件的关系非常密切,即使是 C 语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能. 大多数情况下我们不需要使用汇编语言,因为即便…
C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返回值来描述这个协议,只要函数名和参数名命名合理,参数和返回值的类型定义的准确,调用者仅仅通过函数接口就能知道函数的用法.当函数接口不能表达函数的全部语义时,文档就起了重要的补充作用,函数文档的写法我们可以参照Linux下的Man Page或MSDN. 下面通过分析C标准库函数来说明函数接口: 在Li…
C语言的本质(7)--C语言运算符大全 C语言的结合方向 C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左).例如算术运算符的结合性是自左至右,即先左后右.如有表达式 x-y+z则 y 应先与"-"号结合,执行 x-y 运算,然后再执行+z 的运算.这种自左至右的结合方向就称为"左结合性".而自右至左的结合方向称为"右结合性".  最典型的右结合性运算符是赋值运算符.如 x=y=z,由于"="的右结…
C语言的本质(3)--整数的本质与运算 计算机存储的最小单位是字节(Byte),一个字节通常是8个bit.C语言规定char型占一个字节的存储空间.如果这8个bit按无符号整数来解释,则取值范围是0~255,如果按有符号整数来解释,则取值范围是-128~127.C语言规定了signed和unsigned两个关键字,unsigned char型表示无符号数,signed char型表示有符号数. 对于char类型,编译器可以定义char型是无符号的,也可以定义char型是有符号的,在该编译器所对应…
指针,大概是C语言中最难理解的概念之一了.指针这个东西是C语言中的一个基本概念,C99中对于指针的定义是: 1. 指针的类型是derived from其它类型,也就是说指针的类型是由它指向的类型决定的: 2. 指针是一种reference类型,即引用类型: 指针这个词出现在高级语言程序设计中,在汇编中,就没有指针这个概念,有的只是地址.计算机的每一个内存单元都是编址的,对内存的访问都是通过地址进行的.高级语言把这些低级的硬件细节隐藏起来,程序处理的数据都存在数据对象里,数据对象在能用其间有特定的…
抄自:http://my.oschina.net/apeng/blog/137911 目录:[ - ] 为什么要学习C语言? C语言学习方法 1,参考书籍 2,动手实验环境搭建 3,网络资源 附录 一些有用的C语言网络资源: 一些值得关注及研究的C语言相关项目: 一些C语言编程时可以使用的工具软件,帮你提高代码质量: C语言编程规范编程标准: C语言编程电子书及教程: 在这里想比较系统的谈谈个人对C语言学习方法的理解.分别按照书籍.实验环境搭建.网络资源来分别介绍,希望能写的比较完整全面一些,给…
12天学好C语言--记录我的C语言学习之路 Day 1: 刚刚入门C语言,那么肯定要先把什么是C语言和大家讲清楚,那么大家看下面一段程序(program  1.1): /*//program 1.1 #include<stdio.h>  //编译预处理指令,编译系统要求提供程序中有关函数的信息,而stdio是"standard input&output"的缩写(标准输入输出) //后缀.h的意思是header file(头文件) int main()    //定义…
抄自http://my.oschina.net/apeng/blog/137911,觉得很有用,收藏它 目录:[ - ] 为什么要学习C语言? C语言学习方法 1,参考书籍 2,动手实验环境搭建 3,网络资源 附录 一些有用的C语言网络资源: 一些值得关注及研究的C语言相关项目: 一些C语言编程时可以使用的工具软件,帮你提高代码质量: C语言编程规范编程标准: C语言编程电子书及教程: 在这里想比较系统的谈谈个人对C语言学习方法的理解.分别按照书籍.实验环境搭建.网络资源来分别介绍,希望能写的比…