首页 小编推荐 正文

程式设计语言的顶点,程式设计语言代码农翻身-必威体育 betway下载_必威体育appios|首页

“哇塞,怎样可人妇能这么简略!”

当C言语老头儿仍是小伙子的时分,第一次见到了汇编,发出了这么一声慨叹。

腹肌撕裂者

在C言语看来,这汇编的指令实在是太简略了,简略到了令人发指的境地,只需这么几类指令:

数据传输类:

便是把数据从一个方位复制到别的一个方位,比如从内存到寄存器,或许从寄存器到内存, 或许从寄存器到寄存器。

算术和逻辑运算类:

无非便是加减乘除,AND, OR, 左移,右移

操控类:

比较两个值,跳转到某一个方位。

汇编老头儿十分地自豪, 他常常放肆地说:“别看我的指令这么简略,可是合作我的寄存器和内狠干存, 却能完结你们这些所谓的高档言语的一切功用!”

这寄存器是什么鬼?C言语脑海中只需内存和指针,根本就没有什么寄存器的概念, 实际上,这是归于CPU阿甘的,容量有限,可是速度超级快的存储部件。

wis

32位C性迷宫PU寄存器

图片来历:http://pascalturbo.net/cpu-registers/

数组

C看着汇编这单薄的小身板,想到自己那高雅的if , 美丽的while, for ,还有那极为重要的函数调用,心里忍不住泛起嘀咕:我的程序怎样或许被编译成这么简略的汇编?

尽管心里有点瞧不上,但C小伙仍是挺恭顺的:“长辈,在我这儿有个数组的概念,编译成汇编是什么样?”

int num[10];

num[0] = 100;

num[1] = 200;

除了机器言语,那就属汇编最老,连C言语的第一个编译器都是用汇编写的,名副其实的长辈。

汇编老头儿没想到C小伙儿连这个问题都没弄清楚,说道qwqshow:“我这儿只认寄存器和内存,你这所谓数组,便是内存的一段接连的空间嘛,我只需知道开端地址就能够了。”

C小伙儿一看,好家伙,连变量名num都不要了。不过说得也是, 汇编老头只需记住初始地址,顺着地址就能找到一切东西。

“咦,这个什么0x000083d0不就适当于我的程式规划言语的极点,程式规划言语代码农翻身-必威体育 betway下载_必威体育appios|主页指针么?”

“是啊,不过在我这儿,都是地址,遗忘指针吧!”

条件分支

C小伙又想到了自己的if else,在汇编中该怎样处理?

if(x < y ){

returny - x;

} else{

returnx -y ;

}

汇编老头儿说:“你们这些高档言语啊,就爱搞杂乱化,怎样不必goto呢?”

C小伙说:“大马哈鱼goto 被迪杰斯特拉认为是有害的,会损坏结构化,不主张运用!”

“唉,简略便是美,你们这些高档言语懂不了,我这儿很简略,便是比较和跳转指令,从一个当地跳到别的一个当地履行就行了。”

汇编老头儿一遍慨叹,一遍写道:

咱们假定

%eax 寄存器保存的是y的值,

%edx 寄存器保存的是x的值。

cmpl %eax, %edx ; 比较x和y

jge .L1 realize; 假如x >= y,跳转到.L1处去履行

subl %edx,%eax ; 核算y-x,成果存到eax寄存器中

jmp .done ; 跳程式规划言语的极点,程式规划言语代码农翻身-必威体育 betway下载_必威体育appios|主页转到.done标签处

.L1:

subl %eax, %edx ; 核算 x-y

movl %edx, %eax ; 把成果存到eax寄存器中

.done: ; 核算完毕,成果保存在eax寄存器中

(码农翻身注:这个比如来历于《深化了解核算机体系》)

C小伙儿看了半响,终程式规划言语的极点,程式规划言语代码农翻身-必威体育 betway下载_必威体育appios|主页于搞理解了这段汇编程序的意义,这所谓的jge也便是做一个判别,然后跳转到特定方位去履行,就像是if 和 goto 的结合。

汇编老头儿看到C小伙儿懂了, 问道:“你想想你的while 循环,for 循环,是不是if 和 goto 的包装罢了?”

C小伙儿想了一会:“确实是这样!”

“这不就结了,我的汇编看起来简略,可是却能表达你一切的流程操控句子,不管什么if else, while, for ,switch ,对吧?”

C小伙儿觉得汇编老头儿说的都是歪理:“这goto是简略,可是程序读起来就十分杂乱了啊!”

