汇编语言(8086cpu)
恩,学习一门课程,我觉得应该有一定的条理性,而且自己要勤加思考才能学好,条理性:最好就是先整体的介绍一下全本书,然后再详细的介绍各个章节,而且,书籍的章节安排目录有一定的条理性,是渐进式的,前面的学习,为后面的内容做好了铺垫,打好了基础。不能随便排版(深入理解计算机系统是我读过数里面最好的)
读书教材:王爽的《汇编语言》教材比较好。
下面在阅读了三章以后写一下自己的收获。
汇编语言:基于底层的一门语言。在学习这本书时,学过计算机组成原理会对这本书的学习起到良好的作用。
首先,我们来了解一下计算机的组成。现在的计算机一般都是冯诺依曼型计算机:由五部分组成:输入设备,输出设备,运算器,控制器和存储器。它们之间由总线进行连接。
其实,计算机就是一堆物理原件,他们之间相互组合,通过总线连接,最后形成计算机(裸机)。
计算机最重要的一部分是cpu。
计算机用来处理数据的。但是数据如何存储在计算机里呢?于是应需求产生存储系统:有主存,辅存等。那数据在计算机里如何表示呢?就产生进制的讨论。最好的就是二进制。so,计算机中所有的数据,指令都用二进制表示(二进制用高低电平来转化表示)
所有的信息,都有相应的对应表(对应规则)。
计算机来处理信息:数据,指令等等。
处理指令,那么,如何来执行指令?如何在内存中确定读取的数据是不是指令?如何确定指令的长度,什么时候指令终止?
在了解这些之前,先明白如何在内存中来确定读取的是不是指令?但是如何来确定要读取的地址呢?
8086CPU地址确定:物理地址=段地址*16 偏移地址。(就是说先确定一个参考点,然后确定相对于参考点的坐标)。段地址存放于段寄存器里,偏离地址放在某个地方(不同的信息,放在不同的位置)。指令:段地址放在数据段CS里,偏移地址放在指令指针寄存器IP里,在内存中的物理地址由CS:IP确定(CS*16 IP)
明白了如何确定指令在内存中的位置后,我们来讨论如何来传输,执行指令?
简化来说:
1.CS:IP在内存中读取指令放到指令缓冲器中,
2.IP变化,指向下一条指令。
3.执行指令,转向步骤1.
注: cpu内部有寄存器(为了加快读取信息,加速):4个数据寄存器(ax,bx,cx,dx),2个变址寄存器(di,si),2个指针寄存器(sp,bp),4个段寄存器,1个指令指针寄存器和1个符号寄存器,共14个。
处理数据:和CPU处理指令类似,数据的地址确定:DS*16 偏移地址[...]
栈:计算机中,堆栈段,由一段连续的内存地址,起始地址是16的倍数的一段内存组成。堆栈段最大为64k。
那么如何确定堆栈段?如何读取堆栈段中的数据?栈顶元素?空栈如何表示?
与上面的确定方法类似:SS:SP, 栈顶元素的变换是从高地址到低地址的方向增长。 空栈:栈顶指针指向最高地址的下一个存储单元。
注:cpu里面的段寄存器不能参加算术运算(就是说不能直接赋值),必须添加一个中间寄存器(就像两个值交换一样)。
·····················································································································································
以后就是要写自己的第一个汇编程序了,未完待续。。。。。