1.1机器语言
第一代计算机语言为 机器语言 。那什么是机器语言呢?通俗一点的说法就是计算机能够读懂的语言,如下图所示:
linux系统展示机器语言源码.jpg1.2汇编语言的产生
由于机器语言存在 可读性差、难记忆、易错、可移植性差 等特点,所以人们极力想寻求一种方法来提高编程的效率。这时候汇编语言就在这种背景下产生了
linux系统展示汇编语言源码.jpg汇编语言的主题是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上面。汇编指令是机器指令便于书写的格式
例如机器指令 1000100111011000 表示把寄存器Bx的内容传送到AX中。汇编指令则写成mov ax,bx。这样的写法与人类的语言接近,便于阅读和记忆。(寄存器简单来说是CPU中可以存储数据的器件,一个CPU可以有多个寄存器。AX是其中一个寄存器的代号,BX是另外一个寄存器的代号。更详细的内容本书后面内容有详细的介绍)
#表示把寄存器Bx的内容传送到AX中
mov ax,bx
此后程序员们能够用汇编语言快乐的Coding了。可是计算机能够读懂的只有机器语言。那怎么能够让计算机读懂汇编语言呢?这时候,就需要一个能够将汇编指令转换成机器指令的翻译程序,这样的程序我们称其为 编译器。程序员用编程语言写出程序,再借助编译器将其编译为机器码,由计算机最终执行。整个过程如下图所示:
汇编语言工作原理1.3汇编语言的组成
汇编语言发展至今,有以下3类指令组成。
- 汇编指令:机器码的助记符,有对应的机器码。
- 伪指令:没有对应的机器码,由编译器执行,计算机并不执行。
- 其他符号:如 +、-、、/*等,由编译器识别,没有对应的机器码。
汇编语言的核心是汇编指令,它决定了汇编语言的特性。
1.4存储器
CPU是计算机的核心部件,它控制整个计算机的运作并进行运算。要想让一个CPU工作,就必须向它提供指令和数据。指令和数据在存储器中存放,也就是我们平时所说的内存。在一台PC机中内存的作用仅次于CPU,离开了内存,性能再好的CPU也无法工作。好比鱼离开了水无法呼吸。
磁盘不同于内存,磁盘上面的数据或者程序如果不读到内存中,就无法被CPU使用。要灵活的运用汇编语言编程,我们首先要了解CPU是如何从内存中读取信息,以及向内存中写入信息的。
1.5指令和数据
指令和数据是应用上的概念。在内存或者磁盘上,指令和数据没有任何区别,都是二进制信息。CPU在工作的时候把有的信息看做指令,有的信息看做数据,为同样的信息赋予了不同的意义。就好比扑克牌,在包装盒里面没有任何区别,在打牌的时候就有了不同的作用和意义。
例如,内存中的二进制数字1000100111011000,计算机可以把它看作大小为89d8H的数据来处理,也可以将其看作指令来执行:
// 内存中的二进制数字**1000100111011000**,计算机可以把它看作大小为89d8H的数据来处理,也可以将其看作指令来执行:
mov ax,bx
1.6存储单元
存储器被划分成若干个存储单元,每个存储单元从0开始编号,例如一个存储器有128个存储单元,编号从0-127,如下图所示:
那么一个存储单元能存储多少信息呢?我们知道计算机的最小信息单位是bit,也就是一个二进制位,8个bit组成一个Byte,即8个二进制位。一个存储器有128个存储单元,它可以存储128个Byte。
微机存储器的容量是以字节为最小单位来计算的。对于拥有128个存储单元的存储器,我们可以说它的容量为128个字节。对于大容量的存储器一般还用以下单位来计算容量:
- 1KB=1024B
- 1MB=1024KB
- 1GB=1024MB
- 1TB=1024GB
磁盘的容量单位同内存的一样,实际上以上单位是微机中常用的计量单位。
1.7CPU对存储器的读写
以上讲到,存储器被划分成多个存储单元,存储单元从零开始顺序编号。这些编号可以看作存储单元在存储器中的地址。就像一条街,每个房子都有门票编号。
CPU要从内存中读取数据,首先需要制定存储单元,也就是说它要先确定它要读取哪一个存储单元中的数据,好比你要找一个人,先要确定他住在哪个房子里面。
可见,CPU要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行下面3类信息的交互。
- 存储单元的地址(地址信息)
- 器件的选择,读或写的命令(控制信息)
- 读或写的数据(数据信息)
那么CPU是通过什么将地址、数据和控制信息传到存储器芯片中的呢?电子计算机能处理、传输的信号都是电信号,电信号当然要用导线传送。在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。总线从物理上来讲,就是一根根导线的集合。根据传送信息的不同,总线从逻辑上又分为3类,地址总线、控制总线和数据总线。
CPU从3号单元中读取数据的全过程如下图所示:
1 cpu通过地址总线将地址信息3发出
2 cpu通过控制总线发出内存读取命令
3 存储器将3号单元中的数据8通过数据线传送到cpu中
从上面的案例中我们知道了CPU是如何进行数据的读写的。可是如何命令计算机进行数据的读写呢?要让一个计算机活着微处理器工作,应向它输入能够驱动它进行工作的电平信息(机器码)
对于8086CPU,下面的机器码,能够完成从3号单元读取数据。
机器码:101000010000001100000000
含义:从3号单元读取数据送入寄存器AX
网友评论