1、汇编语言程序设计教程汇编语言程序设计教程第三版第三版适用于计算机科学与技术专业适用于计算机科学与技术专业卜艳萍 周伟编著5/9/20241汇编语言程序设计教程内容简介内容简介第1章和第2章介绍汇编语言基础知识和80 x86机型的功能与系统结构。第3章详细介绍IBM PC机的寻址方式和指令系统。第4章介绍伪指令、汇编语言程序格式等知识。第5章讲述顺序程序设计、分支程序设计和循环程序设计的基本方法。第6章详细介绍子程序设计及参数传递的方法。第7章是输入/输出程序设计技术和方法。第8章介绍高级汇编技术,包括宏汇编、条件汇编和重复汇编等。第9章讲述DOS功能调用和BIOS功能调用知识。第10章是汇编语
2、言程序设计上机实验指导部分。5/9/20242汇编语言程序设计教程课程的性质与基本要求课程的性质与基本要求汇编语言是一门实践性很强的课程,在教学过程中要训练学生掌握指令的操作过程、程序设计的基本规则和方法以及上机调试的能力。汇编语言适合于编制在时间和空间要求都很高的程序。汇编语言是能够利用计算机所有硬件特性的一门语言,在涉及到硬件设计的系统中,一般都用汇编语言完成接口部分程序的设计。本课程的开设,对于训练学生掌握微型计算机的结构、指令的操作过程、汇编语言程序设计技术以及应用汇编语言编制实用程序都有重要的作用。5/9/20243汇编语言程序设计教程本课程与其它课程的关系本课程与其它课程的关系汇编
3、语言是计算机科学专业语言类最基础的课程之一,计算机文化基础、计算机编程基础等作为本课程的前导课程。学好这门课程,可为学习相关的专业课打下基础,它是微机原理及接口技术、操作系统、计算机组成原理、编译原理和单片机原理及应用等的前导课程。5/9/20244汇编语言程序设计教程第1章 汇编语言基础知识第2章 微型计算机体系结构第3章 微型计算机的指令系统第4章 伪指令与汇编语言程序结构设计第5章 汇编语言程序设计第6章 子程序设计第7章 输入/输出程序设计第8章 高级汇编技术第9章 DOS/BIOS功能调用第10章 汇编语言上机实验目目 录录5/9/20245汇编语言程序设计教程第第1章章 汇编语言基
4、础知识汇编语言基础知识1.1 计算机基础知识1.2 计算机的基本结构与组成1.3 计算机中的数制与码制5/9/20246汇编语言程序设计教程1.1 计算机基础知识计算机基础知识1.1.1 计算机的发展史1.1.2 计算机的特性1.1.3 计算机的分类1.1.4 计算机的主要技术指标5/9/20247汇编语言程序设计教程计算机的发展史计算机的发展史第一代:电子管计算机时代(从1946年第一台计算机研制成功到50年代后期),其主要特点是采用电子管作为基本器件。第二代:晶体管计算机时代(从50年代中期到60年代后期),这时期计算机的主要器件逐步由电子管改为晶体管。第三代:集成电路计算机时代(从60年
5、代中期到70年代前期),随着半导体器件生产工艺与技术上的进步,在一片半导体基片上,可以生产出多个晶体管,并用它们形成具有一定处理功能的逻辑器件,这就是集成电路。第四代:大规模集成电路计算机时代(70年代初开始)。5/9/20248汇编语言程序设计教程计算机的特性计算机的特性 高速 高精度通用准确智能化 体积小、重量轻 5/9/20249汇编语言程序设计教程计算机的分类计算机的分类 计算机按其用途来分可以分成专用机和通用机两类。专用机是专门用于某种用途的,它对于特定用途而言最经济、最快速、最有效,但适应性差,而通用机适应性强。5/9/202410汇编语言程序设计教程计算机的主要技术指标计算机的主
6、要技术指标 机器字长是指该计算机能进行多少位二进制数的并行运算,实际上是指该计算机中的运算器有多少位,通常计算机的数据总线和寄存器的位数与机器字长一致。CPU速度是指单位时间(秒)内能够执行指令的条数。主频又称为主时钟频率,是指CPU在单位时间(秒)内产生的时钟脉冲数,以MHz(兆赫兹)为单位。存储器容量的大小不仅影响着存储程序和数据的多少,而且也影响着运行这些程序的速度。存储器完成一次数据的读(取)或写(存)操作所需要的时间称为存储器的存取(或访问)时间。存储器执行一次完整的读/写操作所需要的时间称为存取周期。系统的可靠性通常用平均无故障时间MTBF和平均故障修复时间MTTR来表示。计算机的
7、数据传输率还常用带宽表示,它反映计算机的通信能力。数据传输率的单位是bps,bps代表每秒传输一位或一比特。5/9/202411汇编语言程序设计教程存储器的容量存储器的容量5/9/202412汇编语言程序设计教程1.2 计算机的基本结构与组成计算机的基本结构与组成1.2.1 计算机的硬件1.2.2 计算机的软件1.2.3 计算机的程序设计语言1.2.4 计算机系统的层次结构5/9/202413汇编语言程序设计教程计算机硬件组成计算机硬件组成5/9/202414汇编语言程序设计教程计算机硬件组成计算机硬件组成运算器是对信息或数据进行处理和运算的部件,可以实现各种算术运算和逻辑运算。控制器(Con
8、trol Unit,CU)主要用来实现计算机本身运行过程的自动化,即实现程序的自动执行,是计算机的管理机构和指挥中心。存储器是计算机的存储和记忆装置,用来存储程序和数据,由存储单元组成。计算机的输入输出设备(Input/Output Device)简称I/O设备或者外设。位于主机之外,实现计算机与外部设备或者计算机与人进行信息交换,所以又称为外围设备(Peripheral Device)。5/9/202415汇编语言程序设计教程微型计算机系统结构微型计算机系统结构5/9/202416汇编语言程序设计教程系统总线系统总线地址总线:在该组信号线上,CPU输出将要访问的内存单元或I/O端口的地址信息
9、。数据总线:CPU进行读操作时,主存或外设的数据通过该组信号线输入到CPU内部;CPU进行写操作时,CPU内部的数据通过该组信号线输出到主存或外设。控制总线:控制信号线用于协调系统中各部件的操作。其中,有些信号线将CPU的控制信号或状态信号送往外界;有些信号线将外界的请求或联络信号送往CPU。5/9/202417汇编语言程序设计教程计算机的软件计算机的软件计算机的软件是指运行、维护、管理、应用计算机所需要的各种程序及其有关的文档资料。即指计算机系统所用的各种程序的集合,包括系统软件和应用软件两大类。系统软件的核心称为操作系统(Operating System)。操作系统是系统软件的指挥中枢,它
10、的主要作用是统一管理计算机的所有资源。用户软件是用户在自己的业务范围内为解决特定的问题而自行编制、开发的程序。5/9/202418汇编语言程序设计教程计算机的程序设计语言计算机的程序设计语言机器语言:计算机能够直接识别的是二进制数0和1组成的代码。机器指令就是用二进制编码的指令,一条机器指令控制计算机完成一个操作。汇编语言:汇编语言是一种符号语言,它用助记符表示操作码,比机器语言容易理解和掌握,助记符一般是表明指令功能的英语单词或其缩写。高级语言:高级语言比较接近于人类自然语言的语法习惯及数学表达形式,它与具体的计算机硬件无关,更容易被广大计算机工作者掌握和使用。5/9/202419汇编语言程
11、序设计教程汇编语言的应用汇编语言的应用程序要具有较快的执行时间,或者只能占用较小的存储容量。程序与计算机硬件密切相关,程序要直接、有效地控制硬件。大型软件需要提高性能、优化处理的部分。例如计算机系统频繁调用的子程序、动态连接库等。没有合适的高级语言或只能采用汇编语言的时候。例如,开发最新的处理器程序时,暂时没有支持新指令的编译程序。汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等。5/9/202420汇编语言程序设计教程计算机系统的层次结构计算机系统的层次结构5/9/202421汇编语言程序设计教程计算机系统的层次结构计算机系统的层次结构数
12、字逻辑层是计算机系统的最底层,它涉及计算机硬件的最基础的数字逻辑和数字门电路知识,解决了如何存储信息、如何传送信息以及如何运算与加工信息等方面的问题。微体系结构层要实现执行指令所需要的所有功能部件,如运算、控制、存储、输入/输出、接口和总线部件等。在指令系统层,需要定义机器的指令集,规定每一条指令的格式和功能。操作系统层主要承担计算机系统中的资源管理与分配,也向使用者和程序设计人员提供简单、方便、高效的服务。5/9/202422汇编语言程序设计教程计算机系统的层次结构计算机系统的层次结构汇编语言是面向计算机硬件本身的,程序设计人员可以使用的一种符号式的计算机语言,汇编语言的语句可以直接访问CP
13、U、存储器和I/O设备,它是除机器语言外实现速度最快的一种计算机编程语言。汇编语言的程序必须经过汇编程序的翻译才能在机器上执行。高级语言不像汇编语言那样“靠近”计算机的指令系统,而是着重面向解决实际问题所用的算法,更多的是为方便程序设计人员写出自己解决问题的处理方案和解题过程的程序。在高级语言层之上,还可以有应用层,这一层是为了使计算机满足某种用途而专门设计的,它由面向问题的应用语言和解决实际问题的处理程序组成。5/9/202423汇编语言程序设计教程1.3 计算机中的数制与码制计算机中的数制与码制1.3.1 数制及数制转换1.3.2 机器数的编码1.3.3 定点数与浮点数1.3.4 码制5/
14、9/202424汇编语言程序设计教程数制及数制转换数制及数制转换进位计数制基本概念:基数()、权()、N=Dn-1Dn-2Rn-2 常用计数制:二进制();八进制();十进制();十六进制()。5/9/202425汇编语言程序设计教程常用的进位计数制常用的进位计数制二进制 R=2 基本符号 0,1八进制 R=8 基本符号 0,1,2,3,4,5,6,7十进制 R=10 基本符号 0,1,2,3,4,5,6,7,8,9十六进制 R=16 基本符号 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F5/9/202426汇编语言程序设计教程进位计数制间的相互转换进位计数制间的相互转换()
15、二进制、八进制、十六进制转换为十进制数。(按权相加)10101101.101 2222222128328410.50.125 173.625D()十进制数转换为二进制、八进制、十六进制。(按取余)36512D /162282 2282/16142 142/16=8 8/16=0(a0=9)(a1=10)(a2=14)(a3=8)36521D=8EA9H(3)二进制数与八进制、十进制、十六进制之间的转换。10101001.01101B=(1010)(1001).(0110)(1000)B A 9 6 8 10101001.01101B=A9.68H 5/9/202427汇编语言程序设计教程机器数
16、的编码机器数的编码原码反码补码数的最高位表示符号位,其余各位表示真值的绝对值。符号位为0表示该数为正数,符号位为1表示该数为负数。正数的反码与原码相同,负数的反码其符号位仍用1表示,其余数值位则按位取反。用于解决减法转换为加法的问题,简化计算机运算电路。常用方法之一:先取原数反码,再末位加1即得到补码。5/9/202428汇编语言程序设计教程原码、反码和补码的比较原码、反码和补码的比较如果真值x为正数,则有x原=x反=x补。如果真值x为负数,则x原、x反、x补有不同的表示。如果真值x=0,则x补有唯一的编码,x原和x反都有两个不同的编码。定点小数中,原码和反码所能表示数的范围为-1 x 1,补
17、码所能表示的数的范围为-1 x(CX),则CF=0,即无借位;若(DX)(CX)若SF=1,则(DX)(CX)若SF=0,则(DX)(CX)5/9/2024119汇编语言程序设计教程乘法和除法指令乘法和除法指令乘法指令除法指令1)1)无符号数乘法指令无符号数乘法指令MULMUL格式:格式:MULOPRDMULOPRD2)2)带符号数乘法指令带符号数乘法指令IMULIMUL格式:格式:IMULOPRDIMULOPRD1)无符号数除法指令DIV格式:DIVOPRD2)带符号数除法指令IDIV格式:IDIVOPRD3)字节扩展指令CBW格式:CBW4)字扩展指令CWD格式:CWD5/9/202412
18、0汇编语言程序设计教程无符号数乘法指令无符号数乘法指令MUL 格式:MUL OPRD其中OPRD为源操作数,即作乘数;目的操作数是隐含的,即被乘数总是指定为累加器AX或AL的内容。16位乘法时,AX中为被乘数;8位乘法时,AL为被乘数。当16位乘法时,32位的乘积存于DX及AX中;8位乘法的16位乘积存于AX中。字节相乘:(AX)(AL)OPRD,当结果的高位字节(AH)0时,则CF=1、OF=1。字相乘:(DX)(AX)(AX)OPRD,当(DX)0时,则CF=1、OF=1。5/9/2024121汇编语言程序设计教程带符号数乘法指令带符号数乘法指令IMUL 格式:IMUL OPRD其中OPR
19、D为任一通用寄存器或存储器操作数。本指令的功能是完成两个带符号数的相乘。5/9/2024122汇编语言程序设计教程无符号数除法指令无符号数除法指令DIV 格式:DIV OPRD本指令的功能是实现两个无符号二进制除法运算。字节相除,被除数在AX中;字相除,被除数在DX、AX中,除数在OPRD中。操作过程:字节除法:(AL)(AX)/OPRD,(AH)(AX)MOD OPRD字除法:(AX)(DX)(AX)/OPRD,(DX)(DX)(AX)MOD OPRD5/9/2024123汇编语言程序设计教程带符号数除法指令带符号数除法指令IDIV 指令格式:IDIV OPRD其中OPRD为任一通用寄存器或
20、存储器操作数。隐含操作数的定义与DIV指令相同。本指令的功能是实现两个带符号数的二进制除法运算,余数的符号与被除数符号相同。5/9/2024124汇编语言程序设计教程字节扩展指令字节扩展指令CBW 指令格式:CBW本指令的功能是将字节扩展为字,即把AL寄存器的符号位扩展到AH中。即两个字节相除时,先使用本指令形成一个双字节长的被除数。5/9/2024125汇编语言程序设计教程字扩展指令字扩展指令CWD 指令格式:CWD本指令的功能是将字扩展为双字长,即把AX寄存器的符号位扩展到DX中。即两个字或字节相除时,先使用本指令形成一个双字长的被除数。符号扩展指令常用来获得除法指令所需要的被除数。例如A
21、X=FF00H,它表示有符号数256;执行CWD指令后,则DX=FFFFH,DX,AX仍表示有符号数256。5/9/2024126汇编语言程序设计教程十进制调整指令十进制调整指令 8086/8088提供了一组十进制数调整指令。这组指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果。在进行十进制数算术运算时,应分两步进行:先按二进制数运算规则进行运算,得到中间结果;再用十进制调整指令对中间结果进行修正,得到正确的结果。5/9/2024127汇编语言程序设计教程十进制调整指令十进制调整指令(1)DAA指令 指令格式 DAADAA指令为无操作数指令。用以完成对压缩的BCD码加法运算进行校正
22、。一般在ADD指令之后,紧接着用一条DAA指令加以校正,在AL中可以得到正确的结果。(2)DAS指令 指令格式 DASDAS指令为无操作数指令。用以完成对压缩的BCD码相减的结果进行校正,得到正确的压缩的十进制差。一般在SUB指令之后,紧接着用一条DAS指令加以校正,在AL中可以得到正确的结果。5/9/2024128汇编语言程序设计教程十进制调整指令十进制调整指令(3)AAA指令 指令格式 AAAAAA指令为无操作数指令。AAA指令对在AL中的两个非压缩的十进制数相加后的结果进行校正。两个非压缩的十进制数可以直接用ADD指令相加,但要得到正确的非压缩的十进制结果,必须在ADD指令之后,用一条A
23、AA指令加以校正,在AX中可以得到正确的结果。5/9/2024129汇编语言程序设计教程十进制调整指令十进制调整指令(4)AAS指令 指令格式 AASAAS指令为无操作数指令。AAS指令把AL中两个非压缩的十进制数相减后的结果进行校正,产生一个正确的非压缩的十进制数差。(5)AAM指令 指令格式 AAMAAM指令执行的操作为:把AL中的积调整到非压缩的BCD格式后送给AX寄存器。这条指令之前必须执行MUL指令把两个非压缩的BCD码相乘(此时要求其高4位为0),结果放在AL寄存器中。本指令的调整方法是:把AL寄存器的内容除以0AH,商放在AH寄存器中,余数保存在AL寄存器中。本指令根据AL寄存器
24、的内容设置标志位SF、ZF和PF,但对OF、CF和AF标志位无影响。5/9/2024130汇编语言程序设计教程十进制调整指令十进制调整指令(6)AAD指令 指令格式 AAD如果被除数是存放在AX寄存器中的两位非压缩BCD数,AH中存放十位数,AL中存放个位数,而且要求AH和AL中的高4位均为0。除数是一位非压缩的BCD数,同样要求高4位为0。在把这两个数用DIV指令相除以前,必须先用AAD指令把AX中的被除数调整成二进制数,并存放在AL寄存器中。5/9/2024131汇编语言程序设计教程逻辑操作类指令逻辑操作类指令 逻辑操作类指令是按位操作指令,可以对8位或16位的寄存器或存储单元的内容按位操
25、作。该类指令包括逻辑运算指令、移位指令和循环移位指令。5/9/2024132汇编语言程序设计教程逻辑运算指令逻辑运算指令1.逻辑与运算指令AND2.逻辑或运算指令OR3.逻辑非运算指令NOT4.逻辑异或运算指令XOR5.测试指令TEST格式:ANDOPRD1,OPRD2格式:OROPRD1,OPRD2格式:NOTOPRD格式:XOROPRD1,OPRD2格式:TESTOPRD1,OPRD25/9/2024133汇编语言程序设计教程逻辑与运算指令逻辑与运算指令AND其中目的操作数OPRD1为任一通用寄存器或存储器操作数。源操作数OPRD2为立即数、任一通用寄存器或存储器操作数。功能:对两个操作数
26、实现按位逻辑与运算,结果送至目的操作数。本指令可以进行字节或字的“与”运算。格式:ANDOPRD1,OPRD25/9/2024134汇编语言程序设计教程逻辑或运算指令逻辑或运算指令OROR指令完成对两个操作数按位“或”的运算,结果送至目的操作数中。本指令可以进行字节或字的“或”运算。格式:OROPRD1,OPRD25/9/2024135汇编语言程序设计教程逻辑非运算指令逻辑非运算指令NOT本指令的功能是完成对操作数的按位求反运算,结果送回给原操作数,本指令可以进行字节或字的“非”运算,不影响标志位。格式:NOTOPRD5/9/2024136汇编语言程序设计教程逻辑异或运算指令逻辑异或运算指令X
27、OR本指令的功能是实现两个操作数按位“异或”的运算,结果送至目的操作数中。XOR指令可以进行字节或字的“异或”运算。格式:XOROPRD1,OPRD25/9/2024137汇编语言程序设计教程测试指令测试指令TEST该指令与AND指令一样,也是对两个操作数进行按位的“与”运算,唯一不同之处是不将相“与”的结果送目的操作数。本指令对两个操作数的内容均不进行修改,仅是在逻辑“与”操作后,对标志位重新置位。格式:TESTOPRD1,OPRD25/9/2024138汇编语言程序设计教程逻辑移位指令逻辑移位指令 1.移位指令2.循环操作指令1)逻辑左移指令SHL格式:SHLOPRD1,COUNT2)逻辑
28、右移指令SHR格式:SHROPRD1,COUNT3)算术左移指令SAL格式:SALOPRD1,COUNT4)算术右移指令SHR格式:SAROPRD1,COUNTROLOPRD1,COUNTRCLOPRD1,COUNTROROPRD1,COUNTRCROPRD1,COUNT5/9/2024139汇编语言程序设计教程逻辑左移指令逻辑左移指令SHL 格式:SHL OPRD1,COUNT其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数。COUNT代表移位的次数(或位数)。移位一次,COUNT=1,移位多于一次时,COUNT=(CL),(CL)中为移位的次数。本指令的功能是对给定的目的操作数(
29、8位或16位)左移COUNT次,每次移位时最高位移入标志位CF中,最低位补零。5/9/2024140汇编语言程序设计教程逻辑右移指令逻辑右移指令SHR 格式:SHR OPRD1,COUNT其中OPRD1、COUNT与指令SHL中意义相同。本指令实现由COUNT决定次数的逻辑右移操作,每次移位时,最高位补零,最低位移至标志位CF中。5/9/2024141汇编语言程序设计教程算术左移指令算术左移指令SAL 格式:SAL OPRD1,COUNT其中OPRD1、COUNT与指令SHL中意义相同。本指令与SHL的功能也完全相同,这是因为逻辑左移指令与算术左移指令所要完成的操作是一样的。SAL可用于带符号
30、数的倍增运算,SHL只能用于无符号数的倍增运算。5/9/2024142汇编语言程序设计教程算术右移指令算术右移指令SHR 格式:SAR OPRD1,COUNT其中OPRD1、COUNT与指令SHL中意义相同。本指令通常用于对带符号数减半的运算中,因而在每次右移时,保持最高位(符号位)不变,最低位右移至CF中。5/9/2024143汇编语言程序设计教程移位指令操作示意图移位指令操作示意图5/9/2024144汇编语言程序设计教程循环移位指令循环移位指令这组指令只对标志位CF和OF有影响。CF由移入CF的内容决定,OF取决于移位一次后符号位是否改变,如改变,则OF=1。由于是循环移位,所以对字节移
31、位8次;对字移位16次,就可恢复为原操作数。由于带CF的循环移位,可以将CF的内容移入,所以可以利用它实现多字节的循环。ROLOPRD1,COUNTROROPRD1,COUNTRCLOPRD1,COUNTRCROPRD1,COUNT5/9/2024145汇编语言程序设计教程循环移位指令操作示意图循环移位指令操作示意图5/9/2024146汇编语言程序设计教程程序控制类指令程序控制类指令 控制转移类指令通过修改CS和IP寄存器的值来改变程序的执行顺序,包括五组指令:无条件转移指令、有条件转移指令、循环指令、过程调用和返回指令以及中断指令。利用程序控制类指令,可以实现分支、循环、子程序等程序结构。
32、5/9/2024147汇编语言程序设计教程无条件转移指令无条件转移指令JMP 指令格式:JMP OPRD其中OPRD为转移的目的地址。程序转移到目的地址所指向的指令后继续向下执行。无条件转移,就是无任何先决条件就能使程序改变执行顺序。处理器只要执行无条件转移指令JMP,就能使程序转移到指定的目标地址处。目标地址操作数的寻址方法可以是相对寻址、直接寻址或间接寻址。JMP指令根据目标地址不同的提供方法和内容,可以分成四种格式。段内转移,相对寻址段内转移,间接寻址段间转移,直接寻址段间转移,间接寻址5/9/2024148汇编语言程序设计教程条件转移指令条件转移指令JCC 指令格式:JCC OPRD条
33、件转移指令只有一个操作数OPRD,用以指明转移的目的地址。指令助记符中的“CC”表示条件。这种指令的执行包括两个过程:第一步,测试规定的条件;第二步,如果条件满足,则转移到目标地址;否则,继续顺序执行。条件转移指令的操作数必须是一个短标号,也就是说,所有的条件转移指令都是2字节指令,转移指令的下一条指令到目标地址之间的距离必须为128127。如果指令规定的条件满足,则将这个位移量加到IP寄存器上,以实现程序的转移。绝大多数条件转移指令(除JCXZ指令外)将状态标志位的状态作为测试的条件。因此,首先应该执行影响有关的状态标志位的指令,然后才能用条件转移指令测试这些标志,以确定程序是否转移。CMP
34、和TEST指令常常与条件转移指令配合使用。5/9/2024149汇编语言程序设计教程条件转移指令条件转移指令 5/9/2024150汇编语言程序设计教程循环控制指令循环控制指令 循环是一种特殊的转移流程,当满足(不满足)某条件时,反复执行一系列操作,直到不满足(满足)条件为止。循环流程的条件一般是循环计数,指令约定用CX寄存器作为计数器。在程序中用循环计数来控制循环次数。这类指令属于段内SHORT短类型转移,目的地址必须距本指令在-127128个字节的范围内。5/9/2024151汇编语言程序设计教程循环指令循环指令LOOP 指令的一般格式为:LOOP 标号功能:(CX)(CX)-1,(CX)
35、0,则转移至标号处循环执行,直至(CX)=0,继续执行后续程序。LOOP指令的操作是先将CX的内容减1,如结果不等于零,则转到指令中指定的短标号处;否则,顺序执行下一条指令。因此,在循环程序开始前,应将循环次数送CX寄存器。5/9/2024152汇编语言程序设计教程条件循环指令条件循环指令LOOPZ/LOOPE 指令的一般格式为:LOOPZ/LOOPE 标号功能:(CX)(CX)-1,(CX)0,且ZF=1时,转移至标号处循环。LOOPZ和LOOPE实际上代表同一条指令。本指令的操作也是先将CX寄存器的内容减1,如结果不为零,且零标志ZF=1,则转移到指定的短标号处。5/9/2024153汇编
36、语言程序设计教程条件循环指令条件循环指令LOOPNZ/LOOPNE 指令的一般格式为:LOOPNZ/LOOPNE 标号功能:(CX)(CX)-1,(CX)0,且ZF=0时,转移至标号处循环。本指令也同样有两种表示形式。指令的操作是将CX寄存器的内容减1,如结果不为零,且零标志ZF=0(表示“不相等”或“不等于零”),则转移到指定的短标号处。5/9/2024154汇编语言程序设计教程过程调用和返回指令过程调用和返回指令 如果有一些程序段需要在不同的地方多次反复地出现,则可以将这些程序段设计成为过程(相当于子程序),每次需要时进行调用。过程结束后,再返回到原来调用的地方。(1)过程调用指令CALL
37、 指令格式:CALL OPRD其中OPRD为过程的目的地址。过程调用可以分为段内调用和段间调用两种。寻址方式也可以分为直接寻址和间接寻址两种。(2)返回指令RET 指令格式:RET本指令的作用是:当调用的过程结束后实现从过程返回至原调用程序的下一条指令。5/9/2024155汇编语言程序设计教程中断指令中断指令 在程序运行时,遇到某些紧急情况或一些严重的错误(如溢出),当前程序应能够暂停,处理器中止当前程序运行,转去执行处理这些紧急情况的程序段。这种情况叫做“中断”。转去执行的处理中断的子程序叫做“中断服务程序”或“中断处理程序”。当前程序被中断的地方称为“断点”。中断服务程序执行完后应返回原
38、来程序的断点,继续执行被中断的程序。8086/8088具有很强的中断系统,可以处理256个不同方式的中断。每一个中断赋于一个中断向量码,CPU根据向量码的不同来识别不同的中断源。5/9/2024156汇编语言程序设计教程中断指令中断指令(1)溢出中断指令INTO 指令格式:INTO功能:本指令检测OF标志位,当OF=1时,说明已发生溢出,立即产生一个中断类型4的中断,当OF=0时,本指令不起作用。(2)软中断指令INT 指令格式:INT n其中n为软中断的类型号。功能:本指令将产生一个软中断,把控制转向一个类型号为n的软中断,该中断处理程序入口地址在中断向量表的n4地址处的两个存储字(4个单元
39、)中。(3)中断返回指令IRET 指令格式:IRET功能:用于中断处理程序中,从中断程序的断点处返回,继续执行原程序。5/9/2024157汇编语言程序设计教程串操作类指令串操作类指令 串操作类指令是一组具有修改数据串操作指针功能的指令。数据串可以是字节串,也可以是字串。数据串只能放在存储器中,对数据串的数据进行处理时,可以只对一个数据串进行,也可以对两个数据串进行,根据数据串中数据的流动方向,可以分源数据串和目的数据串。8086/8088指令系统还为串操作类指令提供重复前缀,以便重复进行相同的操作。串操作指令中,源操作数用寄存器SI寻址,默认在数据段DS中,但允许段超越;目的操作数用寄存器D
40、I寻址,默认在附加段ES中,不允许段超越。每执行一次串操作指令,作为源地址指针的SI和作为目的地址指针的DI将自动修改:1(对于字节串)或2(对于字串)。地址指针是增加还是减少则取决于方向标志DF。5/9/2024158汇编语言程序设计教程串传送指令串传送指令MOVS 指令格式:MOVS OPRD1,OPRD2 MOVSB MOVSW其中OPRD1为目的串符号地址,OPRD2为源串符号地址。指令功能:OPRD1OPRD2串传送指令MOVS将数据段主存单元的1字节或字,传送到附加段的主存单元中。5/9/2024159汇编语言程序设计教程串比较指令串比较指令CMPS 指令格式:CMPS OPRD1
41、,OPRD2 CMPSB CMPSW 其中OPRD1为目的串符号地址,OPRD2为源串符号地址。串比较指令CMPS将由SI寻址的源串中数据与DI寻址的目的串中数据(字或字节)进行比较,比较结果送标志位,而不改变操作数本身。同时,SI、DI将自动调整。CMPS指令影响标志位AF、CF、OF、SF、PF、ZF。CMPS指令可用来检查两个字符串是否相同,可以使用循环控制方法对整串进行比较。5/9/2024160汇编语言程序设计教程串扫描指令串扫描指令SCAS 指令格式:SCAS OPRD SCASB SCASW其中OPRD为目的串符号地址。串扫描指令SCAS将AL或AX的内容与附加段中由DI寄存器寻
42、址的目的串中的数据进行比较,根据比较结果设置标志位,但不改变操作数本身。每次比较后修改DI寄存器的值,使之指向下一个元素。SCAS指令影响标志位AF、CF、OF、SF、PF、ZF。SCAS指令可查找字符串中的一个关键字,只需在本指令执行前,把关键字放在AL或AX中,用重复前缀可在整串中查找。5/9/2024161汇编语言程序设计教程串读取指令串读取指令LODS 指令格式:LODS OPRD LODSB LODSW其中OPRD为源串符号地址。串读取指令LODS的功能是把SI寻址的源串的数据字节送AL或数据字送AX中去,并根据DF的值,地址指针SI进行自动调整。LODS指令不影响标志位。5/9/2
43、024162汇编语言程序设计教程字符串存储指令字符串存储指令STOS 指令格式:STOS OPRD STOSB STOSW其中OPRD为目的串符号地址。本指令的功能是把AL或AX中的数据存储到DI为目的串地址指针所寻址的存储器单元中去。地址指针DI将根据DF的值进行自动调整。STOS指令与LODS指令功能互逆。STOS指令不影响标志位。5/9/2024163汇编语言程序设计教程重复前缀的说明重复前缀的说明 在串操作指令前加上重复前缀,可以对数据串进行重复处理。由于加上重复前缀后,对应的指令代码是不同的,所以指令的功能便具有重复处理的功能,重复的次数存放在CX寄存器中。重复前缀形式有:REP ;
44、CX 0,重复执行字符串指令REPZ/REPE ;CX 0,且ZF=1重复执行字符串指令REPNZ/REPNE ;CX 0,且ZF=0重复执行字符串指令5/9/2024164汇编语言程序设计教程处理器控制类指令处理器控制类指令 1标志位操作指令标志位操作指令有7条,可以直接设置或清除CF、DF和IF标志位。例如串操作中的程序,经常用CLD指令清方向标志使DF=0,在串操作指令执行时,按增量的方式修改串指针。5/9/2024165汇编语言程序设计教程处理器控制类指令处理器控制类指令 2CPU控制指令(1)处理器暂停指令HLT指令格式:HLT HLT指令使CPU进入暂停状态,这时CPU不进行任何操
45、作。当CPU发生复位(RESET)或来自外部的中断(NMI或 INTR)时,CPU脱离暂停状态。(2)处理器等待指令WAIT指令格式:WAIT WAIT指令在8086/8088的测试输入引脚为高电平无效时,使CPU进入等待状态,这时,CPU并不做任何操作。(3)处理器交权指令ESC指令格式:ESC EXTOPRD,OPRD 其中EXTOPRD为外部操作码(浮点指令的操作码),是一个6位立即数;OPRD为源操作数,可以是寄存器或内存单元。交权指令ESC把浮点指令交给浮点处理器执行。5/9/2024166汇编语言程序设计教程处理器控制类指令处理器控制类指令(4)空操作指令NOP指令格式:NOPNO
46、P指令不执行任何有意义的操作,但占用1字节存储单元,空耗一个指令执行周期。该指令常用于程序调试。(5)封锁总线指令LOCKLOCK是一个指令前缀,可放在指令的前面。这个前缀使得在当前指令执行时间内,8086/8088 处理器的封锁输出引脚有效,即把总线封锁,使别的控制器不能控制总线,直到该指令执行完后,总线封锁解除。当CPU与其他处理器协同工作时,LOCK指令可避免破坏有用信息。(6)段超越前缀指令SEG:;即CS:,SS:,DS:,ES:,取代默认段寄存器在允许段超越的存储器操作数之前,使用段超越前缀指令,将不采用默认的段寄存器,而是采用指定的段寄存器寻址操作数。5/9/2024167汇编语
47、言程序设计教程输入输出类指令输入输出类指令 输入输出指令共有两条。输入指令IN用于从外设端口接收数据,输出指令OUT则向端口发送数据。无论是接收到的数据或是准备发送的数据都必须在累加器AL(字节)或AX(字)中,所以这是两条累加器专用指令。输入/输出指令可以分为两大类:一类是端口直接寻址的输入/输出指令;另一类是端口通过DX寄存器间接寻址的输入/输出指令。在直接寻址的指令中只能寻址256个端口(0255),而间接寻址的指令中可寻址64K个端口(065535)。5/9/2024168汇编语言程序设计教程输入指令输入指令IN 指令格式:IN AL,n (AL)(n)IN AX,n (AX)(n+1
48、),(n)IN AL,DX (AL)(DX)IN AX,DX (AX)(DX+1),(DX)其中:n为8位的端口地址,当字节输入时,将端口地址n的内容送至AL中;当字输入时,将端口地址n+1的内容送至AH中,端口地址n的内容送至AL中。端口地址也可以是16位的,但必须将16位的端口地址送入DX中。5/9/2024169汇编语言程序设计教程输出指令输出指令OUT 指令格式:OUT n,AL (n)(AL)OUT n,AX (n+1),(n)(AX)OUT DX,AL (DX)(AL)OUT DX,AX (DX+1),(DX)(AX)OUT指令中各个操作数的定义与IN指令相同。5/9/202417
49、0汇编语言程序设计教程3.3 80 x86指令系统介绍指令系统介绍3.3.1 80 x86寻址方式3.3.2 80286指令系统新增指令3.3.3 80386指令系统新增指令3.3.4 80486指令系统新增指令3.3.5 Pentium指令系统新增指令5/9/2024171汇编语言程序设计教程80 x86指令系统介绍指令系统介绍 80 x86系列微处理器指令系统保持向上兼容,如80486微处理器可兼容执行8086、80286和80386的指令。5/9/2024172汇编语言程序设计教程80 x86寻址方式寻址方式 8086/8088的寻址方式也适用于80 x86。下面介绍的寻址方式都是针对存
50、储器操作数的寻址方式,它们均与比例因子有关,这些寻址方式只能用在80386及其后继机型中。在80386及其后续机型中,8个32位的通用寄存器EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI既可以存放数据,也可以存放地址,也就是说,这些寄存器都可以用来提供操作数在段内的偏移地址。5/9/2024173汇编语言程序设计教程比例变址寻址方式比例变址寻址方式 操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子再加上位移量之和,所以有效地址由3种成份组成。这种寻址方式与寄存器相对寻址相比,增加了比例因子,其优点在于:对于元素大小为2、4、8字节的数组,可以在变址寄存器中给出数组元素
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100