学习汇编语言你需要了解的基础知识01

栏目: 编程语言 · 发布时间: 6年前

内容简介:大概有很多童鞋会说,现在这个时代,学汇编还有啥意思?现在写网站有java、.net、php,写应用有c、c++,还有谁在用汇编来写程序。确实是这样,现在软件开发确实绝大多数都在使用高级语言来开发,包括现在做硬件也大多是c语言了。但是汇编语言是学习很多其它知识(数据结构、操作系统、编译原理等)的重要基础,所以为了能够在编程的道路走的更远,学习汇编还是很有必要的,因为汇编是人与计算机沟通最直接的方式(不要和我说啥机器语言,那玩意你看的不累嘛),它描述了机器最终要执行的指令序列。当然,每一种不同的处理器都有其独

大概有很多童鞋会说,现在这个时代,学汇编还有啥意思?现在写网站有 java 、.net、php,写应用有c、c++,还有谁在用汇编来写程序。确实是这样,现在软件开发确实绝大多数都在使用高级语言来开发,包括现在做硬件也大多是 c语言 了。

但是汇编语言是学习很多其它知识(数据结构、操作系统、编译原理等)的重要基础,所以为了能够在编程的道路走的更远,学习汇编还是很有必要的,因为汇编是人与计算机沟通最直接的方式(不要和我说啥机器语言,那玩意你看的不累嘛),它描述了机器最终要执行的指令序列。

当然,每一种不同的处理器都有其独特的汇编指令,我们只通过其中一种结构简单的处理器来学习汇编就够了,毕竟我们的最终目的不是学用汇编编程,而是深入了解机器运行程序的原理,充分获得底层编程经验而已。

下面所讲述的内容都基于8086PC,虽然8086只存在于历史之中了,相信绝大多数的同学都没见过那玩意。但是只要是Intel兼容的系列都可以以8086的方式进行工作。放心,在开始写程序前,我会教大家搭建8086的开发环境的。不过在这之前,我们还是需要知道一些基础知识的。

机器语言

啥是机器语言?机器语言就是机器指令的集合。机器指令是一大串的二进制,计算机将它们转换成一列的高低电平来驱动电子器件进行运算。

说了那么多,还是迷迷糊糊的,我们还是直接来看两个案例吧:

// 在8986CPU完成运算:s=768+12288-1280
101100000000000000000011
000001010000000000110000
001011010000000000000101

我去,看到这一串代码我就懵了,如果不小心把其中一个0写错了,要调试起来,得花费多少时间?况且这还是最简单的一个运算,如果是一个大应用的话,估计找个错都得好久时间把。

学习汇编语言你需要了解的基础知识01

图上就是最早期的计算机程序,程序员们通过在纸上打洞来书写程序:1打孔,0不打孔,再将程序通过纸带机输入到计算机中。是不是突然觉得我们现在好幸福,有各种IDE,有各种智能提示,语法高亮以及强大的debug。

汇编的产生

是不是看过上面的代码后,头都大了几圈?不只是你,包括那个时代的前辈们也对这种编程方式深恶痛绝,然后咋办呢?大神们就通过一些简单直观的单词来代替010101。例如:

// 将寄存器BX的内容送到AX中
MOV AX, BX

是不是要比上面的那一大串1和0要清晰明了多了?这里我们不得不佩服先辈们的智慧。

于是,那个时期的 程序员 们,就愉快的用汇编来编写程序了。但是你有没有想过,计算机只认识机器语言,我们写的汇编它并不认识。就像我和老外沟通一样,我不会英文,他不会中文,那咋办?当然是请出我们的翻译官大人了。这里的翻译官大人就是我们的编译器了。我负责写汇编,再由翻译官将汇编翻译成机器语言。

学习汇编语言你需要了解的基础知识01

上面的图就是使用汇编开发软件的整个流程了,手绘的图,丑点就丑点把。

汇编的组成

汇编语言主要是由下面几点组成的:

  • 汇编指令:机器码的助记词,有对应的机器码
  • 伪指令:没有对应的机器码,由编译器执行,计算机并不执行
  • 其它符号:如+、-、*、/等。由编译器识别,没有对应的机器编码。

其实汇编语言的指令不多,语法也简单,为什么汇编会比高级语言更难呢?那是因为汇编我们是直面计算机底层,所以我们要做的工作很多,但是高级语言已经帮我们做好了这些,我们不需要太过于操心底层的东西,只需要关注业务即可。

想要学好汇编,计算机的各个组成部分我们是必须要了解的。

存储器

如果把计算机比喻成一个人的话,CPU是我们的大脑,而存储器则是我们大脑中的记忆部分。如果人没有了记忆,即使你有再聪明的大脑,也无法进行思考。所以计算机要想工作的话,是离不开存储器的。要灵活的使用汇编,则必须了解CPU是怎样从内存中读写数据的。

上面说的存储器是内存,而不是我们的磁盘。

指令和数据

指令和数据是应用上的概念,因为对于计算机来说,指令和数据是没有啥区别的,它们都是一串存储在计算机上的二进制信息。CPU会根据不同的场景来区分具体是数据还是指令。

存储单元

存储器划分为多个存储单元,每个存储单元从0开始编号。

计算机中最小的单位bit(一个二进制位),8个bit组成1Byte(字节),微机存储器的存储单元可以存储1个字节(8bit),如果一个存储器有128个存储单元,则可以存储128B的数据。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Foundation Web Standards

Foundation Web Standards

Jonathan Lane、Steve Smith / Friends of ED / 21st July 2008 / $34.99

Foundation Web Standards explores the process of constructing a web site from start to finish. There is more to the process than just knowing HTML! Designers and developers must follow a proper proces......一起来看看 《Foundation Web Standards》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换