摘要:        
下面一段C程序: 如果在编译时加上-g选项,那么用objdump反汇编时可以把C代码和汇编代码穿插起来显示,这样C代码和汇编代码的对应关系看得更清楚。反汇编的结果很长,以下只列出我们关心的部分。 要查看编译后的汇编代码,其实还有一种办法是gcc -S main.c,这样只生成汇编代码main.s,而    阅读全文
posted @ 2018-04-07 16:01
刘-皇叔
阅读(3039)
评论(0)
推荐(0)
        
            
        
        
摘要:        
汇编程序1 将这段程序保存为hello.s,然后用汇编器as把汇编程序中的助记符翻译成机器指令(汇编指令与机器指令是对应的)生成目标文件hello.o。然后用链接器ld把目标文件hello.o链接成可执行文件hello(虽然只有一个目标文件但是也需要经过链接才能成为可执行文件因为链接器要修改目标文件    阅读全文
posted @ 2018-04-07 15:52
刘-皇叔
阅读(3613)
评论(0)
推荐(0)
        
            
        
        
摘要:        
访问内存时在指令中可以用多种方式表示内存地址。内存寻址在指令中可以表示成如下的通用格式: ADDRESS_OR_OFFSET(%BASE_OR_OFFSET,%INDEX,MULTIPLIER) 它所表示的地址可以这样计算出来: FINAL ADDRESS = ADDRESS_OR_OFFSET +    阅读全文
posted @ 2018-04-07 15:50
刘-皇叔
阅读(896)
评论(0)
推荐(0)
        
            
        
        
摘要:        
通用寄存器 x86的通用寄存器有eax、ebx、ecx、edx、edi、esi。这些寄存器在大多数指令中是可以任意使用的。但有些指令限制只能用其中某些寄存器做某种用途,例如除法指令idivl规定被除数在eax寄存器中,edx寄存器必须是0,而除数可以是任何寄存器中。计算结果的商数保存在eax寄存器中    阅读全文
posted @ 2018-04-07 15:49
刘-皇叔
阅读(1443)
评论(0)
推荐(0)
        
            
        
        
摘要:        
.section 就是汇编程序指令的一种, GNU 汇编程序提供了很多这样的指令(directive),这种指令都是以句点“.”为开头,后跟指令名(小写字母),在此,我们只介绍在内核源代码中出现的几个指令。 .ascii 语法: .ascii "string"... .ascii 表示零个或多个(用    阅读全文
posted @ 2018-04-07 15:47
刘-皇叔
阅读(3440)
评论(1)
推荐(1)
        
            
        
        
摘要:        
x86汇编一直存在两种不同的语法,在intel的官方文档中使用intel语法,Windows也使用intel语法,而UNIX平台的汇编器一直使用AT&T语法。 AT&T 和 Intel 汇编语言的语法区别主要体现在操作数前缀、赋值方向、间接寻址语法、操作码的后缀上,而就具体的指令而言,在同一平台上,    阅读全文
posted @ 2018-04-07 15:43
刘-皇叔
阅读(2324)
评论(0)
推荐(3)
        
            
        
        
摘要:        
在 Linux 源代码中,以.S(或.s)为扩展名的文件是包含汇编语言代码的文件。 在 Linux 下有两种方式,一种是使用汇编程序 GAS 和连接程序 LD, 一种是使用 GCC。 GAS 把汇编语言源文件(.S 或.s)转换为目标文件(.o): 一旦创建了一个目标文件,就需要把它连接并执行,连接    阅读全文
posted @ 2018-04-07 15:39
刘-皇叔
阅读(1495)
评论(0)
推荐(0)
        
            
        
        
摘要:        
现代计算机都把存储器分成若干级,称为Memory Hierarchy,按照离CPU由近到远的顺序依次是CPU寄存器、 Cache、内存、硬盘,越靠近CPU的存储器容量越小但访问速度越快,下图给出了各种存储器的容量和访问速度的典型值: 寄存器、 Cache和内存中的数据都是掉电丢失的,这称为易失性存储    阅读全文
posted @ 2018-04-07 15:23
刘-皇叔
阅读(2118)
评论(0)
推荐(0)
        
            
        
        
摘要:        
现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要MMU(Memory Management Unit,内存管理单元) 的支持。有些嵌入式处理器没有MMU,则不能运行依赖于虚拟内存管理的操作系统。 虚拟地址和物理地址 首先引入两个概念,虚拟地址和物理地    阅读全文
posted @ 2018-04-07 15:17
刘-皇叔
阅读(718)
评论(0)
推荐(0)
        
            
        
        
摘要:        
CPU执行指令除了访问内存之外还要访问很多设备( Device) ,如键盘、鼠标、硬盘、显示器等,它们和CPU之间的连接: 有些设备像内存芯片一样连接到处理器的地址总线和数据总线,正因为地址线和数据线上可以挂多个设备和内存芯片所以才叫“总线”,但不同的设备和内存应该占不同的地址范围。访问这种设备就像    阅读全文
posted @ 2018-04-07 15:01
刘-皇叔
阅读(224)
评论(0)
推荐(0)
        
            
        
        
摘要:        
CPU总是周而复始地做同一件事:从内存取指令,然后解释执行它,然后再取下一条指令,再解释执行。 CPU包含以下功能单元: 寄存器(Register),是CPU内部的高速存储器,像内存一样可以存取数据,但比访问内存快得多。 程序计数器(PC,Program Counter,保存着CPU取指令的地址,每    阅读全文
posted @ 2018-04-07 14:48
刘-皇叔
阅读(232)
评论(0)
推荐(0)
        
            
        
        
摘要:        
现代计算机都是基于Von Neumann体系结构的,不管是嵌入式系统、 PC还是服务器。这种体系结构的主要特点是: CPU(CPU, Central Processing Unit,中央处理器,或简称处理器Processor) 和内存(Memory) 是计算机的两个主要组成部分,内存中保存着数据和指    阅读全文
posted @ 2018-04-07 14:38
刘-皇叔
阅读(507)
评论(0)
推荐(0)
        
            
        
        
摘要:        
Side Effect 改变计算机存储单元里的数据或者做输入或输出操作,这些都算Side Effect。 比如: int a = 10; /* a这个表达式在这里没有副作用,这里只是想要取得a这个变量的值10 */ int b = a; /*,而b = a这个表达式有副作用,它的副作用是使b的值改变    阅读全文
posted @ 2018-04-07 14:31
刘-皇叔
阅读(206)
评论(0)
推荐(0)
        
            
        
        
摘要:        
&& 逻辑与 使用格式:条件A && 条件B; 运算结果: 只有当条件A和条件B都成立时,结果才为1,也就是“真”;其余情况的结果都为0,也就是“假”。因此,条件A或条件B只要有一个不成立,结果都为0,也就是“假” 运算过程: 总是先判断条件A是否成立,如果条件A成立,接着再判断条件B是否成立:如果    阅读全文
posted @ 2018-04-07 12:02
刘-皇叔
阅读(7374)
评论(0)
推荐(0)
        
            
        
        
摘要:        
在两种类型之间做转换,转换结果将取决于两种类型的精度: 1. 精度是N的有符号整数类型应该用N个Bit表示,取值范围至少应该覆盖(-2N-1, 2N-1)。例如signed char型用8个Bit表示,表示的取值范围是[-128, 127],也可以说是覆盖了(-128, 128),所以这种类型的精度    阅读全文
posted @ 2018-04-07 11:35
刘-皇叔
阅读(599)
评论(0)
推荐(0)
        
            
        
        
摘要:        
Integer Promotion 在一个表达式中,凡是可以使用int或unsigned int类型做右值的地方也都可以使用有符号或无符号的char型、 short型和Bit-field。如果原始类型的取值范围都能用int型表示,则其值被提升为int型,如果表示不了就提升为unsigned int型    阅读全文
posted @ 2018-04-07 11:02
刘-皇叔
阅读(292)
评论(0)
推荐(0)
        
            
        
        
摘要:        
C标准规定的浮点型有float、 double、 long double,和整数类型一样,既没有规定每种类型占多少字节,也没有规定采用哪种表示形式。浮点数的实现在各种平台上差异很大,有的处理器有浮点运算单元(称为硬件实现),有的处理器没有,只能做整数运算,那么就要用整数运算来模拟浮点运算(称为软件实    阅读全文
posted @ 2018-04-07 10:31
刘-皇叔
阅读(1920)
评论(0)
推荐(0)
        
            
        
        
摘要:        
char 计算机存储的最小单位是字节( Byte) ,一个字节通常是8个bit。 C语言规定char型占一个字节的存储空间。 如果这8个bit按无符号整数来解释,则取值范围是0~255,如果按有符号整数来解释,则取值范围是-128~127。 C语言规定了signed和unsigned两个关键字, u    阅读全文
posted @ 2018-04-07 10:19
刘-皇叔
阅读(957)
评论(0)
推荐(0)
        

浙公网安备 33010602011771号