[Hb] 读《汇编语言》I

读《汇编语言》 --王爽I第1至16章节。[2014.11.18 ~ 2014.12.22]

 

1 练习

实验1 ~ 16的练习笔记。

(1) [Hb-I] 查看CPU和内存 用汇编指令编程

(2) [Hb-III] 汇编程序的编译 连接 加载 执行

(3) [Hb-IV] 使用[bx]和loop

(4) [Hb-V] 编写 调试具有多个段的程序

(5) [Hb-VI] 使用[bx+ si(di) + idata]更灵活的访问内存

(6) [Hb-VII] 寻址方式在结构化数据访问中的应用

(7) [Hb-VIII] 转移指令 显示字符串

(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] 编写、应用中断例程

(14) [Hb-XIV] 访问CMOSRAM(端口)

(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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值