汇编老头儿说:“你算是说道了点子上,所谓高档言语,主要是便利人类的编写和阅览的,是为了提高人类的功率。在我这儿,主要是让CPU阿甘履行的,那傻小子,速度飞快,什么也不理解,你只需告知它指令就行,越简略越好。程式规划言语的极点,程式规划言语代码农翻身-必威体育 betway下载_必威体育appios|主页”

没想到CPU阿甘听到了对它的嘲讽,不满地说:“老伙计,又在背面说我的坏话,我履行了亿万条指令今后,早就悟出了程序的局部性原理,这你懂不理解?”

函数调用

C小伙看到不能难倒汇编老头儿,想到了自己能够界说函数,精力一振,问道:“函数调用巨潮资讯你怎样处理啊?”

intfuncA(inta){

......

funcB(10)

......

}

intfuncB(intb){

......

funcC();

.程式规划言语的极点,程式规划言语代码农翻身-必威体育 betway下载_必威体育appios|主页.....

}

看看,这funcA调用funcB, funcB又调用funcC,函数嵌套调用,你那简略的指令能处理?C小伙儿心里暗想。

汇编老头儿不慌不忙:“你可算是问了一个有价值的问题,不过这也难不倒我,我需求内存合作一下就行了。”

“看到里面的栈帧没有,每个栈帧都表明一个函数的调用!”

“那这栈帧中有什么东西?” C小伙儿问道。

“细节太杂乱,给你画个示意图看看吧!”

“不对啊,你这栈帧中有输入参数,有回来值,可是没有戴森吸尘器函数代码啊?代码去哪儿了?”

“真是天真!这是运行时在内存中对函数的表达,那代码必定是在代码段啊。” 汇编老头儿愿望三国嘲讽道。

代码段的指令不断被CPU阿甘履行,遇到函数调用,就树立新的栈帧,函数调用完毕,栈帧就会毁掉,抛弃。然后回来上一个栈帧。

C小伙儿意识到自己犯了一个大过错,他老是想着代码的静态结构,而疏忽了运行时的表明。

编程言语的巅峰

他急于拯救体面,赶忙给C++打电话求救:“兄弟,快过来,治一下这个汇编老头儿!”

C++了解了作业的通过,说道:“兄弟,不可啊,别看我发际线有class, 可是终究我也得变成进程杨建柳化的程序,翻译成汇编,和你是相同相同的。”

(码农翻身注:拜见《面向对象圣经》)

“那Python呢, Java 呢?” C小伙儿有点气急败坏。

“他们更不可了,是虚拟机中的言语,他们连汇编老头儿的面儿都见不着,再说那虚拟机也是用你老兄C言语写的啊!”

C小伙呆住了,可不是,自己是许多体系级软件和编程言语的根底,现已十分靠近硬件了,自己治不了汇编老头儿,他人必定程式规划言语的极点,程式规划言语代码农翻身-必威体育 betway下载_必威体育appios|主页也不可啊。

C小伙儿又想到了使用层那杂乱的事务逻辑,他们都是由Python,Java, Java等高档言语编写的,还用到了什么OOD,规划形式,王胜男函数式,呼应式编程...... 可是它们都是一层层的笼统,协助程序员更好地编写程序,在最底层,仍是汇编啊。

他叹了一口气,对汇编老头说:“长辈,我服了,您可真是编程言语的巅峰啊。”

“不敢当,还有一个言语比我更凶猛!”

“是谁?”

独善其身

“机器言语!只需0和1!不信你看看这程序员专属的键盘。”

作者简介

刘欣

15年的软件职业从业经历,前IBM体系架构师,拿手企业使用架构和规划,领导过多个企业级使用架构规划和开发作业。

本动漫男生头像书特征

《码农翻身》不是一本编程的入门书,对编程一无所知的“纯小白”或许看不理解,或许程式规划言语的极点,程式规划言语代码农翻身-必威体育 betway下载_必威体育appios|主页会绝望。但稍有编程根底的读者读起来会十分痛快,读后会有王若楹一种“原来如此”的感觉。所以学习编程的你肯定能够下手一本,值得!

购买前能够先领券哦

优惠券收取二维码

码书商铺是CSDN专为咱们的用户树立的一个商铺,这儿供给很多的技能书本,除了书本咱们也供给日子类的相关产品,如耳机、键盘等,或许你们假如有需求也能够联络码书商铺的site客服或许在大众号下留言你们需求的产品,咱们尽量满意咱们需求哦。

作为码书商铺的运营人员,诚邀你们进入咱们的“CSDN码书福利群”,群里会不守时的给咱们赠书书本、优惠券等,有书本引荐或许物流方面信息也可群里咨询~现在群已满100人,需求加群的请扫下方二维码增加微信,拉你入群哦~

声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间服务。
increase

相关推荐

  • 暂无相关文章