读《汇编语言》 --王爽I第1至16章节。[2014.11.18 ~ 2014.12.22]
1 练习
实验1 ~ 16的练习笔记。
(5) [Hb-VI] 使用[bx+ si(di) + idata]更灵活的访问内存
(8) [Hb-IX] 编写子程序(显示字符串、数值,除法溢出问题)
(9) [Hb-X] 课程设计I(寻址 数字转字符串 除法溢出 显示字符串)
(10) [Hb-XI] 标志寄存器cmp jb ja指令编程
(11) [Hb-II] push pop指令 中断时CPU的工作(中断的保护现场操作)
(12) [Hb-XII] 编写0号中断的处理程序
(13) [Hb-XIII] 编写、应用中断例程
(15) [Hb-XV] 安装新的int9中断例程
(16) [Hb-XVI] 编写包含多个功能子程序的中断例程(直接定址表)
2 剪辑
(1) 教学思想
任何不以循序渐进的方式进行的学习,都将出现盲目探索和不成系统的情况,最终学习到的也大都是相对零散的知识,并不能建立一个系统的知识结构。非循序渐进的学习,也达不到循序渐进学习所能达到的深度,因为后者是步步深入的,每一步都以前一步为基础。
(2) 学习汇编目的
学习汇编的两个个根本目的:充分获得底层编程的体验和深刻理解机器运行程序的机理。
(3) 二进制和高低电平
电子计算机的机器指令是一列二进制数字(逻辑上的抽象)。计算机将其转化为一列高低电平,以使计算机的电子器件受到驱动(计算机实际的工作的状态)。
(4) 汇编语言组成
至今的汇编语言由3类指令组成:
[1] 汇编指令:机器码的助记符,有对应的机器码。最终为CPU执行。
[2] 伪指令:没有对应的机器码,编译器根据伪指令来进行相关的编译工作,计算机并不执行。
[3]其它符号:如+、-、*、/等,由编译器识别,没有对应的机器码。
注意编译器执行和机器执行的区别。如拷贝代码到指定内存中时,编译器编译时的偏移地址可能并不是程序所需要的,此时需要特别指定被拷贝代码的参考偏移地址(org)。
(5) 存储芯片与内存地址空间
Figure1. PC机中各类存储器的逻辑连接
Figure2. 将各类存储器看作一个逻辑存储器
关于内存结构及组成可以查看《计算机组成原理》和自己对内存结构的总结和理解。
(6) 与栈关联的寄存器
任意时刻,SS:SP指向栈顶元素(push + pop)。8086CPU不保证我们对栈的操作不会越界,我们编程时要自己操心栈顶越界的问题,要根据可能用到的最大栈空间,来安排栈大小。
(7) DOS系统对.exe文件中的加载过程
[1]在DOS中直接执行first.exe时,正在运行的command(shell)程序将first.exe中的程序加载到内存;程序所在内存区的地址为ds:0,这个区域的前256字节中存放的是PSP,DOS用PSP来和程序进行通信;从256字节处向后的空间存放的是程序。
[2]CS:IP等寄存器的值备份,command设置CPU的CS:IP指向程序的第一条指令(程序入口),使程序得以运行;
[3]程序运行完毕后,CS:IP等寄存器的值复原,返回到command中。
(8) 程序获取空间的方法
程序获取空间的方法有两种,一是在加载程序的时候为程序分配(在源程序中定义段来进行内存空间的获取),再就是程序在执行的过程中向系统申请(C中的动态分配)。
(9) 代码段(程序入口)、数据段、栈段的由来
汇编源程序中,用“end start”说明程序的入口地址为“start”处,这个入口地址将被写入可执行文件的描述信息,可执行文件被加载入内存后,CPU的CS:IP被设置指向这个入口地址,从而开始执行程序中的第一条指令。标号“start”在“code”段中,这样CPU段中的内容就被当作指令来执行了。再在代码段中设置ss指向某段,那么这段就可以被当成栈来使用(使用push, pop指令时,ss和sp两个寄存器会自动配合),数据段同理。CPU是如何处理我们定义的段中的内容,是当作指令执行,还是当作数据访问,还是当作栈空间,完全依靠程序中的汇编指令,和汇编指令对CS:IP、SS:SP、DS等寄存器的设置决定的。
(10) 转移指令
jmp,jcxz, loop, 过程, 中断等都属于转移指令。
转移指令根据偏移地址使程序得到跳转,转移指令也提供同时更改段地址和偏移地址的方式进行跳转的格式。
(11) 无符号数进/借位 有符号数溢出
可能,看此书第11章标志寄存器比看微机接口更易明白。
(12) 8086开机安装中断例程过程
Figure3. 8086开机安装中断例程的过程
(13) 内中断过程
Figure4. 内中断过程
(14) CPU可直接读/写的对象
Figure5. CPU可直接读/写的三个对象
(15) 外中断过程
Figure 6. 外中断过程
(16) 中断
中断是对具有先后顺序的硬件操作所产生的事件的统一描述。中断源后,调用中断处理例程这个过程都是由硬件完成的(CPU完成中断过程)。
[2014.12.22 - 12:25]
R《Hb》Note Over.