20135220谈愈敏Blog1_计算机是如何工作的
2016-02-28 15:02
447 查看
计算机是如何工作的
存储程序计算机工作模型
冯诺依曼体系结构
从硬件角度来看:CPU和内存,由总线连接,CPU中有一个名为IP的寄存器,总是指向内存的某一块:CS,代码段,执行命令时就取IP指向的一条指令,然后IP自加1,就指向下一条指令。从程序员角度来看:即存储程序计算机,内存存储数据和指令,CPU就是一个for循环,总是在执行下一条指令,CPU负责解释和执行这些指令。
CPU如何识别这些指令?
定义API:程序员与计算机的接口界面 ABI:程序与CPU的接口界面,二进制指令编码,只涉及汇编指令。
IP可被CALL,RET,JMP指令修改。
X86汇编基础
CPU寄存器
通用寄存器+段寄存器+标志寄存器加E:32位 加R:64位
汇编指令
mov指令:b,w,l,q分别代表8位,16位,32位,64位寻址方式:寄存器寻址,立即数寻址,直接寻址,间接寻址,变址寻址
汇编指令:push,pop,call,ret
程序员不能直接修改EIP寄存器
汇编一个简单的C程序分析其汇编指令执行过程
实验过程
源代码:int g(int x) { return x + 3; } int f(int x) { return g(x); } int main(void) { return f(8) + 1; }
实验代码中将函数名稍作更改,以防和他人雷同,如下:
使用gcc命令编译成汇编语言:gcc –S –o main.s main.c -m32
打开汇编代码如下:
整理汇编文件:删除gcc产生代码中以"."开头的编译器指令后得到的汇编代码:
add: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax addl $3, %eax popl %ebp ret call: pushl %ebp movl %esp, %ebp subl $4, %esp movl 8(%ebp), %eax movl %eax, (%esp) call add leave ret main: pushl %ebp movl %esp, %ebp subl $4, %esp movl $8, (%esp) call call addl $1, %eax leave ret
相应帧栈图分析:
总结
计算机是如何工作的?首先了解了冯诺依曼体系结构,即存储程序计算机,是CPU和内存之间的一个搭配工作,内存存储数据和指令,CPU就取出来执行,CPU中也有一些特殊的寄存器,存储特殊值以完成自己相应的工作,例如eip一直指向下一条将要执行的指令的地址。其实计算机是要先将程序代码汇编成汇编代码,然后是形成2进制机器代码执行,可以理解为程序员和计算机的交流。总之计算机中每个部件都有自己的分配,在一步一步有条不紊的进行工作。相关文章推荐
- 有人串口转wifi模块 httpd client通信示例-用户使用网页通过服务器收发串口数据源码 小黄人软件
- 用keras小试CNN卷积神经网络应用于人脸识别
- 静态链表
- nyoj801 哈夫曼编码,输入有毒
- 深入理解Java内存模型(二)——重排序http://www.infoq.com/cn/articles/java-memory-model-2
- 文本分类算法之--单层感知器的神经网络
- 从软件工程的角度写机器学习2——流行的机器学习应用模式与算法
- tcpdump&pt-query-digest分析mysql负载性能问题
- 从JVM并发看CPU内存指令重排序(Memory Reordering) http://ifeve.com/jvm-memory-reordering/
- Android开发之APN网络切换
- 文本挖掘分类算法--BP神经网络的一个具体的案例
- TCP/IP协议详解:卷一----笔记(2)数据链路层
- https 和 http区别
- Linux内核分析第一周——计算机是如何工作的
- 数据结构之链表操作
- TCP三次握手连接与四次握手断开
- 文本分类算法之--BP神经网络
- 计算机网络19--P2P应用
- [转载] TCP与UDP对比
- java重拍 https://www.zhihu.com/question/34387716/answer/76029594