1、1第一章 预备知识汇编语言是面向机器的低级语言:和其他计算机语言相比,能够充分利用计算机硬件特性;随机器的不同而不同。学习汇编语言必须做到:了解特定机器的硬件;了解其数据类型的表示方法;了解其指令系统等。本章的内容包括:什么是汇编语言;汇编源程序举例;汇编和调试过程;寄存器组1.1 机器语言与汇编语言人们用计算机语言操纵计算机,和计算机交流信息。一般来说,计算机语言可以分为以下几类:低级语言是面向机器的,为特定机器提出的;高级语言是面相人的,接近于自然语言,为了方便人们使用2提出的。一、 机器语言机器指令:能够被计算机识别,并能直接加以执行的语句。机器语言:由机器指令构成的集合。机器指令也叫做
2、硬指令,不同类型的 CPU 都有自己特有的、一定数量的基本指令,组成其特有的机器语言。机器指令用二进制代码来表示,这样才能够被计算机识别并直接执行。机器指令的一般形式为:例如:计算机语言8031 汇编语言Z80 汇编语言8086 汇编语言BASIC 语言FORTRAN 语言C 语言针对特定机器的机器语言汇编语言低级语言高级语言第四代语言(VB、PB、 ASP 等)操作码 地址码31011 10000111 11110000 0000操作码:1011,MOV目的操作数:1000,AX源操作数:0000 0000 0111 1111,立即数完成操作:MOV AX, 7FH; 7FH AX操作码指出
3、了运算的种类,如数据传送、加减运算等。地址码指出了参与运算的操作数和运算结果的存放位置。用机器语言编程,就意味着要用二进制数 0 和 1 编写程序。这样做效率很低,而且容易出错。但为了能够充分利用硬件特性,在一些时候仍然需要用低级语言编程,因此人们想办法对机器语言进行改进,提出了汇编语言。此后很少直接使用机器语言了。二、 汇编语言从本质上看,汇编语言是一种符号化的机器语言:用助记符表示机器指令的操作码;用变量代替操作数的存放地址;用在语句前加一个标号,来代表该指令的存放地址。汇编语言的主要操作与机器指令一一对应,是一种用符号书写的(不再是二进制代码) 、并遵循一定语法规则的计算机语言。例如:4
4、MOV AX, 7FHMOV BX, 1234HADD AX, BX汇编语言是为了方便用户使用而设计的一种符号语言,并不能直接被计算机识别,必须将汇编语言程序翻译成机器语言程序(也叫目标程序) ,才能由计算机所执行。翻译过程的图形表示:汇编源程序(用户写)目标程序(机器写)汇编程序(翻译)汇编程序不同于汇编语言程序。汇编语言程序是用汇编语言写的程序,汇编程序是翻译汇编语言程序的加工程序。汇编程序可分为:ASM小汇编程序,占有较小的存贮区,但功能较弱,没有宏功能。MASM宏汇编程序,需要较大的存贮区,但功能强大,具有宏能力。这门课使用的是宏汇编程序。宏,是指用一个宏指令名字代替程序中重复出现的一
5、组语句,5在其它的地方,可以用宏指令名字及不同的参数来调用。宏的功能类似于子函数,但实现方式不同。此外,汇编语言还必须指出:程序从什么地方开始、什么时候结束、数据放在哪里、数据类型是什么、临时存贮区等,这需要一组另外的指令指示 MASM 工作,这种指令叫做伪指令。三、 为什么要学习汇编语言?汇编程序产生的目标程序简短,占用的存贮空间小,执行速度快,适合于编写过程控制、多媒体接口、通讯程序。有些无法用高级语言实现的操作,可以由汇编完成。1.2 汇编源程序举例举例一、 完整源程序为了对汇编语言有具体的理解,下面编写一个简单的程序:.386;堆栈段 STACK SEGMENT USE16 STACK
6、 ;段名和组合类型DB 200 DUP(0) ;堆栈的大小为 200 个字节6STACK ENDS;数据段DATA SEGMENT USE16 ;段为 16 位段SUM DW ? ;SUM 为字变量,初值不定DATA ENDS;代码段CODE SEGMENT USE16ASSUME CS:CODE, SS:STACK, DS:DATA, ES:DATASTART: MOV AX, DATAMOV DS, AX ;数据段首址送 DSMOV CX, 50 ;循环计数器置初值MOV AX, 0 ;累加器置初值MOV BX, 1 ;1BXNEXT: ADD AX, BX ;(AX)+(BX)AXINC
7、 BXINC BX ;(BX)+2BXDEC CX ;(CX)-1CX7JNE NEXT ;(CX)0转 NEXTMOV SUM, AX;(CX)=0 累加结果 SUMMOV AH, 4CHINT 21H ;返回 DOSCODE ENDSEND START ;源程序结束语句。程序运行时,启动地址为 START二、 分段在该例中,一共定义了三个段:堆栈段、数据段和代码段。.386;堆栈段 STACK SEGMENT USE16 STACK STACK ENDS;数据段DATA SEGMENT USE16DATA ENDS;代码段8CODE SEGMENT USE16ASSUME CS:CODE,
8、 SS:STACK, DS:DATA, ES:DATASTART: MOV AX,DATAMOV DS,AXMOV AH, 4CHINT 21HCODE ENDSEND START三、 语句该例中的源程序由一系列语句组成。语句的一般格式为:名字 操作符 操作数或地址 ;注释1. 操作符可分为 3 类: 指令 伪指令 宏2. 操作数也可分为 3 类: 数值9 寄存器 内存3. 常用指令:MOV AX, 0ADD AX, BXINC AXDEC CX等1.3 汇编和调试过程一、 汇编过程1. 必备软件 MASM.EXE LINK.EXE TD.EXE 其他:文本编辑器、DOSBOX 等2. 命令
9、MASM DEMO.ASM汇编 DEMO.ASM,应该生成 MASM.OBJ10 LINK DEMO.OBJ连接 DEMO.OBJ,应该生成 MASM.EXE TD DEMO.EXE调试 DEMO.EXE二、 调试程序 Turbo Debugger 的使用1. 如图,TD 的界面可分为: 菜单 代码操作区 数据操作区 寄存器操作区 标记寄存器操作区 堆栈段操作区11标记有: 当前指令标记 当前栈顶标记2. TD 的主要操作 单步执行:F7,F8 设置(取消)断点:F2 直接执行:F93. 查看数据区4. 查看用户界面5. 修改数据、指令、寄存器内容1.4 Intel 8086 微处理器简介汇编
10、语言是一种面向机器的低级语言,要学好它,必须对计算机硬件结构有一个初步了解。一、 微型计算机的组成微型计算机主要由微处理器(CPU) 、主存贮器(MM) 、外部设备及互连部件组成。如下图所示:12微处理器是计算机系统的核心。存贮器:存放程序以及数据、信息、中间结果。外设:I/O 设备和大容量存贮器。I/O 设备包括显示器、打印机、键盘等。二、 Intel 80x86 内部结构个人电脑的发展,经过了 8086、80186、80286、80386 等几代产品,Intel 80x86 是 1985 年推出的 32 位处理器,按功能可分为执行部件(EU)和总线接口部件(BIU) 。其中运算器执行所有的
11、算术和逻辑运算指令;控制器负责计算机的控制工作(如取出指令、发出各种控制命令) 。其内部结构如下所示:13各部分的功能:1. 总线接口部件:是 CPU 与整个计算机系统之间的高速接口功能:接受所有的总线操作请求,并按优先权进行选择,最大限度地利用本身的资源为这些请求服务。2. 执行部件:寄存器组、标志寄存器、算逻部件、控制部件等组成功能:从译码指令队列中取出指令并且执行(1) 数据寄存器组(EAX,EBX,ECX,EDX) EAX (累加器)Accumulator EBX (基址寄存器)Base ECX (计数寄存器)Count14 EDX (数据寄存器 )Data作用 :用来保存操作数、运算
12、结果或作指示器、变址寄存器,减少存取操作数所需要的访问总线和主存储器的时间,加快运行速度。注意: 它们既可作 32 位、16 位寄存器,也可作 8 位寄存器使用。 16 位和 8 位的寄存器不能作指示器或变址寄存器。(2) 指示器变址寄存器组(ESI 、EDI、ESP 、 EBP)作用:一般用来存放操作数的偏移地址,用作指示器或变址寄存器。 ESP(Stack Pointer) ,称为堆栈指示器,存放的是当前堆栈段中栈顶的偏移地址;15 EBP(Base Pointer),为对堆栈操作的基址寄存器; ESI(Source Index),称为源变址寄址器;字符串指令源操作数的指示器; EDI(D
13、estination Index),称为目的变址寄存器;字符串指令目的操作数的指示器3. 指令预取部件和指令译码部件指令预取部件:通过总线接口部件,把将要执行的指令从主存中取出,送入指令排队机构中排队。指令译码部件:从指令预取部件中读出指令并译码,再送入译码指令队列排队供执行部件使用。指令指示器:它总是保存着下一条将要被 CPU 执行的指令的偏移地址,其值为该指令到所在段首址的字节距离。4. 分段部件和分页部件(1) 使用分段部件和分页部件实现虚拟存储空间映射到物理存储空间程序员使用二维地址,即“段地址:段内偏移地址”分段部件16段地址:段内偏移地址 一维的线性的地址虚拟的线性的地址 主存储器
14、的物理地址(2) 段寄存器用来保存段首地址 代码段寄存器 CS 堆栈段寄存器 SS 数据段寄存器 DS 附加段寄存器 ES 附加段寄存器 FS 附加段寄存器 GS5. 指令执行过程:(1) 指令预取部件和指令译码部件 由 EIP 取得指令的偏移地址EIP 增量,形成下一条指令的地址(2) 分段部件和分页部件由分段部件和分页部件,将“CS : EIP”转换为指令的物理地址分页部件17(3) 总线接口部件从主存中取指令送到预取指令队列(4) CPU 按序从预取指令队列中取出指令送到指令译码部件。(5) 指令译码部件译码,执行部件执行指令;(6) 执行过程中若需要取主存操作数,从指令中取得操作数偏移
15、地址(7) 分段部件和分页部件由分段部件和分页部件,将“段首址 : 偏移地址”转换为操作数的物理地址(8) 总线接口部件从主存中取数据送到执行部件三、 80x86 的三种工作方式1. 实方式(实际地址)操作相当于一个可进行 32 位快速运算的 8086(内部 32 位、外部总线 16 位数据、20 位地址)2. 保护方式(虚地址)是 80386 设计目标全部达到的工作方式,通过对程序使用的存储区采用分段、分页的存储管理机制,达到分级使用互不干扰的保护目的。能为每个任务提供一台虚拟处理器,使每个任务单18独执行,快速切换。3. 虚拟 8086 方式保护方式下所提供的同时模拟多个 8086 处理器。本章作业一、1.2二、利用寄存器,编程实现: (12 + 34) * 56 78,结果放在寄存器 AX 中