开窍小老虎,一步一个脚印之 初识汇编(一)

  最近一直浸淫在计算机编程中无法自拔。哲学 认识论中讲过。人类的求知的过程是由两次飞跃。第一是从感性认识到理性认识;第二是从理性认识到实践。这段话对有些人是适用的。我就是其中的一名。在知乎上求助问题“学计算机要懂汇编吗?”,地下有人回复说,对有些人是必须要学会的。因为当我们满脸疑惑的问别人,别人可能会甩我们一脸“你问这个有用吗?”,可我们的脑袋上都套着一句话“你不明白这个,你怎么能看第二章呢?”,对于我来讲,知识的断层是特别影响我求知的道路。

  说说我的学习路线。《VS2010轻松学习C#-从零到深入-天轰穿.NET4趣味编程视频教程》,田老师是一个嬉笑怒骂皆文章的人,是一个没有被体制内教育束缚的人。实践证明,一个人若要是想干成一件事情,循规蹈矩的路子不一定是唯一的路子。第二步,《c#高级编程》(第6版),讲得是深入的c#的基础知识。第三步,《汇编语言》(王爽 第2版)。通过视频我大概了解了什么是编程,编程到底是怎么起作用的。这是我的一个感性认识。然后我需要用专业的知识填充我的理性认识。

  下面说一下 计算机的原理,这些编程语言,到底是怎么就让计算机工作了:

  归根到底,计算机是怎么就能工作呢?其实这个原理的本质 和 “人 按了一下开关 灯就亮”是一样的,“人按开关”,是一个命令,开关接受到命令之后,电流接通,灯变亮了,从“0”变成了“1”。 计算机的机器指令是一列二进制数字,计算机将之转变为一系列的高低电平(高低电压),以使计算机的电子器件收到驱动,进行运算。

我们把这个过程独立出来“执行计算机指令,进行运算”,进行这个步骤的就是我们熟知的CPU,每一个种类的CPU,由于硬件的设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以每一种类的CPU都有自己的机器指令集,也就是机器语言。这样的话,编程的作用就是,用一堆的 0 1 符号控制各个“开关”,实现自己想要达到的效果。这种编程语言,就叫做机器语言。比如,让8086cpu 计算s= 768+12288-1280,机器语言是这样子的:

101100000000000000000011                                                                                                                                                                 000001010000000000110000                                                                                                                                                                 001011010000000000000101

  这样子很难受了,每一个CPU都有不同的机器语言库,要自己算个东西,得把每个机器语言库的01语言代表的意思都记住。太麻烦了,不行,得想个办法。

  我能不能这样,我想命令机器,把在A上存储的东西移动到B上。我就直接写 "mov a , b"?然后指定一个规则,让机器自己翻译成01语言,这样就不用记那么多的数字了。可问题又来了,如何翻译成01语言呢?

  刚开始我一直在找编译器的原理,找各种编译的方法。但是不管怎么样都是一头雾水。知道天降一本神书《编码-隐匿在计算机软硬件背后的语言》解释我心中多年的困惑。上网上百度书评,基本都是好到爆。上一段的那个问题,推荐读这本书,这本书中会告诉你期盼已久的答案。

  

   

  

  

时间: 2024-09-30 15:51:34

开窍小老虎,一步一个脚印之 初识汇编(一)的相关文章

开窍小老虎,一步一个脚印之 初识汇编(二)

汇编语言,有三类指令组成: 1:汇编指令,机器码的助记符,有对应的机器码 2:伪指令:没有对应的机器码,由编译器执行,计算机并不执行 3:其他符号:如+ -等,由编译器识别,没有对应的机器码. 内存: 内存被分为若干个存储单元,一个存储单元存储8个bit,也就是一个byte.每个存储单元从0开始编号,如果一个存储器有128个存储单元,编号从0~127,他的容量是128个字节.现在我的内存是6G,=6*1024*1024个字节.这个编号可以看做是存储单元在存储器中的地址.就像一条街,每个房子都有门

【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(3-1)Android 和 Service 的交互之GET方式

