zoukankan      html  css  js  c++  java
  • 20135220谈愈敏Blog1_计算机是如何工作的

    计算机是如何工作的

    存储程序计算机工作模型

    冯诺依曼体系结构

    从硬件角度来看: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进制机器代码执行,可以理解为程序员和计算机的交流。总之计算机中每个部件都有自己的分配,在一步一步有条不紊的进行工作。

  • 相关阅读:
    刷题总结——跳蚤(poj1091容斥+分解质因数)
    刷题总结——分糖(ssoj 容斥原理+逆元+快速幂+组合数求插板)
    刷题总结——旅馆(bzoj1593线段树)
    刷题总结——树的同构(bzoj4337 树上hash)
    刷题总结——骑士的旅行(bzoj4336 树链剖分套权值线段树)
    刷题总结——松鼠的新家(bzoj3631)
    mysql备份与恢复
    nginx添加用户验证(访问服务器是的用户名密码)
    df命令
    org.mongodb.morphia.query.QueryException: sorting is not allowed for updates.
  • 原文地址:https://www.cnblogs.com/tymjava/p/5224763.html
Copyright © 2011-2022 走看看