目录 第12章内中断 25 15.2外中断信息 153PC机键盘的处理过程…63 121内中断的产牛… 54编写it9中断例程 12.2中断处理程序 155安装新的int9中断例程 123中断向量表……26 124中断过程… 实验15安装新的int9中断例程 指令系统总结 274 125中断处理程序 12.6除法错误中断的处理 第16章直接定址表. 12.7編程处理0号中断 16.描述了单元长度的标号…1276 128安装……232 162在其他段中使用数据标号 235 6.3直接定址表 210设置中断向量 238164程序入口地址的育接定址表,…285 12.11单步中断 实验16编写包含多个功能子程序的中 12.12响应中断的特殊情况 断例程. 实验12编写0号中断的处理程序…240第17章使用B0S进行键盘输入和 第13章int指令… 24 磁盘读写 13.1int指令 17.1int9中断例程对键盘输入的处理,290 13.2编写供应用程序调用的中断例程242 17.2使用intl6h中断例程读取 13.3对int、iret和栈的深入理解……245 键盘缓冲区 134BoS和DOS所提供的中断例程,247 173字符串的输入 13.5BoS和DoS中断例程的 174应用int13h中断例程对磁盘 安装过程 248 进行读写 298 136BOs中断例程应用.…248 实验17编写包含多个功能子程序的 13.7DOS中断例程应用 中断例程 实验13编写、应用中断例程……51 课程设计2 第14章端口 …254附注 304 14.!端口的读写…… 附注1hnte系列微处理器的三种 142 CMOS RAM芯片 255 工作模式.… 43sh和shr指令 附注2补码 44 CMOS RAM中存储的时间信息……258 注3汇编编译器( masm. exe)对jmp的 实验14访问 CMOS RAM…260 相关处理 第15章外中断 附注4用栈传递参数 附注5公式证明 51接口芯片和端口
第1章基础知识 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效 地应用汇编语言对其编程。在本章中,对硬件系统结构的问题进行一部分的探讨,以使后 续的课程可在-个好的基础上进行。当课程进行到要补充新的基础知识关于编程结构或 其他的)时候,冉对相关的基础知识进行介绍和探讨。本书的原则是,以后用到的知识,以 后再说。 在汇编课程中不对硬件系统进行全面和深入的研究,因为这不在本课程的范围之内 关于PC机及CPU物理结构和编程结构的全面研究,在《微机原理与接口》中进行;对于 计算机-般的结构、功能、性能的研究在一门称为《组成原理》的理论层次更高的课程中 进行。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活地控制系 统进行工作。 1.1机器语言 说到汇编语言的产生,首先要讲一下机器语言。机器语言是机器指令的集合。机器指 令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字 计算机将之转变为-列高低电平,以使计算机的电子器件受到驱动,进行运算。 上面所说的计算机指的是可以执行机器指令,进行运算的机器。这是早期计算机的概 念。现在,在常用的PC机中,有个芯片来完成上面所说的计算机的功能。这个芯片就 是我们常说的 CPU(Central Processing Unit,中央处理单元),CPU是一种微处理器。以后我 们提到的计算机是指由CPU和其他受CPU直接或间接控制的芯片、器件、设备组成的计 算机系统,比如我们最常见的PC机。 每一种微处理器,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制, 使它工作。所以每一种微处理器都有自已的机器指令集,也就是机器语言。 早期的程序设计均使用机器语言。程序员们将用0、1数字编成的程序代码打在纸带或 卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。 应用8086CPU完成运算s=768+12288-1280,机器码如下 101100000000000000000011 000001010000000000110000 001011010000000000000101 假如将程序错写成以下这样,请读者找出错误。 101100000000000000000011 000001010000000000110000 000101101000000000000101
汇编语言 要书写和阅读机器码程序不是件简单的工作,要记住所有抽象的二进制码。上面只 是一个非常简单的小程序,就暴露了机器码的晦涩难懂和不易查错。写如此小的个程序 尚且如此,实际上个有用的程序至少要有几十行机器码,那么,情况将怎么样呢? 在显示器上输出“ welcome to masm”,机器码如下 00011110 101110000000000000000000 01010000 101110001100011000001111 1000111011011000 1011010000000110 011000000000000 1011011100000111 101110010000000000000000 1011011000011000 1011001001001111 1100110100010000 1011010000000010 1011011100000000 1011011000000000 1011001000000000 1100110100010000 1011010000001001 10001101000101100010101000000000 1100110100100001 1011010000001010 10001101000101100011000100000000 1100110100100001 011010000000110 1011000000010100 1011011100011001 1011010100001011 1011000100010011 1011011000001101 1011001000111100 1100110100010000 1101010000000010 1101011100000000 1101000000001100 1101001000010100 1100110100010000 1011010000001001 10001101000101100000000000000000 1100110100100001 11001011 看到这样的程序,读者会有什么感想?如果程序里有一个“1”被误写为“0”,又如 何去查找呢? 1.2汇编语言的产生 早期的程序员们很快就发现了使用机器语言带来的麻烦,它是如此难于辨别和记忆 给整个产业的发展带来了障碍。于是汇编语言产生了
第1章基础知识 汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上。汇 编指令是机器指令便于记忆的书写格式 例如:机器指令1000100111011000表示把寄存器BX的内容送到AX中。汇编指令则 写成 mov ax.bx,这样的写法与人类语言接近,便于阅读和记忆。 操作:寄存器BX的内容送到AX中 机器指令:100010011101100 汇编指令: mov ax.bx (寄存器,简单地讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器。AX 是其中一个寄存器的代号,BX是另一个寄存器的代号。更详细的内容我们在以后的课程中 将会讲到。) 此后,程序员们就用汇编指令编写源程序。可是,计算机能读懂的只有机器指令,那 么如何让计算机执行程序员用汇编指令编写的程序呢?这时,就需要有一个能够将汇编指 令转换成机器指令的翻译程序,这样的程序被称为编译器。程序员用汇编语言写出源程序, 再用汇编编译器将其编译为机器码,由计算机最终执行。图1.1描述了这个工作过程。 汇编指令 机器码 mov ax, bx 100010011101100 程序员 编译器 计算机 图1.1用汇编语言编写程序的工作过程 1.3汇编语言的组成 汇编语言发展至今,由以下3类指令组成 汇编指令:机器码的助记符,有对应的机器码 伪指令:没有对应的机器码,由编译器执行,计算机并不执行。 其他符号:如:+、-、·、/等,由编译器识别,没有对应的机器码。 汇编语言的核心是汇编指令,它决定了汇编语言的特性 14存储器 CPU是计算机的核心部件,它控制整个计算机的运作并进行运算,要想让一个CPU 工作,就必须向它提供指令和数据。指令和数据在存储器中存放,也就是平时所说的内存。 在一台PC机中内存的作用仅次于CPU。离开了内存,性能再好的CPU也无法工作。这就 像再聪明的大脑,没有了记忆也无法进行思考。磁盘不同于内存,磁盘上的数据或程序如
汇编语言 果不读到内存中,就无法被CPU使用。要灵活地利用汇编语言编程,首先要了解CPU是 如何从内存中读取信息,以及向内存中写入信息的。 1.5指令和数据 指令和数据是应用上的概念。在内存或磁盘上,指令和数据没有任何区别,都是二进 制信息。CPU在T作的时候把有的信息看作指令,有的信息看作数据,为同样的信息赋予 了不同的意义。就像围棋的棋子,在棋盒里的时候没有任何区别,在对弈的时候就有了不 同的意义。 例如:内存中的二进制信息100010010100,计算机可以把它看作大小为89D8H 的数据来处理,也可以将其看作指令 mov ax,bx来执行 1000100101000->89D8H(数据) 1000100101000-> mov ax bx(程序) 1.6存储单元 存储器被划分成若干个存储单元,每个存储单元从0 开始顺序编号,例如-个存储器有128个存储单元,编号 从0~127。如图12所示 那么…个存储单元能存储多少信息呢?电子计算机 的最小信息单位是bt(音译为比特),也就是一个二进制位 8个bt组成一个Byte,也就是通常讲的一个字节。微型 机存储器的存储单元可以存储一个字节,即8个二进制位 一个存储器有128个存储单元,它可以存储128个字节。 127 微机存储器的容量是以字节为最小单位来计算的。对 图12存储单元的编号于拥有128个存储单元的存储器,我们可以说,它的容量 是128字节。 对于大容量的存储器一般还用以下单位来计量容量(以下用B来代表Byte) I KB=1024 B 1 MB=1024 KB 1 GB=1024 MB 1 TB=1024 GB 磁盘的容量单位同内存的一样,实际上以上单位是微机中常用的计量单位。 17cPU对存储器的读写 以上讲到,存储器被划分成多个存储单元,存储单元从零开始顺序编号。这些编号可 以看作存储单元在存储器中的地址。就像一条街,每个房子都有门牌号码。 CPU要从内存中读数据,首先要指定存储单元的地址。也就是说它要先确定读取哪一