好久没更新了,罪过罪过.最对不起的人莫过于那些支持和等待在下拙文的诸位,在此道一声抱歉.管窥之见,侥幸博得各位认同,给了我莫大的鼓励. 话休絮烦,文接前章. 到[一步一个脚印]Tomcat+MySQL为自己的APP打造服务器(2-3)Servlet连接MySQL数据库为止,我们已经将服务端的部分走通了:通过 Servlet 连接 MySQL ,分析业务需求进行响应的增删改查操作返回对应的处理结果.(上一篇结尾是说接下来该说POST请求了,但是在准备这篇文章时发现POST再推后一篇,等我们把 An

【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(2-2)Servlet的使用

在上一篇 [一步一个脚印]Tomcat+MySQL为自己的APP打造服务器(2-1)Servlet 的使用 中我们只是简单的对 Servlet 要做的任务.在服务器中的地位有了一个大概的了解,完成了在一个全新的 WorkSpace 中创建第一个 Dynamic Web Project ,并创建第一个 Servlet ,解决期间可能遇到的常见问题,还留了不少的内容重要内容没有完成,今天我们来继续解决这几个问题: 一.怎么能访问到一个Servlet & URL中各部分的含义 我们来回顾上一篇篇末时在

【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(2-1)Servlet的使用

最近工作上效率比较低,各种需求更改耗费了大量的时间成本(不吐槽,你懂的,已无力),高的身心俱疲.... ... 每次废话都比较多,我也是服了自己了,就当我是来凑字数的吧!不废话了,开始正题: 翻了一下上一篇文章,发现没有装开发环境,这里补上--在[一步一个脚印]Tomcat+MySQL为自己的APP打造服务器(1)服务器环境搭建中已经配好了JDK,这次直接找一个JavaEE版本的Eclipse解压到我们想安装的目录下即可,用过 Eclipse+ADT 开发 Android 的同学都知道 Ecli

汇编语言1:初识汇编

我这里学习汇编语言的思路就是逆向C++源码. 先从最简单的一个程序入手: 为什么程序的开头两句总会是 push ebp mov ebp,esp ? 先来看一个程序: 这个程序调用fun()时,fun的汇编代码也是如此,开头调用这两句汇编: 其实,这里ebp中保存的是你当前的函数(main函数)的栈基址,当你进入一个子函数(func函数)的时候,你要使用这个子函数的栈空间,此时进入子函数的栈空间就要先保存当前函数的栈基址.将此时的 esp 赋予 ebp 以便后面用 ebp 来作为栈基并以此通过 [

iOS【安全攻防】初识汇编

今天我们来学习以下内容: 汇编概述 总线 进制 寄存器 我们在学习逆向开发之前,我们要了解一个基本的逆向原理.首先我们是逆向iOS系统上面的APP,那么我们知道,一个APP安装在手机上面的可执行文件本质上是二进制文件,因为iPhone手机本质上执行的指令是二进制,是由手机上的CPU执行的,所以逆向开发是建立在分析二进制上面. 一.汇编概述 1.汇编语言的发展 (1)机器语言 由0和1组成的机器指令(说白了是电信号) 加:0100 0000 减:0100 1000 乘:1111 0111 1110

Android之Http通信——1.初识Http协议

Android之Http通信--1.初识Http协议 引言: 今天是六一儿童节,先在这里给各位超龄儿童说声节日快乐哈~( ╯□╰ ),小猪也象征性地给群里的小朋友们派了红包-嗯,忙碌的五月最终过去了,做毕设,写论文,拍毕业照,答辩,辞职.各种各样的事,也算忙完了,好吧.小猪如今又在一家新的公司上班了.第三间公司了.你们肯定会认为小猪三心二意是吧,毕竟才差点儿相同毕业就换了那么多家公司,然后可能问我."小猪你什么时候跳第四间公司",哈哈,应该不会了哈,怎么说呢,事实上我还是非常专一的,毕

ES篇:(一)logstash初识

elasticsearch(官网)的发展历程省略..总所周知,它是目前主流的,最受欢迎的搜索引擎之一,可用于数据搜集分析,文档检索等等方面.而logstash是Elastic 公司旗下的一款日志搜索收集产品.一步一个脚印,楼主正在摸索着es+logstash+kibana的关系及运用(后续会引入docker和集群).为什么把logstash作为初识搜索方向的第一步呢?其实是基于这样考虑:logstash作为一款数据处理输出产品,用途广泛,不仅限于es方面.也可以和mysql,app,http,M

多年后再回头看C语言对未来职业的重大意义

以前录制的<C语言,好爽>的视频中都是在写windows上的C语言,昨天突然在linux上写了个C和C++程序,没想到居然收到许多迷惑的朋友在问"这有什么意义","直接在windows上用IDE爽多了"之类的话,当时我只能说:等你以后就知道了.这以后可能是5年后,可能是10年后,才会懂得,才会得到印证.但是时间过去了,机遇过去了,懂了又有什么意义?闲白了少年头,空悲切. 现在我根据自己的感觉总结一下原因,听得懂就最好了. C语言的重大意义不在于它本身能开