计算机是如何工作的

冯诺依曼体系结构,就是指存储程序计算机工作模型,计算机系统最最基础性的逻辑结构

硬件的角度 看:


从硬件的角度看存储程序计算机

CPU中有一个很重要的寄存器IP,可以把它看作是一个指针,总是指向内存的某一块区域(代码段CS),CPU从IP指向的内存地址取一条指令执行,IP自加一,然后再取一条指令执行,IP再自加一

程序员的角度 看:

从程序员的角度看存储程序计算机

Memory holds instructions and data

CPU interpreter of instructions

把CPU抽象成一个for循环,总是从内存里面取next instruction执行


Q:CPU识别什么样的指令?怎样识别指令?


ABI:程序员与CPU的接口界面

1. 主要是指令的编码(汇编指令),至于汇编指令是怎样编码成二进制的机器指令,这里不作讨论

2. 在这些指令中会使用到一些寄存器,这些寄存器有一些约定

3. 大多数指令可以直接访问内存


基于X86体系结构:

Registers for work space


通用寄存器

AX  累加器(Accumulator)
BX  基地址寄存器(Base Register)
CX  计数寄存器(Count Register)
DX  数据寄存器(Data Register)
BP  堆栈基指针(Base Pointer)
SI  变址寄存器(Index Register)
DI  变址寄存器(Index Register)
SP  堆栈顶指针(Stack Pointer)

Segment Register(段寄存器)

CS——代码段寄存器(Code Segment Register),其值为 代码段的段值
DS——数据段寄存器(Data Segment Register),其值为 数据段的段值
ES——附加段寄存器(Extra Segment Register),其值为 附加数据段的段值
SS——堆栈段寄存器(Stack Segment Register),其值为 堆栈段的段值
FS——附加段寄存器(Extra Segment Register),其值为 附加数据段的段值
GS——附加段寄存器(Extra Segment Register),其值为 附加数据段的段值

EFLAGS Register

标志寄存器


Memory: more work space


mov指令及几种内存寻址方式

寄存器模式,以 % 开头的寄存器标识符,操作的都是寄存器,和内存不打交道
立即寻址,以 $ 开头的数值,把一个数值直接放到寄存器里,和内存也不打交道
直接寻址,直接访问一个指定的内存地址的数据
间接寻址,将寄存器的值作为一个内存地址来访问内存
变址寻址,在间接寻址之时改变寄存器的数值


Stack memory + operations


几个重要的汇编指令

Stack grows down

Use to implement procedure calls

函数调用堆栈 是理解C代码在CPU上执行的关键(高级语言得以运行的基础)

(* 号表示eip寄存器不能被直接修改,只能通过特殊指令间接修改)



通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

C程序

C程序

gcc –S –o ccode32.s ccode.c -m32

命令将C程序编译成汇编代码

汇编代码

补充:

enter      pushl  %ebp
              movl  %esp, %ebp
leave      movl  %ebp, %esp
              popl  %ebp


完整汇编程序执行过程分析

完整汇编程序执行过程分析

Summary

1. ebp 和 esp 这两个寄存器总是指向堆栈的栈底和栈顶,而这个栈底是相对的栈底。当前函数有一个堆栈,它有一个栈底。跳出这个函数之外的另一个函数,也有自己的堆栈,它也有自己的栈底。由此表明:函数调用堆栈是由逻辑上多个堆栈叠加起来的

2. 函数的返回值默认使用 eax 寄存器存储返回给上一级函数

3. 对能看得见的结构部分(例如,通用寄存器,控制寄存器,状态寄存器,中断或者例外寄存器)的用法,分布和使用约定,或者说编程模式,就是所谓的ABI


(完)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容