Java教程

汇编语言学习篇3——基础知识

本文主要是介绍汇编语言学习篇3——基础知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

说明
  本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
  QQ 群 号:513683159 【相互学习】
内容来源
  书籍:《汇编语言:基于Linux环境》、《汇编语言 第四版》
  

  汇编语言|基础知识
  汇编语言入门教程
  王爽《汇编语言》笔记(详细)

认识一个新朋友-计算机

  计算机,一种功能强大的工具。先不关心它的组成,只对它有个最基础的感性认识,那就是:非常的笨!它只认识两个数字:0和1,且不懂变通,完全听从我们的指令,会按照指令一成不变的执行,即使是错误的,所以我们的指令必须是逻辑严谨、语法严格。

编写程序要像计算机一样思考?(人与计算机思考方式一致)

  现代计算机功能强大,能够完成很多任务。如何命令计算机执行各种功能呢?
  自然是要给它命令指示,这就是需要编写程序,实际上编写程序就像是规划计划一样,即:步骤(先后次序)与测试(二选一的判断)。
  认识一个非常重要的观点:除了完全冲动的或精神病患者的行为之外,人类的任何一个决策都可以是归结为二选一,即:当面对多种选择时,在进一步思考,发现每一种选择最终只是二选一:是或不是。(故多种选择都是靠二选一进行堆砌起来)
  而计算机是人类发明的,故计算机的思考方式与人类相同,很多时候编写程序总是觉得应该要像计算机一样思考问题,其实就是要将问题思考的更加明确,审视一个复杂的决策,思考组成它包含的所有小决策。

二进制大法好,真的好(为什么选择二进制?)

  众所周知,计算机是使用二进制,它只认识0或1,故机器语言就是由二进制组成。那么一定要是二进制么?其实不是的,其实也有过其他进制的计算机。那么,为什么选择二进制呢?
  ①二进制足够表示,因为任何一个决策都可归结为二选一。
  ②电路容易实现且可靠,有电压表示1,无电压表示0,无需对电压大小继续分割(其他进制则需要),故外界干扰作用不大。物理上更易于实现存储
  ③运算简单便于逻辑判断,运算逻辑仅有三种,便于运算器等物理元件设计,更有专门数学逻辑理论支撑
  ④易于转化为其他进制,可将数据简化,即将4位二进制写成1位十六进制(减少数字的数量)

不以规矩,不能成方圆(单位的规定)

  二进制虽然简单,但数量庞大,若不加以规定,岂不是乱套了?且一位二进制也就仅能表示两种判断,只有多位二进制才可对应人类的多种符号,那多少位合适呢?这是历史的发展过程的,沿用至今的ASCII编码是七位保留一位故八位,而决定八位为一个字节的是由IBM为System/360设计了一套8位EBCDIC编码非常成功,最终有布赫霍尔兹提出。之后还有字、双字等概念。
  1字节(B/Byte) = 8位(b/bit/比特)【存储器容量的最小单元】

16位CPU 32位CPU 64位CPU
CPU 8086 i386(win32) AMD64(win64)
1字
(word)
2字节 4字节 8字节
1双字
(double word)
4字节 8字节 16字节
1四字
(quad word)
8字节 16字节 32字节
  可知:一个字等于多少个字节,与系统硬件(总线、cpu命令字位数等)有关

计算机:我是亲生(与人类相似)

  回想小学学习加法的场景:求解1+2=?,左手伸出一根手指,右手伸出两根手指(深怕自己忘记几根手指),然后把右手的两根手指去掉,左手加上两根手指,呀,算出来了,是3.
  是的,计算机也要这样去计算,计算机的 存储器 就是手指,CPU 就是大脑,控制左右手手指的变化控制单元【控制整个计算机运行:根据指令】,并进行数字的计算(运算单元【运算:根据数据】),大脑是通过神经( 总线 )去传递信息给手指,当然概要心脏( 时钟 )进行功能。
在这里插入图片描述

