macOS汇编学习日志(一):基础知识

macOS汇编学习日志(一):基础知识

先打好地基。

图 / hou

正式进入汇编语言的学习。

参考书籍:《汇编语言》王爽


第零章 前言(题外话

每当我拿到一本书,在开始阅读之前,我都喜欢去翻阅一下前言。

我认为,一本书的前言不仅仅是作者撰写完毕或出版前的感想,它还能体现出作者是带着怎样一种心情写书的,甚至有的时候感觉通过看前言就能大致猜测到这本书的特点。

而我觉得这本书的前言,真的是一针见血啊(扶额)

你也许会问:“我们不是一直以循序渐进的方式学习吗?有哪本书不是从第一章到最后一章,又有哪门课不是从头讲到尾的呢?”

一本书从第一章到最后一章,一门课从头到尾,这是一个时间先后的问题,这并不等于就是以循序肩颈的方式在学习。我们是否有这样的感受?想认真地学习一门较难的课程,可是却经常看不懂书上的内容;有时觉得懂了,可又总有一种不能通透的感觉,觉得书上的内容再反复看,也不能深入下去了。这些情况都说明,我们并未真正以循序渐进的方式学习。

希望这本书也能像前言一样,直击灵魂。


第一章 基础知识

每一种微处理器都有自己的机器指令集。

汇编语言的主体是汇编指令


汇编语言有三类指令:

  1. 汇编指令:机器码的助记符,有对应的机器码
  2. 伪指令:无对应机器码,由编译器执行,计算机不执行
  3. 其他符号:如四则运算符,由编译器识别,无对应机器码

首先要了解CPU如何从内存中读取信息,向内存中写入信息。

指令和数据可能值是一样的,但CPU工作时将其赋予了不同了意义。

二进制数1000100111011000,89D8H是数据,

mov ax,bx(传送寄存器BX的内容到AX)就是程序。


假设储存器有128个储存单元,那么编号就是0~127。一个储存单元可以储存1个字节。


CPU要从内存中读数据,首先要指定储存单元的位置。另外由于微机中不只有存储器,因此CPU在读写数据时还有指明:对哪个器件进行操作、进行哪种操作。

因此CPU要进行数据的读写,必须和外部器件(芯片)进行3类信息的交互:

  • 存储单元的地址(地址信息)
  • 器件的选择,读或写的命令(控制信息)
  • 读或写的数据

CPU通过电信号进行信息传输,而总线就是连接CPU和其他芯片的导线的集合。而总线分为三类:

  • 地址总线
  • 数据总线
  • 控制总线

地址总线

假设一个CPU有10根地址总线,而导线能传送高地电平(即0或1),那么10根导线就能传送10位二进制数据,而10位二进制数可以表示2^10个数据:最小数为0,最大数为1023。

一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N,其最多可以寻找2^N个内存单元。


数据总线

数据总线的宽度决定了CPU和外界的数据传送速度:如果总线一次传输不完数据,将会继续传输直到传输完成。

比如8088CPU分两次传送89D8,第一次传送D8,第二次传送89。


控制总线

CPU对外部器件的控制通过控制总线进行。而控制总线是个总称,控制总线时不同控制线的集合,控制总线的数量意味着CPU对外部器件提供有多少种控制。即,控制总线的宽度决定了CPU对外部器件的控制能力

对于内存的读或写命令,是由几根控制线综合发出的,其中有两根:

  • 读信号输出:负责由CPU向外传送信号,CPU向其输出低电平表示将要读取数据
  • 写信号输出:反之

每个CPU都有许多管脚,这些管脚和总线相连(或者说这些管脚引出总线)。这三种总线的宽度标志了这个CPU的不同方面的性能:

  • 地址总线的宽度:CPU的寻址能力
  • 数据总线的宽度:CPU与其他器件进行数据传送时一次数据传送量
  • 控制总线的宽度:CPU对系统中其他器件的控制能力

CPU内存地址空间:CPU可寻到的内存单元。

PC机主板上的核心器件和一些主要器件,通过三种总线相连。器件有:CPU、存储器、外围芯片组、扩展插槽(RAM内存条和各类接口卡)等。

外部设备由插在扩展插槽上的接口卡直接控制(而不是CPU),扩展插槽通过总线和CPU相连,因此接口卡同样与CPU相连。CPU通过控制接口卡来实现对外设的简介控制。

即:CPU ==总线==> 接口卡 ====> 外设


各类存储器芯片

存储器芯片从读写属性上看分两类:

  • 随机存储器(RAM):可读可写,但必须带点存储,关机后内容丢失
  • 只读存储器(ROM):只能读取不能写入,关机内容不丢失。

从功能和连接上分以下几类:

  • 随机存储器:用于存放供CPU使用的绝大部分程序和数据。主随机存储器一般由主板上的RAM插在扩展插槽上的RAM
  • 装有BIOS(基本输入/输出系统)的ROM:存有厂商提供的软件系统,通过其利用相应的硬件设备进行最基本的输入、输出
  • 接口卡上的RAM:某些接口卡需要对大批量输入、输出数据进行暂时存储,例如显存。

内存地址空间

虽然上述存储器在物理上是独立器件,但以下是相同的:

  • 都和CPU总线相连
  • CPU对他们读/写都通过控制线发出内存读写命令

即CPU将其都当作内存对待,看作若干存储单元组成的逻辑存储器(即一体的内存地址空间)。

汇编面对的是内存地址空间!

每个物理存储器在该逻辑存储器中占有一个地址段(地址空间)。CPU在这段空间中读写数据,实际就是在相对应地物理存储器中读写数据。

PS:CPU向ROM地址空间的内存单元进行写入数据的操作是没有结果的。

内存地址空间大小受CPU地址总线宽度的限制。

另外,我们在某类存储器中读写数据的时候,必须知道它第一个单元和最后一个单元的地址,才能保证读写操作按预期进行。

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.