今年大二,我选修了汇编语言程序设计这门课。
说实话,大一一年我已经接触到了C,C++,Python,JAVA等高级语言,深深体会到了高级语言对程序员本身带来的便利,但是我对于汇编语言这一底层语言的了解还是寥寥无几。到现在已经上了几周的课,我就在这里总结一下自己所学以及一些见解吧。
一、汇编语言的产生
汇编语言是早期的程序员发现机器语言的晦涩难懂后而开发出来的语言。汇编语言的主体是汇编指令,汇编指令是机器指令便于记忆的书写格式。
例如:机器指令1000100111011000 表示把寄存器BX的内容送到AX中,汇编指令则写成mov ax,bx。这样的写法便于阅读和记忆。
二、汇编语言的组成
汇编语言发展至今,有以下3类指令组成:
1、汇编指令:机器码的助记符,有对应的机器码。(核心)
2、伪指令:没有对于的机器码,由编译器执行。
3、其他符号:如 +、-、*、/等,由编译器识别,没有对应机器码。
三、关于cpu和存储器
cpu是计算机的核心部件,它控制整个计算机的运作并进行运算,想让一个cpu工作,就必须给它提供指令和数据,指令和数据在存储器中存放,也就是内存。存储器会被分成若干个存储单元,每个存储单元从0开始编号。1个存储单元可以存放一个byte,也就是8个二进制位。
cpu通过地址总线来指定存储单元,可见地址总线能传说多少个不同的信息,cpu就能对多少个存储单元进行寻址。
cpu与内存或其他器件之间的数据传送是通过数据总线来进行的,数据总线的宽度决定了cpu和外界的数据传送速度。
cpu对外部器件的控制是通过控制总线来进行的,在这里控制总线是一个总称,控制总线是一些不同控制线的集合,有多少根控制总线,就意味着cpu提供了对外部器件的多少种控制,所以控制总线决定了cpu对外部器件的控制能力。
四、寄存器
对于一个汇编语言程序员来说,cpu中的主要部件是寄存器,寄存器是cpu中程序员可以用指令读写的部件,程序员通过改变各种寄存器中的内容来实现对cpu的控制。不同的cpu,寄存器的个数,结构是不同的。8086cpu有14个寄存器,每个寄存器有一个名称,这些寄存器是:AX,BX,CX,DX,SP,BP,SI,DI,IP,PSW,CS,DS,SS,ES。
通用寄存器:
AX,BX,CX,DX 称作为数据寄存器:
AX (Accumulator):累加寄存器,也称之为累加器;
BX (Base):基地址寄存器;
CX (Count):计数器寄存器;
DX (Data):数据寄存器;
SP 和 BP 又称作为指针寄存器:
SP (Stack Pointer):堆栈指针寄存器;
BP (Base Pointer):基指针寄存器;
SI 和 DI 又称作为变址寄存器:
SI (Source Index):源变址寄存器;
DI (Destination Index):目的变址寄存器;
控制寄存器:
IP (Instruction Pointer):指令指针寄存器;
FLAG:标志寄存器;
段寄存器:
CS (Code Segment):代码段寄存器;
DS (Data Segment):数据段寄存器;
SS (Stack Segment):堆栈段寄存器;
ES (Extra Segment):附加段寄存器;
数据寄存器有 AX,BX,CX,DX 四个组成,
由于在 8086 之前的 CPU 为 8 位 CPU,所以为了兼容以前的 8 位程序,
在 8086 CPU 中,每一个数据寄存器都可以当做两个单独的寄存器来使用,
由此,每一个 16 位寄存器就可以当做 2 个独立的 8 位寄存器来使用了。
AX 寄存器可以分为两个独立的 8 位的 AH 和 AL 寄存器;
BX 寄存器可以分为两个独立的 8 位的 BH 和 BL 寄存器;
CX 寄存器可以分为两个独立的 8 位的 CH 和 CL 寄存器;
DX 寄存器可以分为两个独立的 8 位的 DH 和 DL 寄存器;
除了上面 4 个数据寄存器以外,其他寄存器均不可以分为两个独立的 8 位寄存器;
今天就先写到这,也算是对汇编语言有了些基本的认识。
曾经我也疑惑:现在的高级语言对用户更加友好为什么学校还要开设汇编语言这门课?现在我终于明白了,也许以后我们很少人会踏入汇编语言开发的行列,但是汇编语言对我们学习高级语言的启发和辅助作用是不可或缺的。
第一次写博客,认识浅显或是有错误之处还望指正!