竹笋

首页 » 问答 » 环境 » 一步步教你编写汇编程序
TUhjnbcbe - 2023/11/1 21:28:00

什么是机器语言?

机器语言就是由二进制数字构成的程序,CPU可以直接对其解释、执行。

汇编语言、C语言、Java、BASIC等编程语言编写的程序,也都需要先转换成机器语言才能被执行。机器语言有时也叫作“原生代码”(NativeCode)。

本篇文章我们就来学习一下如何编写汇编语言,汇编语言是低级语言,所以它是最接近机器语言的编程语言。

学习汇编语言,能让你更深刻的理解计算机的运行机制和原理,使你犹如拨云见日,找到长期困惑着自己的问题的答案,不仅能因“我能看懂程序了”而获得成就感,更能因发现“计算机原来很简单啊”而信心倍增。

使用汇编语言编写一段程序然后让计算机运行你编写的程序,你就知道计算机是如何把汇编语言转换成机器语言执行的。

你可能会问,我们为什么不直接使用机器语言编写程序呢?原因就是机器语言是一堆的0和1的组合,但是每个组合都是有特定的含义的指令或数据,所以对人来说,如果只看0和1的话很难判断出各个组合都表示什么。

简单地说,就是机器语言不适合人类书写和阅读。

于是就有人发明了汇编语言,可以用一些英文单词或者英文简写来表示指令功能,这种类似的英语单词叫作“助记符”,使用助记符的编程语言叫作“汇编语言”。

无论是使用机器语言还是汇编语言,所实现的功能都是一样的,区别只在于程序是用数字表示,还是用助记符表示。

也就是说,如果理解了汇编语言,也就理解了机器语言,更进一步也就理解了计算机的原始的工作方式。

汇编语言的语法十分简单,以至于语法只有一个,即把“标签”“操作码(指令)”和“操作数(指令的对象)”并排写在一行上,仅此而已。

如下是一段汇编语言:

标签的作用是为该行代码对应的内存地址起一个名字。

编程时如果总要考虑这一行的内存地址是什么?就会很不方便,所以在汇编语言中用标签来代替地址。用汇编语言编程时可以在任何需要标签的地方贴上名称任意的标签。

在上述代码程序中,使用了名称为“LOOP:”的标签,操作码就是表示“做什么”的指令。

因为用助记符表示的指令是英语单词的缩写,比如LD是Load(加载)的缩写,所以多多少少能猜出其中的含义。汇编语言中提供了多少种助记符,CPU就有多少种功能。

比如Z80CPU的指令全部加起来有70条左右。

CPU的寄存器、内存地址、I/O地址或者直接给出的数字都可以作为操作数。

如果某条指令需要多个操作数,那么它们之间就要用逗号分隔。操作数的个数取决于指令的种类。也有不需要操作数的指令,比如用于停止CPU运转的HALT指令。

汇编语言的语法和英语祈使句的语法很像。对比英语的祈使句Givememoney和汇编语言的语句,就可以看出在英语的祈使句中,一开头放置了一个表示“做什么”的动词,这个动词就相当于汇编语言中的操作码。

在动词后面放置了一个表示“动作作用到什么上”的宾语,这个宾语就相当于汇编语言中的操作数。

因为程序的作用是向CPU发出指令,而且编程语言又是由说英语的人发明的,所以编程语言与英语祈使句类似也就不足为奇了。

构成机器语言的是二进制数,而在汇编语言中,则使用十进制数和十六进制数记录数据。若仅仅写出这样的数字,表示的就是十进制数;而像H这样在数字末尾加上了一个H(H表示Hexadecimal,即十六进制数),表示的就是十六进制数。

这里先把主要的指令列在如下表中,请大家粗略地浏览一下。

在浏览的过程中请注意这些指令的分类,按功能这些指令可以分成运算、与内存的输入输出和与I/O的输入输出三类。

这是因为计算机能做的事也只有输入、运算、输出这三种了。操作数表示的是指令执行的对象。

欢迎

1
查看完整版本: 一步步教你编写汇编程序