汇编语言的简要介绍
学习编程其实就是学高级语言,即那些为人类设计的计算机语言。
但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机实际的运行步骤。
计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就是低级语言,直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的运行步骤,就一定要学习汇编语言。
汇编语言是二进制指令的文本形式,与指令是一一对应的关系。比如,加法指令00000011写成汇编语言就是 ADD。只要还原成二进制,汇编语言就可以被 CPU 直接执行,所以它是最底层的低级语言。
汇编语言的产生
机器指令:1000100111011000
操作:寄存器BX的内容送到AX中
汇编指令:MOV AX,BX
汇编语言的组成
- 汇编指令
- 伪指令
- 其他符号
汇编语言的核心是汇编指令,它决定了汇编语言的特性。
CPU对存储器的读写
三类信息的交互:
地址信息、控制信息、数据信息
(通过地址总线、数据总线、控制总线)
机器码:101000000000001100000000
对应的汇编指令:MOV AX,[3]
含义:传送3号单元的内容到AX
地址总线
一个CPU有N根地址总线
这样的CPU最多可以寻找2的N次方个内存单元
数据总线
数据总线的宽度决定了CPU和外界的数据传送速度
控制总线
有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制
内存地址空间
(以8086PC机为例)
CPU
一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。
内部总线实现CPU内部各个器件之间的联系
外部总线实现CPU和主板上其他器件的联系
寄存器
8086CPU有14个寄存器
AX、BX、CX、DX通常用来存放一般性数据——通用寄存器
为了保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用(高8位寄存器和低8位寄存器)
几条汇编指令
MOV AX,18
将8送入AX
MOV AH,78
将78送入AH
ADD AX,8
将寄存器AX中的数值加上8
MOV AX,BX
将寄存器BX中的数据送入寄存器AX
ADD AX,BX
将AX,BX中的内容相加,结果存在AX中
16位结构的CPU
16位代表运算器一次最多可以处理16位的数据、
寄存器的最大宽度为16位、寄存器和运算器之间的通路是16位的
地址加法器
地址加法器合成物理地址的方法:
物理地址=段地址*16+偏移地址
段寄存器
提供段地址
CS和IP
CS和IP是8086CPU中最关键的寄存器,他们指示了CPU当前要读取指令的地址。
CS为代码段寄存器
IP为指令指针寄存器
8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行