想象中的空间(存储器的结构)

  存储器在计算机结构中起到至关重要的作用,或许没有人类大脑记忆那般难以想象,但对于一个小小的芯片能够存储如此大量的数据还是不由的发出感叹,科技的创造力是如此的强大。
  计算机存储单元可存储一个Byte的数据,一个存储器可有128个存储单元.可如何确定取的是哪个数据呢?是不是每个数据块上都应该要标有对应的地址才能准备的取出想要的数据?
  这种感觉好像是去图书馆找书,想要哪本书,我需要查询一下对应的地址,是哪个房间的哪块区域的哪个书架上的哪层?最终可得到想要的书。
  所以存储器会包含两个信息:存储单元的地址和存储单元存储的数据
  每单独的RAM芯片(存储器)只有1个或4个数据管脚,故单个RAM芯片可能存不下一个字节数据,尽管可能包含6亿比特,故采取一个存储的字节分布在8个单独芯片,每一份字节中的一位采用同一地址,将8个芯片20地址管脚并联,即最终的结果:存储一个字节数据,会用到8个RAM芯片,且为同一地址,读取效果也相同。【现在这么简单的存储器系统已经不复存在】。下面为图示:
在这里插入图片描述

一位有能力又勤劳的首脑(CPU如何与设备交互?)

  CPU是计算机中的首脑,计算机中的一切都要听命于他,那么它是如何与员工(存储器、外设[peripheral])交互的呢?
  因为相距有一定的距离,自然是要通过电话(总线:一根根导线的集合)进行交流的,因为有很多员工,每个员工都配上电话实在是有些承受不起,这个使用只能取巧了(从逻辑上分),通过三个电话解决与所有员工的交互问题.
   控制总线器件的选择,读或写的命令(控制信息[指令],对外部器件的控制,总线的数量意味着CPU对外部器件多少种控制,即:决定CPU对外部器件的控制能力。
   地址总线存储单元的地址(地址信息),指定存储器单元,总线宽度(位数)决定能传送多少不同信息,就能对多少个存储单元进行寻址。
   数据总线:.读或写的数据(数据信息) [数据],传送数据,总线宽度决定CPU于外界数据传送速度,如:8根则一次一个字节,16根则一次两个字节。
  通过控制总线选择对那个员工进行交流,并且通过地址总线找到对应工作内容的数据利用数据总线将内容传给员工。
  虽所有信息均为二进制,但根据不同应用可分为指令与数据。

首脑的成长历程(CPU位数与核数的增加)

  8080、8085等CPU为8位机,
  8086等CPU为16位机,
  32位机,
  64位机。
  X位机究竟是表示什么呢?描述一下下面几个结构特性:
  1.运算器一次最多可处理X位数据。
  2.寄存器最大宽度为X位。
  3.寄存器和运算器之间的通路为X位。
  即:能够一次性处理、传输、暂存的信息最大长度为X位。
  一般情况下,64位兼容32位。

区别 32位 64位
运算速度
(数据总线)
处理器一次可提取4字节数据
(32bit)
处理器一次可提取8字节数据
(64bit)
寻址能力
(地址总线)
最大支持4G内存(2^32) 多达128G ~ 多达16TB内存(2^40~2^50)
CPU Intel 80386 (i386)等 Intel 的 Core i3、i5、i7 等

内存地址空间

  首脑(CPU)与员工(外设)进行交互时,也就是进行数据的读写操作。故与外设进行交互时也就是通过控制线进行内存读写命令。
  所谓的内存地址空间,即为能够控制内存的大小,受地址总线宽度限制,如:8086CPU总线宽度20,即可定位 2 20 2^{20} 220内存单元 = 1MB,若为32则内存空间最大为4GB。

汇编语言的诞生

  机器语言:机器指令的集合。(每一种微处理器都由自己的机器指令集)
  机器指令:机器可以正确执行的命令。(电子计算机的机器指令是一列二进制数字)
  使用机器语言去实现功能是非常恐怖的事情,难以辨别与记忆,这便有了汇编语言,以更接近人类记忆的书写格式。不过计算机可不认识汇编语言,这就需要一位翻译官(翻译程序:编译器)将汇编语言转换为机器语言。
  汇编指令是机器指令的助记符,同机器指令一一对应(每一种CPU都有自己的汇编指令集)。
  汇编语言的组成
     一:汇编指令:机器码的助记符,有对应的机器码。
     二:伪指令:没有对应的机器码,由编译器执行,计算机并不执行。
     三:其他符号:如:+、-、*、/等,由编译器识别,没有对应的机器码。
请添加图片描述

这篇关于汇编语言学习篇3——基础知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!