一起来编写汇编语言

1.汇编语言的产生

我们都知道,计算机能够处理的语言只有机器语言,也就是只用0和1两个二进制数书写的编程语言。也就是说,早期的程序员如果想要编程,就要将0,1数字编写的程序代码打在纸带或者卡片上,1打孔,0不打孔,再将程序通过制袋机或者卡片机输入计算机,进行运算。我们可想而知,当时的程序员是多么厉害。但是他们很快发现编写的都是0,1很难辨别和记忆,因为程序员要面对的是01010100011...的数字,稍微错一个数字也不太好发现,因此,就产生了汇编语言。
着便是汇编语言的产生。

2.汇编语言的基础知识

首先,我们先了解一些基本概念:

  1. 机器语言
    所谓机器语言,就是只用0和1两个二进制数书写的编程语言。它有的时候也叫作原生代码(Native Code)。这里需要注意,只要CPU种类不同,对机器语言的解释也就不同。
  2. 编译器
    由于计算机只能读懂机器指令,所以就需要一个能够将汇编指令转换成机器指令的翻译程序,这样的程序我们称其为编译器。程序员用汇编语言写出源程序,再用汇编编译器将其翻译为机器码。就像我们写的Java,OC,等等,都是由编译器最终转换成01代码,最后由计算机执行。
  3. 时钟信号的频率
    由时钟发生器发送给CPU的电信号的频率。单位是MHZ(兆赫兹 = 100万回/秒)。时钟信号是0和1两个数之间反复变换的电信号,类似于滴答滴答左右摆动的钟摆一样。通常我们把发出一次滴答的时间称作一个时钟周期。

简单先了解这么几个概念,接下来让我们正式走进汇编语言。先来看看下面一段代码:

LD A,207
OUT(2),A
LD A,255
OUT(2),A

这样的一段代码,初次见到我们肯定不太理解其意思。它就是汇编语言。我们现在在简单分析一下这段代码(不解释功能):
类似于LD、OUT这种类英语或者英语单词的东西,我们叫它:
助记符
它是根据指令功能的单词起一个相似的昵称,并将这个昵称做一个1对1的映射,而与其对应的就是0和1的组合。
那什么叫汇编语言呢?顾名思义,就是使用助记符的编程语言叫做“汇编语言“。
汇编语言的语法
汇编语言的语法很简单,相比我们学的OC、Java等语言,它的语法只有一个:把标签、操作码(指令)和操作数(指令的对象)并排写在一行。
举个简单的例子:

标签      操作码     操作数
          LD       A,207
          OUT      (2),A
LOOP:     IN       A,(0)
          OUT      (1),A
          JP       LOOP

这便是一个汇编代码(没有实际意义)。这里的标签就是给该行代码对应的内存地址起个名字,下次想要跳转到该行代码的时候可以直接使用标签跳转。这里需要注意:
机器语言是二进制数,而汇编语言则是使用十进制或者十六进制数来记录数据。
接下来,就让我们看一下Z80 CPU的主要指令:

这里需要注意一下:
num表示的是数值,(num)表示的是num的地址
reg表示的是寄存器,(reg)表示存储在名为reg的寄存器中的地址。
这里说道了寄存器,其实寄存器就是CPU内部存储数据的地方。Z80 CPU中所带的寄存器有:
A、B、C、D、E、F、H、L、IR、 IX、 IY、 SP、 PC。
在汇编语言中,可以将寄存器的名字指定为操作数
接下来让我们简单分析前面的那一段代码。
LD A,207:就是把207写入到寄存器A
OUT (2),A:就是把寄存器A中的值写入到地址2中
IN A,(0):从地址0中读出数据,存放到寄存器A中
OUT (1),A:把寄存器A中的值写入到地址1中
JP LOOP:跳转到LOOP:标签,循环执行。

刚才也说了,计算机只能认识机器语言,所以我们刚才写的汇编语言还需要转换为机器语言才能运行。接下来让我们先看一个表格:

也就是说,我们按照上面的转换方法就可以将汇编语言转成机器语言。例如
LD A ,207 ,转成机器语言就是00111110 11001111
JP LOOP,转成机器语言就是: 11000011 num,这里的num是地址,这里注意需要用16比特的二进制数替代作为内存地址的num,也就是00000000 00010000 (也就是00010000假如是IN A,(0)的地址,扩充之后就是00000000 00010000),因此JP LOOP的机器语言就是:
11000011 00010000 00000000。
这里你也许会疑惑,num的八个0怎么跑后面了呢?
这里需要注意,将一个2字节的数据存储到内存时,存储顺序是低八位在前、高8位在后,也叫小端序。与此相反的叫大端序。CPU种类不同,端序也不同,Z80用的小端序,因此将低八位放到了前面,高八位的00000000放到了后面,就成了:11000011 00010000 00000000。
至此,我们就成功的将汇编语言转换成了机器语言,其他的助记符到机器语言的转换可以自行搜索查看。

posted @ 2017-03-07 22:10  zhanggui  阅读(3684)  评论(4编辑  收藏  举报