790 likes | 920 Views
课程性质. 本课程是计算机科学与技术专业的必修课程、也是本系其它专业专业课程学习的专业基础课程。. 教学目的. 本课程向学生介绍汇编语言程序设计的方法和技巧。 以 PC 计算机的汇编语言为主,通过课堂教学和上机实习,使学生掌握 DOS 和 Windows 汇编序言程序设计的特点及技术,即汇编工具 Masm611 和 Masm32 的使用;. 掌握软件与硬件的交互原理,即 DOS 、 BIOS 功能的调用方法、 MSDN 的使用、 API 的调用 熟练使用使用调试工具 Debug 和 W32Dasm 理解高级语言的实现原理. 1.1 汇编语言的由来与特点.
E N D
课程性质 本课程是计算机科学与技术专业的必修课程、也是本系其它专业专业课程学习的专业基础课程。
教学目的 • 本课程向学生介绍汇编语言程序设计的方法和技巧。 • 以PC计算机的汇编语言为主,通过课堂教学和上机实习,使学生掌握DOS和Windows汇编序言程序设计的特点及技术,即汇编工具Masm611和Masm32的使用;
掌握软件与硬件的交互原理,即DOS、BIOS功能的调用方法、MSDN的使用、API的调用掌握软件与硬件的交互原理,即DOS、BIOS功能的调用方法、MSDN的使用、API的调用 • 熟练使用使用调试工具Debug和W32Dasm • 理解高级语言的实现原理
1.1 汇编语言的由来与特点 • 计算机语言是人与计算机之间交流信息的工具 • 程序:用计算机语言描述的处理步骤。 • 程序设计:编制处理步骤的过程。 • 计算机语言可分为三类: ◆机器语言 ◆汇编语言 ◆通用语言 面向机器设计的,低级语言 面向程序设计人员设计的,高级语言
一、机器语言 机器指令是CPU能直接识别并执行的指令它的表现形式是二进制编码。机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。 机器语言是直接用描述机器指令来设计程序,它是CPU能直接识别的唯一一种语言。也就是说,CPU能直接执行用机器语言描述的程序。
一、机器语言 1010 0000 ;1号单元内容取入AL寄存器 0000 0001 0000 0000 1000 1010 ;2号单元内容取入AH寄存器 0010 0110 0000 0010 0000 0000 0000 0000 ;AL的内容与AH的内容相加,结 1110 0000 ;果存入AL中 1010 0010 ;AL的内容送入3号单元 0000 0011 0000 0000 1111 0100 ;停机
一、机器语言 缺点: (1) 机器语言难记,程序难编,易错,调试困难; (2) 机器语言通用性差。 优点: (1) 计算机能直接认识、执行; (2) 算法刻画细致; (3) 程序紧凑,占用内存空间少,执行速度高; (4) 能充分发挥计算机的硬件功能。
二、汇编语言 随着计算机的发展,产生了符号语言,上面的程序用符号语言编写如下: MOV AL,DATA1 ;取第一个数据 MOV AH,DATA2 ;取第二个数据 ADD AL,AH ;求和 MOV RLT,AL ;保存结果 HLT ;停机
二、汇编语言 • 汇编语言: 符号语言的词法、语法规则及伪指令符号就构成了汇编语言。 • 汇编过程:把汇编语言程序翻译成机器语言程序的过程称为汇编过程。 • 汇编程序:完成汇编过程的程序称为汇编程序。 • 汇编语言程序:程序设计人员用汇编语言编写的程序,是汇编程序加工的对象,称为源程序。 • 目标程序:汇编程序产生的结果,也称作是目的程序。
二、汇编语言 DSEG SEGMENT ;数据段开始 DATA1 DB 15H DATA2 DB 26H RLT DB 0 DSEG ENDS ;数据段结束 CSEG SEGMENT ;代码段开始 ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG ;设置数据段基址 MOV DS,AX MOV AL,DATA1 ;取第一个数据 MOV AH,DATA2 ;取第二个数据 ADD AL,AH ;求和 MOV RLT,AL ;保存结果 HLT ;停机 CSEG ENDS ;代码段结束 END START ;源程序结束
连接程序 可执行程序 汇编程序 计算机 目标程序 源程序 二、汇编语言 种类:8086汇编,8051汇编等 执行过程:
二、汇编语言 优点: (1) 程序容易编制、出错机会少、容易调试; (2) 算法刻画细致; (3) 程序紧凑、占用内存空间少、执行速度高; (4) 能充分发挥计算机的硬件功能。 缺点: (1) 计算机不能直接认识、执行,必须经过汇编变为机器语言程序; (2) 通用性差。
三、通用语言(高级语言) • 通用语言:是用来对计算机操作步骤进行描述的一整套标记符号、表达格式、结构及其使用的语法规则。 • 种类:Pascal, BASIC, C, COBOL, Java等等 • 例子(C): int i,j,k; k=i+j;
三、通用语言(高级语言) • 执行过程: 连接 编译程序 计算机 目标程序 可执行程序 源程序
三、通用语言(高级语言) 优点: (1) 程序容易编制、出错机会少、容易调试; (2) 容易表达算法; (3) 通用性强。 缺点: (1) 计算机不能直接认识、执行,必须经过编译变为机器语言程序; (2) 编译后生成的机器语言程序冗长、占用内存空间多、执行速度低; (3) 不能充分发挥计算机的硬件功能。
机器语言 高级语言 FORTRAN BASIC COBOL PASCAL C/C++ JAVA …... 汇编语言 计算机语言发展简史
汇编语言的应用领域 汇编语言的优点在于“与机器相关”和“执行的高效 率”。但也导致其可移植性差和调试难。所以,我们在 选用汇编语言时要根据实际的应用环境,尽可能避免其 缺点对整个应用系统的影响。汇编语言主要适用于下列 领域: • 要求执行效率高、反应快的领域,如操作系统内核,工业控制,实时系统等。 • 系统性能的瓶颈,或频繁被使用子程序或程序段。 • 与硬件资源密切相关的软件开发,如设备驱动程序。 • 受存储容量限制的应用领域,如家用电器的计算机控制功能。 • 其它高级语言不适合的开发环境。
学好汇编的意义 • 理解硬件的控制原理:比如,控制磁盘驱动器、控制键盘、控制鼠标,等等。在学过汇编以后,可以和我们以前学习过的《计算机原理》结合起来,对硬件的控制,硬件与软件的交互机理有深入的认识。 • 深入理解高级语言:我们学过C语言,知道C语言用cin和cout怎么输入输出字符,在汇编中可以知道它们是怎么实现的。其它语句如switch、if…else、goto等,其它函数如strcmp、strlen、strcmp,我们也可以模拟它们的实现。
软件的加密解密:存在盗版软件,是因为有人对软件进行破解,让其保护方式失去作用。保护自己的软件,需要对软件进行加密,汇编语言可以显示它的威力。软件的加密解密:存在盗版软件,是因为有人对软件进行破解,让其保护方式失去作用。保护自己的软件,需要对软件进行加密,汇编语言可以显示它的威力。 • 信息安全:尤其在反病毒方面。例如,病毒为什么能够感染可执行文件,假设一个文件感染了病毒,我们怎么去分析它,祛除病毒代码,都只有汇编语言更适合一些。
1.2 系统结构 • 微型计算机的系统结构 微型计算机的系统包括硬件系统、软件系统。 • 首先介绍微型计算机系统的基本结构,然后分别以8086为例介绍16位微处理器的结构和以80386为例介绍32位微处理器的结构。
硬件系统 • 硬件是指构成计算机物理设备的实体(如CPU、显卡、外部设备等),一台计算机所有硬件的集合构成了计算机的硬件系统。一般将其分为微处理器、主存储器、接口电路、外部设备和系统总线等。
微处理器就是由控制器和算术逻辑部件(ALU)组成的中央处理器(即CPU)。它的作用是自动地执行各条指令,协调整个系统的工作。微处理器就是由控制器和算术逻辑部件(ALU)组成的中央处理器(即CPU)。它的作用是自动地执行各条指令,协调整个系统的工作。 • 主存储器是计算机的记忆装置,用于存储计算机当前正在执行的程序和数据,我们通常接触的是RAM,它是一种随机存取存储器。
系统总线是将CPU与存储器及外部设备连接起来的总线,它是用来传输信息的。按传输信息的种类不同把系统总线分为地址总线(AB)、数据总线(DB)、控制总线(CB)。系统总线是将CPU与存储器及外部设备连接起来的总线,它是用来传输信息的。按传输信息的种类不同把系统总线分为地址总线(AB)、数据总线(DB)、控制总线(CB)。 • 外部设备按功能可分为二类:一类是与计算机进行通讯的设备如键盘、打印机和显示器等,这些设备与计算机的通讯是通过I/O接口实现的。另一类是用来存储信息的设备如磁盘、光盘等。
软件系统 • 软件是指所有程序和数据的总称。通常我们将它分为系统软件和应用软件两大类。 • 系统软件主要用来对计算机系统实际运行进行控制,管理和服务的。它主要分为操作系统(如DOS、 Unix 、windows 、Macintosh、Linux等),诊断程序,调试程序和语言处理程序如编译程序、解释程序和汇编程序等。 • 应用软件指的是用户自己编写的各类应用程序。
INTEL8086/8088 16位机的系统结构 • Intel 8086/8088是第三代微处理器。在汇编语言一级,它们与第二代微处理器8080/8085是兼容的。8086有20条地址线,16条数据线,直接寻址的内存空间可达1MB(220)。8088和8086内部组成完全相同,不同的是8088外部数据总线只有8条。因此8088被称为准16机。IBM PC 机及其兼容机上广泛采用了8088CPU。
8086/8088 CPU按功能可分为二个部分:总线接口单元(BIU: Bus Interface Unit)和执行单元(EU: Execute Unit)。 • BIU由地址加法器,指令指针寄存器IP,指令流字节队列和四个段寄存器(ES、CS、SS、DS)所组成的,它主要负责CPU与存储器及外部设备之间的信息传输。 • EU由算术逻辑单元ALU(Arithmetic and Logic Unit),执行单元控制系统,8个16位寄存器和一个标志寄存器PSW组成,它负责全部指令的执行,即负责向总线接口单元提供数据和地址,并对通用寄存器和标志寄存器进行管理,在ALU中进行算术运算和逻辑运算。
8086/8088CPU的寄存器 • 8086/8088的寄存器分为4种类型: • (1)通用寄存器 • (2)指针和变址寄存器 • (3)段寄存器 • (4)标志寄存器
(4)标志寄存器 • 标志寄存器长度为16位,其中9个位有定义。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 × × × × OF DF IF TF SFZF × AF × PF × CF
1000 0001 1000 0000 0000 0001 1000 0000 1000 0001 1111 1111 + - 1 1 CF, Carry Flag, 进位标志, 两数相加,最高位向前的进位; 或两数相减最高位向前的借位, 举例:
AF, Auxiliary Carry Flag, 辅助进位标志, 两数相加,第3位向前的进位; 或两数相减第3位向前的借位, 举例: 0000 1001 0000 1000 0001 0001 0000 0000 0000 0001 1111 1111 + -
PF, Parity Flag, 奇偶标志, 两数操作(算术或逻辑),结果的低8位中含有1的位数是偶还是奇。举例: 1000 0101 1010 1100 1001 1101 1001 0111 1000 0101 1000 0100 ∧ 结果: PF=1
ZF, Zero Flag, 零标志, 操作结果为0,则ZF为1。 举例: 1111 1111 0000 0001 0000 0000 + 操作结果为0, ZF=1 进位1
SF, Sign Flag, 符号标志, 操作结果的符号位(即最高位的状态)。 举例: 1000 0101 1010 1100 1001 1101 1001 0111 1000 0101 1000 0100 ∧ 结果: SF=1
OF, Overflow Flag, 溢出标志, 算术操作,结果超过目标所能容纳的范围。举例: 0111 1110 (+126) 0000 0011 (+3) 1000 0001 (-127) +
8086/8088存储器结构 • 存储器的分段结构 • 实际地址的产生
存储器的分段结构 段地址:段首单元在整个1MB单元中的编号,其最低4位一定为0,高16位保存在段寄存器中。 偏移地址:单元所在位置距离其所在段段首单元的距离,段首单元的偏移地址为0000H,后续的单元顺次增1。 因此,对于存储空间中的任意一个单元,我们都可以通过段地址和段内的偏移地址唯一地确定。 段地址 XXXX0H 偏移地址 : 长度≤64KB :
存储器的分段结构 指针变址寄存器SI,DI,BP,SP存放的是在某一段内寻址的单元的偏移地址。其中SI和DI存放的是数据段内某单元的偏移地址,而BP和SP存放的则是堆栈段内某单元的偏移地址。 指令指针IP用以存放下一条要执行的指令在当前代码段内的偏移地址。
实际地址的产生 实际地址:也称物理地址,是该单元在整个1MB单元中的编号,用一个20位的二进制数表示,范围从00000H~FFFFFH,该地址是唯一的。CPU与存储器进行数据交换时所使用的地址即是实际地址。 逻辑地址:由两部分组成,即段地址和偏移地址。我们在编写程序时所使用的地址即是逻辑地址。首先将存储器分段之后段地址的高16位存入相应的段寄存器中,然后再通过段内的偏移地址对所需的单元进行访问。
实际地址的产生 逻辑地址 物理地址 (实际地址) 段地址 偏移地址 00450H 0000H 0001H 0002H 0003H 0004H : : : FFFDH FFFEH FFFFH 00450H 00451H 00452H 00453H 00454H : : : 1044DH 1044EH 1044FH : : :
实际地址的产生 举例: CS=9482, IP=2350, 实际地址为: 1001 0100 1000 0010 0010 0011 0101 0000 1001 0110 1011 0111 0000 一个实际地址可以对应多个逻辑地址。
堆栈 • 堆栈是按先进后出的原则在内存中组织的一个特殊的存储区域。该区域一端固定一端活动,固定的一端称为栈底,而活动的一端称为栈顶。往堆栈中存入或取出信息总是在堆栈的栈顶单元进行的。CPU中的堆栈指针指示器SP总是指向堆栈的栈顶,而堆栈段寄存器SS则指明了堆栈段的起始位置。
80386 32位机的系统结构 • Intel 80386是为满足高性能的应用领域与多用户、多任务的操作系统的需要而设计的,其最大的特点是在CPU芯片上集成了一个存储器管理部件(MMU),可对246字节的虚拟存储器和4千兆字节的物理存储器进行分段和分页管理,段的最大长度为4千兆字节。 • 80386采用CHMOS工艺,陶瓷网格阵列(Plastic Grid Array, PGA)封装,全32位结构,它的时钟频率有16MHZ和20MHZ两种,总线周期只有2个时钟周期。
体系结构 • 80386的内部结构由六个功能部件组成:总线接口部件BIU(Bus Interface)、指令预取部件IPU(Instruction Prefetch Unit)、指令译码部件 IDU(Instruction Decode Unit)、存储器管理部件MMU(Memory Management Unit)、执行部件EU(Execution Unit)和控制部件。这6个部件可以并行地工作,构成一个六级流水线体系结构。这样,可以同时处理多条指令以减少程序实际执行时间。