全套课件-DOS-Windows汇编语言程序设计教程_第1页
全套课件-DOS-Windows汇编语言程序设计教程_第2页
全套课件-DOS-Windows汇编语言程序设计教程_第3页
全套课件-DOS-Windows汇编语言程序设计教程_第4页
全套课件-DOS-Windows汇编语言程序设计教程_第5页
已阅读5页,还剩518页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程性质

本课程是计算机科学与技术专业的必修课程、也是本系其它专业专业课程学习的专业基础课程。教学目的

本课程向学生介绍汇编语言程序设计的方法和技巧。以PC计算机的汇编语言为主,通过课堂教学和上机实习,使学生掌握DOS和Windows汇编序言程序设计的特点及技术,即汇编工具Masm611和Masm32的使用;掌握软件与硬件的交互原理,即DOS、BIOS功能的调用方法、MSDN的使用、API的调用熟练使用使用调试工具Debug和W32Dasm理解高级语言的实现原理1.1汇编语言的由来与特点计算机语言是人与计算机之间交流信息的工具程序:用计算机语言描述的处理步骤。程序设计:编制处理步骤的过程。计算机语言可分为三类:◆机器语言◆汇编语言◆通用语言面向机器设计的,低级语言面向程序设计人员设计的,高级语言机器指令是CPU能直接识别并执行的指令它的表现形式是二进制编码。机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。

机器语言是直接用描述机器指令来设计程序,它是CPU能直接识别的唯一一种语言。也就是说,CPU能直接执行用机器语言描述的程序。一、机器语言10100000;1号单元内容取入AL寄存器000000010000000010001010;2号单元内容取入AH寄存器00100110000000100000000000000000;AL的内容与AH的内容相加,结11100000;果存入AL中10100010;AL的内容送入3号单元000000110000000011110100;停机一、机器语言一、机器语言缺点:(1)机器语言难记,程序难编,易错,调试困难;(2)机器语言通用性差。优点:(1)计算机能直接认识、执行;(2)算法刻画细致;(3)程序紧凑,占用内存空间少,执行速度高;(4)能充分发挥计算机的硬件功能。二、汇编语言

随着计算机的发展,产生了符号语言,上面的程序用符号语言编写如下:

MOV AL,DATA1 ;取第一个数据

MOV AH,DATA2 ;取第二个数据

ADD AL,AH ;求和

MOV RLT,AL ;保存结果

HLT ;停机二、汇编语言汇编语言:符号语言的词法、语法规则及伪指令符号就构成了汇编语言。汇编过程:把汇编语言程序翻译成机器语言程序的过程称为汇编过程。汇编程序:完成汇编过程的程序称为汇编程序。汇编语言程序:程序设计人员用汇编语言编写的程序,是汇编程序加工的对象,称为源程序。目标程序:汇编程序产生的结果,也称作是目的程序。DSEGSEGMENT ;数据段开始DATA1DB15HDATA2DB26HRLTDB0DSEGENDS ;数据段结束CSEGSEGMENT ;代码段开始

ASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEG ;设置数据段基址

MOVDS,AXMOVAL,DATA1 ;取第一个数据

MOVAH,DATA2 ;取第二个数据

ADDAL,AH ;求和

MOVRLT,AL ;保存结果

HLT ;停机CSEGENDS ;代码段结束

ENDSTART ;源程序结束二、汇编语言种类:8086汇编,8051汇编等执行过程:二、汇编语言汇编程序计算机源程序目标程序连接程序可执行程序二、汇编语言优点:(1)程序容易编制、出错机会少、容易调试;(2)算法刻画细致;(3)程序紧凑、占用内存空间少、执行速度高;(4)能充分发挥计算机的硬件功能。缺点:(1)计算机不能直接认识、执行,必须经过汇编变为机器语言程序;(2)通用性差。通用语言:是用来对计算机操作步骤进行描述的一整套标记符号、表达格式、结构及其使用的语法规则。种类:Pascal,BASIC,C,COBOL,Java等等例子(C):inti,j,k;

k=i+j;三、通用语言(高级语言)执行过程:三、通用语言(高级语言)编译程序计算机源程序目标程序连接可执行程序三、通用语言(高级语言)优点:(1)程序容易编制、出错机会少、容易调试;(2)容易表达算法;(3)通用性强。缺点:(1)计算机不能直接认识、执行,必须经过编译变为机器语言程序;(2)编译后生成的机器语言程序冗长、占用内存空间多、执行速度低;(3)不能充分发挥计算机的硬件功能。计算机语言发展简史机器语言汇编语言高级语言FORTRANBASICCOBOLPASCALC/C++JAVA…...汇编语言的应用领域汇编语言的优点在于“与机器相关”和“执行的高效率”。但也导致其可移植性差和调试难。所以,我们在选用汇编语言时要根据实际的应用环境,尽可能避免其缺点对整个应用系统的影响。汇编语言主要适用于下列领域:要求执行效率高、反应快的领域,如操作系统内核,工业控制,实时系统等。系统性能的瓶颈,或频繁被使用子程序或程序段。与硬件资源密切相关的软件开发,如设备驱动程序。受存储容量限制的应用领域,如家用电器的计算机控制功能。其它高级语言不适合的开发环境。学好汇编的意义理解硬件的控制原理:比如,控制磁盘驱动器、控制键盘、控制鼠标,等等。在学过汇编以后,可以和我们以前学习过的《计算机原理》结合起来,对硬件的控制,硬件与软件的交互机理有深入的认识。深入理解高级语言:我们学过C语言,知道C语言用cin和cout怎么输入输出字符,在汇编中可以知道它们是怎么实现的。其它语句如switch、if…else、goto等,其它函数如strcmp、strlen、strcmp,我们也可以模拟它们的实现。软件的加密解密:存在盗版软件,是因为有人对软件进行破解,让其保护方式失去作用。保护自己的软件,需要对软件进行加密,汇编语言可以显示它的威力。信息安全:尤其在反病毒方面。例如,病毒为什么能够感染可执行文件,假设一个文件感染了病毒,我们怎么去分析它,祛除病毒代码,都只有汇编语言更适合一些。1.2系统结构微型计算机的系统结构微型计算机的系统包括硬件系统、软件系统。首先介绍微型计算机系统的基本结构,然后分别以8086为例介绍16位微处理器的结构和以80386为例介绍32位微处理器的结构。

硬件系统硬件是指构成计算机物理设备的实体(如CPU、显卡、外部设备等),一台计算机所有硬件的集合构成了计算机的硬件系统。一般将其分为微处理器、主存储器、接口电路、外部设备和系统总线等。微型计算机的系统结构微处理器就是由控制器和算术逻辑部件(ALU)组成的中央处理器(即CPU)。它的作用是自动地执行各条指令,协调整个系统的工作。主存储器是计算机的记忆装置,用于存储计算机当前正在执行的程序和数据,我们通常接触的是RAM,它是一种随机存取存储器。系统总线是将CPU与存储器及外部设备连接起来的总线,它是用来传输信息的。按传输信息的种类不同把系统总线分为地址总线(AB)、数据总线(DB)、控制总线(CB)。外部设备按功能可分为二类:一类是与计算机进行通讯的设备如键盘、打印机和显示器等,这些设备与计算机的通讯是通过I/O接口实现的。另一类是用来存储信息的设备如磁盘、光盘等。

软件系统软件是指所有程序和数据的总称。通常我们将它分为系统软件和应用软件两大类。

系统软件主要用来对计算机系统实际运行进行控制,管理和服务的。它主要分为操作系统(如DOS、Unix、windows、Macintosh、Linux等),诊断程序,调试程序和语言处理程序如编译程序、解释程序和汇编程序等。

应用软件指的是用户自己编写的各类应用程序。INTEL8086/808816位机的系统结构Intel8086/8088是第三代微处理器。在汇编语言一级,它们与第二代微处理器8080/8085是兼容的。8086有20条地址线,16条数据线,直接寻址的内存空间可达1MB(220)。8088和8086内部组成完全相同,不同的是8088外部数据总线只有8条。因此8088被称为准16机。IBMPC机及其兼容机上广泛采用了8088CPU。8086/8088CPU按功能可分为二个部分:总线接口单元(BIU:BusInterfaceUnit)和执行单元(EU:ExecuteUnit)。BIU由地址加法器,指令指针寄存器IP,指令流字节队列和四个段寄存器(ES、CS、SS、DS)所组成的,它主要负责CPU与存储器及外部设备之间的信息传输。EU由算术逻辑单元ALU(ArithmeticandLogicUnit),执行单元控制系统,8个16位寄存器和一个标志寄存器PSW组成,它负责全部指令的执行,即负责向总线接口单元提供数据和地址,并对通用寄存器和标志寄存器进行管理,在ALU中进行算术运算和逻辑运算。8086/8088CPU的寄存器8086/8088的寄存器分为4种类型:(1)通用寄存器(2)指针和变址寄存器(3)段寄存器(4)标志寄存器(1)通用寄存器(2)指针与变址寄存器(3)段寄存器(4)标志寄存器标志寄存器长度为16位,其中9个位有定义。××××OF

DFIFTFSF

ZF×AF×PF

×CF1514131211109876543210CF,CarryFlag,进位标志,两数相加,最高位向前的进位;或两数相减最高位向前的借位,举例:100000011000000000000001+1100000001000000111111111-1AF,AuxiliaryCarryFlag,辅助进位标志,两数相加,第3位向前的进位;或两数相减第3位向前的借位,举例:000010010000100000010001+000000000000000111111111-PF,ParityFlag,奇偶标志,两数操作(算术或逻辑),结果的低8位中含有1的位数是偶还是奇。举例:100001011010110010011101100101111000010110000100∧结果:PF=1ZF,ZeroFlag,零标志,操作结果为0,则ZF为1。举例:111111110000000100000000+进位1操作结果为0,ZF=1SF,SignFlag,符号标志,操作结果的符号位(即最高位的状态)。举例:100001011010110010011101100101111000010110000100结果:SF=1∧OF,OverflowFlag,溢出标志,算术操作,结果超过目标所能容纳的范围。举例:01111110(+126)00000011(+3)10000001(-127)+8086/8088存储器结构存储器的分段结构实际地址的产生存储器的分段结构长度≤64KB:段地址XXXX0H:偏移地址段地址:段首单元在整个1MB单元中的编号,其最低4位一定为0,高16位保存在段寄存器中。偏移地址:单元所在位置距离其所在段段首单元的距离,段首单元的偏移地址为0000H,后续的单元顺次增1。因此,对于存储空间中的任意一个单元,我们都可以通过段地址和段内的偏移地址唯一地确定。存储器的分段结构存储器的分段结构

指针变址寄存器SI,DI,BP,SP存放的是在某一段内寻址的单元的偏移地址。其中SI和DI存放的是数据段内某单元的偏移地址,而BP和SP存放的则是堆栈段内某单元的偏移地址。指令指针IP用以存放下一条要执行的指令在当前代码段内的偏移地址。实际地址的产生实际地址:也称物理地址,是该单元在整个1MB单元中的编号,用一个20位的二进制数表示,范围从00000H~FFFFFH,该地址是唯一的。CPU与存储器进行数据交换时所使用的地址即是实际地址。逻辑地址:由两部分组成,即段地址和偏移地址。我们在编写程序时所使用的地址即是逻辑地址。首先将存储器分段之后段地址的高16位存入相应的段寄存器中,然后再通过段内的偏移地址对所需的单元进行访问。实际地址的产生段地址偏移地址00450H0000H 0001H 0002H 0003H 0004H

:::

FFFDH FFFEH FFFFH逻辑地址:::00450H00451H00452H00453H00454H:::1044DH1044EH1044FH

物理地址(实际地址)实际地址的产生举例:CS=9482,IP=2350,实际地址为:1001010010000010001000110101000010010110101101110000一个实际地址可以对应多个逻辑地址。堆栈堆栈是按先进后出的原则在内存中组织的一个特殊的存储区域。该区域一端固定一端活动,固定的一端称为栈底,而活动的一端称为栈顶。往堆栈中存入或取出信息总是在堆栈的栈顶单元进行的。CPU中的堆栈指针指示器SP总是指向堆栈的栈顶,而堆栈段寄存器SS则指明了堆栈段的起始位置。8038632位机的系统结构Intel80386是为满足高性能的应用领域与多用户、多任务的操作系统的需要而设计的,其最大的特点是在CPU芯片上集成了一个存储器管理部件(MMU),可对246字节的虚拟存储器和4千兆字节的物理存储器进行分段和分页管理,段的最大长度为4千兆字节。80386采用CHMOS工艺,陶瓷网格阵列(PlasticGridArray,PGA)封装,全32位结构,它的时钟频率有16MHZ和20MHZ两种,总线周期只有2个时钟周期。体系结构80386的内部结构由六个功能部件组成:总线接口部件BIU(BusInterface)、指令预取部件IPU(InstructionPrefetchUnit)、指令译码部件IDU(InstructionDecodeUnit)、存储器管理部件MMU(MemoryManagementUnit)、执行部件EU(ExecutionUnit)和控制部件。这6个部件可以并行地工作,构成一个六级流水线体系结构。这样,可以同时处理多条指令以减少程序实际执行时间。总线接口部件BIU完成在总线周期内对必要的信号进行控制。在80386内部,指令预取部件要从存储器取指令,执行部件在执行指令时要访问存储器以读/写数据、分页部件将线形地址转换成物理地址后,都会发出总线周期请求。总线接口部件会根据优先级对这些请求进行仲裁,从而有条不紊地服务于多个请求,并产生相应总线操作所需信号,包括地址信号、数据信号、读/写控制信号等。此外,总线接口部件也实现80386和协处理器之间的协调控制。指令预取部件IPU从存储器中以4个字节为单位预取指令,按顺序存放到16个字节的预取指令队列中,以便在CPU执行当前指令时,指令译码部件对下一条指令进行译码。指令译码部件IDU从指令预取部件中的预取指令队列里按顺序取出指令并译码。执行部件包括8个32位的通用寄存器组、32位的算术逻辑运算单元ALU、1个64位的桶形移位寄存器和一个乘法除法器,它们共同执行各种数据处理和运算。此外,执行部件中还包括ALU控制部分和保护测试部分,前者实现有效地址的计算、乘除法的加速等功能,后者检验指令执行中是否符合涉及的存储器分段规则。80386允许使用虚拟存储器。所谓虚拟存储器就是系统中有一个速度较快的、容量比较小的内部主存储器,还有一个速度较慢但容量较大的外部存储器,通过存储管理机制,使后者和前者有机地、灵活地组合在一起,这样从程序员的角度看,系统中似乎有一个容量很大、速度也相当快的主存储器MM(MainMemory),但它并不是真正的物理上的主存,所以称为虚拟存储器VM(VirtualMemory)。INTEI80386系统中,存储体按段划分,每个段的容量可变,最大可达4GB(232字节)。分段的作用是可以对容量可变的代码存储块或数据存储块提供模块性和保护性。每个段又划分为多个页面,一个页面可为1到4K字节。但在80386中,为了简化硬件和操作系统中的页定位计算,每页固定为4K字节。分页的作用是便于实现虚拟存储器管理,通常在内存和磁盘进行映象时,都以页为单位把CPU的地址空间映象到磁盘。存储器管理部件MMU的功能就是实现存储器的管理,它由分段部件SU(SegmentUnit)和分页部件PU(PageUnit)组成。分段部件SU管理面向程序员的逻辑地址空间,并且将逻辑地址转换为线形地址,在芯片上有一个段描述符高速缓冲寄存器,其中存有当前使用的段描述符,它可以加快这种转换;分页部件PU管理物理地址空间,将分段部件或者指令译码部件产生的线形地址转换为物理地址,在芯片上有一个页描述符高速缓冲寄存器,它存放着页描述符。

80386内部寄存器

80386内部共有34个寄存器,它们可以分为7类:通用寄存器、指令指针及标志寄存器、段寄存器、控制寄存器、系统地址寄存器、调试寄存器和测试寄存器。通用寄存器:是8086/8088/80286中相应16位通用寄存器的扩展,命字分别是:EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP,用来存放数据和偏移地址。为了和8086/8088/80286兼容,每个通用寄存器的低16位可以独立访问,此时,它们的名称分别为AX、BX、CX、DX、SI、DI、BP、SP。同时,为了和8080/8085兼容,AX、BX、CX、DX寄存器的低8位和高8位也可以独立访问,分别称为AL、BL、CL、DL和AH、BH、CH和DH。32位的指令指针寄存器EIP由8086的IP扩展而来,用来存放将要执行的下一条指令的地址偏移量,寻址范围为4GB。为了和8086兼容,EIP的低16位可作为独立指针,称为IP,则其寻址范围为64KB。32位的标志寄存器EFLAGS中容纳三类标志:状态标志、控制标志和系统方式标志。状态标志是CPU在执行指令过程中产生的,控制标志可以由程序员通过指令来设置,系统方式标志是和系统所处的工作模式密切相关。80386内部设置了6个16位的段寄存器CS、SS、DS、ES、FS、GS。前4个段寄存器的名称和8086/8088相同。为了得到更大的存储空间,80386采用了比8086更加巧妙的办法来得到段基地址。在这里,段寄存器作为进入存储器中的一张表的变址寄存器,根据段寄存器的值可以从表中找到一个项,这张表是由操作系统建立的,称为段描述符表。表内每一项称为描述符,每一个描述符对应一个段。描述符中含有对应段的起始地址即段基地址、段界限和段的属性。CS寄存器指向代码段对应的段描述符,由此可以找到当前代码段的段基地址,相类似的,SS指向当前堆栈段对应的段描述符,DS寄存器指向当前数据段对应的段描述符,而ES、FS、GS指向当前三个附加段对应的段描述符。80386内部有3个32位的控制寄存器CR0、CR2、CR3,用来保存机器的各种全局性状态。这些状态影响系统所有任务的运行,它们主要是供操作系统使用的,因此操作系统设计人员需要熟悉这些寄存器。在INTEL80386中有4个系统地址寄存器,即全局描述符表寄存器GDTR(GlobalDescriptorTableRegister)、中断描述符寄存器IDTR(InterruptDescriptorTableRegister)、任务状态寄存器TR(TaskStateRegister)和局部描述符表寄存器LDTR(LocalDescriptorTableRegister)。INTEL80386有8个32位的调试寄存器DR0~DR7。这些寄存器可以使程序员在调试过程中一次设置4个断点,DR0~DR3用来容纳4个32位的断点线性地址;DR4、DR5为备用寄存器;DR6是断点状态寄存器,其中保存了几个调试标志,用来协助断点调试;DR7为断点控制寄存器,可以通过对应位的设置来有选择地允许和禁止断点调试,比如仅在写数据时作为断点,或者仅在读/写数据时作为断点等。INTEL80386设置了8个32位的测试寄存器TR0~TR7,其中TR0~TR5由Intel公司保留,用户只能访问TR6、TR7。这2个32位测试寄存器TR6和TR7用于存储器测试,TR6为测试命令寄存器,其中存放测试控制命令,TR7为数据寄存器,容纳存储器测试所得的数据。。

80386的三种工作方式实地址模式(RealAddressModal)保护虚地址模式(ProtectedVirtualAddressMode)虚拟8086模式(Virtual8086Modal)。1.3

数据表示计算机处理的信息可分为两大类:一类是按进位计算制表示的有大小、正负之分的数值信息;另一类是非数值信息,如字符、文字、图像、逻辑数据等。但在计算机内部所有信息都要转换成0和1表示的二进制编码。数制及其转换计算机汇编语言中常用的计数制有:十进制数(Decimal)二进制数(Binary)十六进制数(Hexadecimal)八进制数(Octal)。数制的转换

整数的转换采用“除2取余”法。把要转换的十进制数的整数部分不断除以2并在右边记下余数,然后以此类推,直到最后的商为0,最后我们将余数倒着排列即得结果。

小数的转换采用“乘2取整”法。小数的转换正好与整数的转换相反,将小数部分不断的乘以2在右边记下成绩整数部分,依此类推,直到最后小数部分为0或结果已达到精度要求为止。先取出来的整数作高位,后取出的整数作低位,顺序排列即可。将十进制数转换成二进制数。

125.6875D=1111101.1011B将十进制数转换成八/十六进制数

100D=64H

65535=0FFFFH

255=0FFH二/八/十六进制数转换成十进制数转换方法是采用位置记数法把他们写成相应的幂运算形式,然后求和即可得到结果。

572.34Q=5*82+7*8+2+3*8-1+4*8-2=378.4375D

二进制数与八进制数的转换

二进制数转换成八进制数只需将二进制数从小数点开始每3位转成一位八进制数,整数部分由最低位开始划分,小数部分从最高位开始划分。

101111010.011100B

=572.34Q二进制数与十六进制数的转换

101111010.011111B

=17A.7CH有符号数的表示法原码:原码表示最高位为0表示正数,为1表示负数,其余位表示数的绝对值。对于整数,原码可以用下面的公式表示:

X当0≤X<2n[X]原=

2n-X=2n+|X|当0≥X>-2n对于小数,原码用下面的公式表示:

X当1>X≥0[X]原=

1-X=1+|X|当0≥X>-1反码:正数的反码表示和原码相同,最高位为0表示正数,其余位表示数的绝对值。负数的反码表示可以在其原码表示的基础上保持符号位不变,其余位求反。对于整数,反码用下面的公式表示:

X当0≤X<2n[X]反=

(2n+1-1)+X当0≥X>-2n对于小数,反码用下面的公式表示:

X当0≤X<2n[X]反=

(2-2-n)+X当0≥X>-1补码:正数的补码表示和原码相同,最高位为0表示正数,其余位表示数的绝对值。负数的补码表示可以在其原码表示的基础上保持符号位不变,其余位求反末位加1。对于整数,补码用下面的公式表示:

X当0≤X<2n[X]补=

2n+1+X当0≥X>-2n对于小数,反码用下面的公式表示:

X当0≤X<2n[X]补=

2+X=2-|X|当0≥X>-1BCD码和字符编码

BCD码(BinaryCodeDecimal)在日常生活中人们常用的是十进制数,而机器内部又只能处理二进制数,因此我们引进了BCD码。BCD码是用四位的二进制数来表示一位十进制数。常用的BCD码有8421BCD码,5421BCD码,2421BCD码和余3码等。

ASCII码(

AmericanStandardCodeforInformationInterchange)除了数值数据外,计算机还可处理人们常用的符号,如字母,标点符号等。在计算机中这些符号是用ASCII码来表示的。ASCII码用一个字节的二进制数来表示一个字符,但实际只用了七位,最高位被用来做奇偶校验位。在原来7位ASCII码的基础上加上一位校验位,使一个字节中包含1的个数为奇数(或偶数)就称为奇校验或偶校验。

ASCII码UnicodeUnicode是一个16位的字符集,它包括了几乎所有常见的信息交换用的字符(英、法、德、中(简、繁)、朝鲜、日等),其64K的编码空间有大约1/3尚未分配。学习要求●掌握16位指令系统中常用指令的使用。●掌握源程序中常用的伪指令。●掌握宏汇编源程序的结构及其编程方法。●掌握宏汇编语言上机调试过程。2.116位汇编程序设计概述在DOS下用汇编语言开发程序的工具是Masm和Tasm。Masm常用的有Masm611和Masm614两个版本,Tasm是Borland公司提供的工具。用Masm.exe来将源程序生成目标文件。ML.exe既可以产生目标文件,也可以产生可执行文件。调试可执行文件用Debug.exe或CV.exe。汇编语言程序的特点编程的第一步是编写源程序。用记事本等一切可以以纯文本方式编辑保存文件的工具进行。文件必须保存为扩展名为asm的文件,且文件名不能超过8个ASCII码字符。汇编语言程序的特点源程序中要使用指令,指令是最小的代码单元。指令分为两种,一种叫硬指令,另一种叫伪指令。硬指令是机器事实上存在的指令例如:MOVAX,1234

在源程序中写下这条指令,生成可执行文件后,反汇编仍然存在这条指令。汇编语言程序的特点伪指令是告诉编译器的一些说明性语句,编译器承认,而CPU中无此指令。例如:X1DW0

这是一条用伪指令DW定义字变量的语句,编译器会将它在数据段中产生一个字的空间且初始化为0。程序中并没有X1这个变量,其它指令操作该变量都会被编译成从X1的地址读写数据。指令寻址方式从8086的机器代码格式入手,论述:立即数寻址方式寄存器寻址方式存储器寻址方式进而熟悉8086汇编语言指令格式,尤其是其中操作数的表达方法;为展开8086指令系统做好准备指令的组成指令由操作码和操作数两部分组成操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分操作数是指令执行的参与者,即各种操作的对象有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数操作码操作数指令的操作码和操作数每种指令的操作码:用一个唯一的助记符表示(指令功能的英文缩写)对应着机器指令的一个二进制编码指令中的操作数:可以是一个具体的数值可以是存放数据的寄存器或指明数据在主存位置的存储器地址寻址方式指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻址操作数采取哪一种寻址方式,会影响机器运行的速度和效率标准机器代码示例

mov

ax,[BP+0]

;机器代码是8B4600前一个字节8B是操作码(含w=1表示字操作)中间一个字节46(01000110)是“modregr/m”字节reg=000表示目的操作数为AXmod=01和r/m=110表示源操作数为[BP+D8]最后一个字节就是8位位移量〔D8=〕001/2字节0/1字节0/1/2字节0/1/2字节操作码modregr/m位移量立即数其它机器代码形式moval,05;机器代码是B005前一个字节B0是操作码(含一个操作数AL),后一个字节05是立即数movax,0102H;机器代码是B80201前一个字节B8是操作码(含一个操作数AX),后两个字节0201是16位立即数(低字节02在低地址)操作码操作数指令的助记符格式

操作码操作数1,操作数2

;注释操作数2,称为源操作数src,它表示参与指令操作的一个对象操作数1,称为目的操作数dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果分号后的内容是对指令的解释示例传送指令MOV的格式MOV

dest,src

;dest←srcMOV指令的功能是将源操作数src传送至目的操作数dest,例如:MOVAL,05H ;AL←05HMOVBX,AX ;BX←AXMOVAX,[SI] ;AX←DS:[SI]MOVAX,[BP+06H] ;AX←SS:[BP+06H]MOVAX,[BX+SI] ;AX←DS:[BX+SI]演示传送指令MOV的功能源操作数src目的操作数dest30H30H被传送的数据立即数寻址方式指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)这种操作数被称为立即数imm它可以是8位数值i8(00H~FFH)也可以是16位数值i16(0000H~FFFFH)立即数寻址方式常用来给寄存器赋值立即数寻址指令MOVAL,05H

;AL←05HMOVAX,0102H

;AX←0102H指令功能执行过程寄存器寻址方式操作数存放在CPU的内部寄存器reg中,可以是:8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP4个段寄存器seg:CS、DS、SS、ES寄存器寻址指令MOVAX,1234H ;AX←1234HMOVBX,AX

;BX←AX指令功能执行过程存储器寻址方式指令中给出操作数的主存地址信息(偏移地址,称之为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中8086设计了多种存储器寻址方式1、直接寻址方式2、寄存器间接寻址方式3、寄存器相对寻址方式4、基址变址寻址方式5、相对基址变址寻址方式直接寻址方式有效地址在指令中直接给出默认的段地址在DS段寄存器,可使用段超越前缀改变MOVAX,[2000H];AX←DS:[2000H];指令代码:A10020MOVAX,ES:[2000H];AX←ES:[2000H];指令代码:26A10020指令功能执行过程寄存器间接寻址方式有效地址存放在基址寄存器BX或变址寄存器SI、DI中默认的段地址在DS段寄存器,可使用段超越前缀改变MOVAX,[SI]

;AX←DS:[SI]指令功能执行过程寄存器相对寻址方式有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI有效地址=BX/BP/SI/DI+8/16位位移量段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变寄存器相对寻址指令MOVAX,[DI+06H]

;AX←DS:[DI+06H]MOVAX,[BP+06H]

;AX←SS:[BP+06H]指令功能执行过程基址变址寻址方式有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址=BX/BP+SI/DI段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变基址变址寻址指令MOVAX,[BX+SI]

;AX←DS:[BX+SI]MOVAX,[BP+DI]

;AX←SS:[BP+DI]MOVAX,DS:[BP+DI]

;AX←DS:[BP+DI]指令功能执行过程相对基址变址寻址方式有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:有效地址=BX/BP+SI/DI+8/16位位移量段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变相对基址变址寻址指令MOVAX,[BX+SI+06H]

;AX←DS:[BX+SI+06H]

位移量可用符号表示

同一寻址方式有多种表达形式指令功能执行过程用符号表示位移量在寄存器相对寻址或相对基址变址寻址方式中,位移量可用符号表示:MOVAX,[SI+COUNT];COUNT是事先定义的变量或常量(就是数值)MOVAX,[BX+SI+WNUM];WNUM也是变量或常量多种表达形式同一寻址方式可以写成不同的形式:MOVAX,[BX][SI]

;等同于MOVAX,[BX+SI]MOVAX,COUNT[SI]

;等同于MOVAX,[SI+COUNT]MOVAX,WNUM[BX][SI]

;等同于MOVAX,WNUM[BX+SI]

;等同于MOVAX,[BX+SI+WNUM]汇编语言指令格式由4部分组成:标号:指令助记符目的操作数,源操作数 ;注释

标号表示该指令在主存中的逻辑地址

每个指令助记符就代表一种指令

目的和源操作数表示参与操作的对象

注释是对该指令或程序段功能的说明指令操作数的表达(1)r8——任意一个8位通用寄存器AHALBHBLCHCLDHDLr16——任意一个16位通用寄存器AXBXCXDXSIDIBPSPreg——代表r8或r16seg——段寄存器CS/DS/ES/SS指令操作数的表达(2)m8——一个8位存储器操作数单元(所有主存寻址方式)m16——一个16位存储器操作数单元(所有主存寻址方式)mem——代表m8或m16指令操作数的表达(3)i8——一个8位立即数i16——一个16位立即数imm——代表i8或i16dest——目的操作数src——源操作数逻辑段分配立即数寻址的功能立即数寻址的执行寄存器寻址的功能寄存器寻址的执行直接寻址的功能直接寻址的执行寄存器间接寻址的功能寄存器间接寻址的执行寄存器相对寻址的功能寄存器相对寻址的执行基址变址寻址的功能基址变址寻址的执行相对基址变址寻址的功能相对基址变址寻址的执行2.2.1数据传送类指令把数据从一个位置传送到另一个位置14条指令分5组1、通用数据传送:MOV

XCHG

XLAT2、堆栈操作:PUSH

POP3、标志寄存器传送:LAHF

SAHF

PUSHF

POPF4、地址传送:LEA

LDS

LES5、输入输出:IN

OUT学习要求数据传送是计算机中最基本、最重要的一种操作。传送指令也是最常使用的一类指令。传送指令把数据从一个位置传送到另一个位置。除标志寄存器传送指令外,均不影响标志位重点掌握:MOVPUSHPOP特别熟悉:

XCHGXLATLEA一般了解:LAHFSAHFPUSHFPOPFLDSLES以后展开:INOUT传送指令MOV(move)把一个字节或字的操作数从源地址传送至目的地址MOVreg/mem,imm ;立即数送寄存器或主存:例2.1MOVreg/mem/seg,reg

;寄存器送(段)寄存器或主存:例2.2MOVreg/seg,mem ;主存送寄存器:例2.3MOVreg/mem,seg ;段寄存器送寄存器或主存:例2.4传送指令不是万能的,有不少非法传送的情况。例子段寄存器:CS/DS/ES/SS通用寄存器:AX/BX/CX/DXAH/AL/BH/BL/CH/CL/DH/DL立即数

MEM例2.1:立即数传送MOVAL,55HMOVAX,55AAHMOVCX,0F943HMOVBYTEPTR[BX],12H;12h

DS:[BX]MOVWORDPTR[BX+SI],100h;100h

DS:[BX+SI]注意:立即数是字节(byte)还是字(word),也就是明确指令是字节操作还是字操作。进一步解释例2.2:寄存器传送MOVAX,BXMOVAH,BL例2.3:存储器传送MOVAX,[BX]MOV[SI],ALMOVSS,[2000H]MOVES:[DI],CS注意:不存在存储器向存储器的传送指令进一步解释例2.4:段寄存器传送MOVAX,CSMOVDS,AX注意:对段寄存器的操作有一些限制进一步解释非法传送种种两个操作数的类型不一致例如源操作数是字节,而目的操作数是字;或相反两个操作数不能都是存储器传送指令很灵活,但主存之间的直接传送却不允许段寄存器的操作有一些限制段寄存器属专用寄存器,对他们的操作能力有限实例实例实例两个操作数的类型要一致绝大多数双操作数指令(包括传送指令),除非特别说明,目的操作数与源操作数必须类型一致,或者同为字,或者同为字节,否则为非法指令。

MOVAL,050AH;非法指令:050Ah为字,而AL为字节寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型。对于存储器单元与立即数同时作为操作数的情况,必须显式指明。byteptr指示字节类型,wordptr指示字类型。两个操作数不能都是存储器8086指令系统不允许两个操作数都是存储单元(除串操作指令),没有主存至主存的数据传送。要实现这种传送,可通过寄存器间接实现。例2.5:buffer1单元的数据传送到buffer2单元movax,buffer1 ;ax←buffer1(将buffer1内容送ax)movbuffer2,ax ;buffer2←ax;这里buffer1和buffer2是两个字变量;实际表示直接寻址方式段寄存器的操作有一些限制不允许立即数传送给段寄存器MOVDS,100H

;非法指令:立即数不能传送段寄存器不允许直接改变CS值MOVCS,[SI]

;不允许使用的指令不允许段寄存器之间的直接数据传送MOVDS,ES

;非法指令:不允许段寄存器间传送交换指令XCHG(exchange)把两个地方的数据进行互换XCHGreg,reg/mem

;reg←→reg/mem交换指令可以在寄存器与寄存器之间对换数据交换指令可以在寄存器与存储器之间对换数据交换指令不能在存储器与存储器之间对换数据例2.7例2.6Why例2.6:寄存器与寄存器数据交换MOVAX,1234HMOVBX,5678HXCHGAX,BX。操作该段程序执行完:AX=5678H,BX=1234H例2.7:寄存器与存储器数据交换MOVBP,0200HMOVSI,0046HXCHGAX,[BP+SI];这里是BP,则对应的段寄存器为SS设SS=5000H,则存储单元的物理地址PA=SS*16+EA=50000H+0200H+0046H=50246H,指令执行前:AX=5621H,(50246H)=12H,(50247H)=34H指令执行后:AX=3412H,(50246H)=21H,(50247H)=56H换码指令XLAT(translate)将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给ALXLAT ;al←ds:[bx+al]:例2.8换码指令执行前:在主存中建立一个字节表格,内容是要转换成的目的代码,表格的首地址存放于BX,AL存放相对表格首地址的位移量然后,执行换码指令:将AL寄存器的内容转换为目标代码隐含寻址方式例2.8:代码转换换码指令没有显式的操作数,但使用了BX和AL;因为换码指令使用了隐含寻址方式。隐含寻址方式——采用默认操作数的寻址方式。

例2.8例2.8:将0~9,A~F的16进制数转换为ASCII码并显示

.MODELSMALL .STACK .DATA TABLEDB'0123456789ABCDEF';0~9,A~F的ASCII码

.CODE

.STARTUP MOVBX,OFFSETTABLE MOVAL,10 XLAT;AL=41H,为A的ASCII码

MOVDL,AL MOVAH,02H INT21H

.EXIT0 END堆栈操作指令堆栈的概念堆栈的操作:进栈和出栈堆栈的特点PUSHr16/m16/seg;进栈指令:;SP←SP-2;SS:[SP]←r16/m16/segPOPr16/m16/seg;出栈指令:;r16/m16/seg←SS:[SP];SP←SP+2什么是堆栈堆栈是一个“先进后出”的主存区域,位于堆栈段中,使用SS段寄存器记录其段地址。堆栈只有一个出口,即当前栈顶。栈顶是地址较小的一端(低端),它用堆栈指针寄存器SP指定。图a中的堆栈是个空栈。堆栈的操作堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP。进栈指令PUSH:进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部出栈指令POP:出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2请参看实例2.9和例2.10请对照图b和图c堆栈的实例和图例MOVAX,1278HPUSHAXPOPAX操作堆栈的特点堆栈操作的单位是字,进栈和出栈只对字量字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节堆栈操作遵循先进后出原则可用存储器寻址方式随机存取堆栈中的数据堆栈常用来临时存放数据传递参数保存和恢复寄存器例2.11例2.11:现场的保护和恢复pushax ;进入子程序后pushbxpushds...popds ;返回主程序前popbxpopax有效地址传送指令LEA(loadEA)将存储器操作数的有效地址传送至指定寄存器中LEAr16,mem ;r16←mem的有效地址例2.12:有效地址的获取LEABX,[2000H];把[2000H]操作数的偏移地址送给BX

指令执行后:BX=2000H。要注意和

MOVBX,[2000H]的区别,它是把DS:[2000H]的内容送给BX。操作指针传送指令LDSr16,mem;r16←mem,;DS←mem+2LDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器LESr16,mem;r16←mem,;ES←mem+2LES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器例2.13例2.14例2.13:LDSBX,ADDRx[SI]若DS=2000H,SI=1000H,ADDRx=0020H,则存储器操作数的物理地址是:PA=DS*16+EA=20000H+1000H+0020H=21020H。指令执行前:BX=6543H,(21020H)=1040H,(21022H)=4000H。指令执行后:BX=1040H,DS=4000H,(21020H)=1040H,(21022H)=4000H。操作例2.14LESBX,[SI]若DS=2000H,SI=1000H,则存储器操作数的物理地址是:PA=DS*16=20000H+1000H=21000H。设指令执行前:(21000H)=1400H,(21002H)=4000H。指令执行后:BX=1400H,ES=4000H,(21000H)=1400H,(21002H)=4000H。标志低字节出入AH指令LAHF;AH←FLAGS的低字节LAHF指令将标志寄存器的低字节送寄存器AHSF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意SAHF;FLAGS的低字节←AHSAHF将AH寄存器内容送FLAGS的低字节用AH的第7/6/4/2/0位相应设置SF/ZF/AF/PF/CF标志标志寄存器出入堆栈指令PUSHF;SP←SP-2;SS:[SP]←FLAGSPUSHF指令将标志寄存器的内容压入堆栈,同时栈顶指针SP减2POPF;FLAGS←SS:[SP];SP←SP+2POPF指令将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2例2.15例2.15:置位单步标志pushf ;保存全部标志到堆栈popax ;从堆栈中取出全部标志orax,0100h ;设置D8=TF=1, ;ax其他位不变pushax ;将ax压入堆栈popf ;将堆栈内容取到标志寄存器, ;即FLAGS←AX输入输出指令INAL/AX,i8/DX;AL/AX←I/O端口输入IN指令将外设数据传送给CPU内的AL/AXOUTi8/DX,AL/AX;I/O端口←AL/AX输出OUT指令将CPU内的AL/AX数据传送给外设8086通过输入输出指令与外设进行数据传送输入输出指令8086通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(Port)即I/O地址8086用于寻址外设端口的地址线为16条,端口最多为216=65536(64K)个,端口号为0000H~FFFFH每个端口用于传送一个字节的外设数据输入输出寻址方式8086的端口有64K个,无需分段,设计有两种寻址方式直接寻址:只用于寻址00H~FFH前256个端口,操作数i8表示端口号间接寻址:可用于寻址全部64K个端口,DX寄存器的值就是端口号对大于FFH的端口只能采用间接寻址方式例2.16INAL,60H;从端口60H读入一个字节到AL中INAX,20H;把端口20H、21H按“高高低低”组成的字读入AXMOVDX,2F8HINAL,DX;从端口2F8H读入一个字节到AL中INAX,DX;把端口2F8H、2F9H按“高高低低”组成的字读入AXINOUT61H,AL;把AL的内容输出到端口61H中OUT20H,AX;把AX的内容输出到端口20H、21HMOVDX,3C0HOUTDX,AL;把AL的内容输出到端口3C0H中OUTDX,AX;把AX的内容输出到端口3C0H、3C1H例2.17OUT教学提示全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键逐个展开指令2.2.2算术运算类指令四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十进制)数据的四则运算请注意算术运算类指令对标志的影响掌握:ADD/ADC/INC、SUB/SBB/DEC/NEG/CMP熟悉:MUL/IMUL、DIV/IDIV理解:CBW/CWD、DAA/DAS、AAA/AAS/AAM/AAD1、加法指令ADDADD指令将源与目的操作数相加,结果送到目的操作数ADD指令按状态标志的定义相应设置ADDADDreg,imm/reg/mem

;reg←reg+imm/reg/memADDmem,imm/reg

;mem←mem+imm/reg例题2.18例2.18:加法运算MOVBX,1000HMOVWORDPTR[BX],0A988H

;WORDPTR指明操作类型ADDWORDPTR[BX],9F76H程序段执行后:[1000H]=48FEH,BX=1000H,CF=1,ZF=0,OF=1,SF=0,PF=0,AF=0。ADD带进位加法指令ADCADC指令将源与目的操作数相加,再加上进位CF标志,结果送到目的操作数ADC指令按状态标志的定义相应设置ADC指令主要与ADD配合,实现多精度加法运算ADCADCreg,imm/reg/mem

;reg←reg+imm/reg/mem+CFADCmem,imm/reg

;mem←mem+imm/reg+CF例题2.19例2.19:双字加法MOVDX,0002H;高16位MOVAX,0F365H;低16位ADDAX,0E024H;低16位+低16位ADCDX,0005H;高16位相加,同时加进位计算结果高16位为0008(DX,为0002+0005+进位CY),低16位为0D389H(AX)。ADC增量指令INC(increment)INC指令对操作数加1(增量)INC指令不影响进位CF标志,按定义设置其他状态标志INCINCreg/mem;reg/mem←reg/mem+1incbxincbyteptr[bx]2、减法指令SUB(subtract)SUB指令将目的操作数减去源操作数,结果送到目的操作数SUB指令按照定义相应设置状态标志SUBSUBreg,imm/reg/mem

;reg←reg-imm/reg/memSUBmem,imm/reg

;mem←mem-imm/reg例题2.20例2.20:减法运算MOVBX,9548HMOVCX,28A7HSUBBX,CX程序段执行后:BX=6C9CH,CX=28A7H,CF=0,ZF=0,OF=1,SF=0,PF=1,AF=1。SUB带借位减法指令SBBSBB指令将目的操作数减去源操作数,再减去借位CF(进位),结果送到目的操作数。SBB指令按照定义相应设置状态标志SBB指令主要与SUB配合,实现多精度减法运算SBBSBBreg,imm/reg/mem

;reg←reg-imm/reg/mem-CFSBBmem,imm/reg

;mem←mem-imm/reg-CF例题2.21例2.21:双字减法MOVDX,0012HMOVAX,7546HMOVCX,0010HMOVBX,9428HSUBAX,BXSBBDX,CXSUB指令执行后:AX=E11EH,BX=9428H,CF=1,ZF=0,OF=1,SF=1,PF=1,AF=1。SBB指令执行后:DX=0001H,CX=0010H,CF=0,ZF=0,OF=0,SF=0,PF=0,AF=0。SBB减量指令DEC(decrement)DEC指令对操作数减1(减量)DEC指令不影响进位CF标志,按定义设置其他状态标志DECDECreg/mem;reg/mem←reg/mem-1deccxdecwordptr[si]

INC指令和DEC指令都是单操作数指令主要用于对计数器和地址指针的调整3、求补指令NEG(negative)NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数求补运算也可以表达成:将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样NEGNEGreg/mem;reg/mem←0-reg/mem例题2.22例2.22:求补运算MOVBX,6780HNEGBX程序段执行后:BX=9880H,CF=1,ZF=0,OF=1,SF=1,PF=0,AF=0。NEG4、比较指令CMP(compare)CMP指令将目的操作数减去源操作数,按照定义相应设置状态标志CMP指令执行的功能与SUB指令,但结果不回送目的操作数CMPreg,imm/reg/mem

;reg-imm/reg/memCMPmem,imm/reg

;mem-imm/reg例题2.23CMP例2.23:比较AL与200CMPAX,200JGGREATER;大于则跳转到GREATER,

ADDAX,100INCCXGREATER:……

执行比较指令之后,可以根据标志判断两个数是否相等、大小关系等CMP5、乘法指令MULr8/m8;无符号字节乘法;AX←AL×r8/m8MULr16/m16;无符号字乘法;DX.AX←AX×r16/m16IMULr8/m8;有符号字节乘法;AX←AL×r8/m8IMULr16/m16;有符号字乘法;DX.AX←AX×r16/m16例题2.24说明乘法指令的功能乘法指令分无符号和有符号乘法指令乘法指令的源操作数显式给出,隐含使用另一个操作数AX和DX字节量相乘:AL与r8/m8相乘,得到16位的结果,存入AX字量相乘:AX与r16/m16相乘,得到32位的结果,其高字存入DX,低字存入AX乘法指令利用OF和CF判断乘积的高一半是否具有有效数值乘法指令对标志的影响乘法指令如下影响OF和CF标志:MUL指令——若乘积的高一半(AH或DX)为0,则OF=CF=0;否则OF=CF=1IMUL指令——若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1乘法指令对其他状态标志没有定义

对标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是0还是1)对标志没有影响:指令执行不改变标志状态例2.24:乘法运算MOVAL,0B4HMOVBL,11HMULBL程序段执行后:AX=0BF4H=3060D,BL=11H,CF=OF=1。MOVAL,0B4H;对于有符号数B4H,去二进制编码高位,变反加1,为-76(-4CH)MOVBL,11HIMULBL程序段执行后:AX=FAF4H=-1292,BL=11H,CF=OF=1。6、除法指令DIVr8/m8

;无符号字节除法:AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余数DIVr16/m16

;无符号字除法:;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余数IDIVr8/m8 ;有符号字节除法:AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余数IDIVr16/m16 ;有符号字除法:;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余数例题2.25说明除法指令的功能除法指令分无符号和有符号除法指令除法指令的除数显式给出,隐含使用另一个操作数AX和DX作为被除数字节量除法:AX除以r8/m8,8位商存入AL,8位余数存入AH字量除法:DX.AX除以r16/m16,16位商存入AX,16位余数存入DX除法指令对标志没有定义除法指令会产生结果溢出除法错中断当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。如果存放商的寄存器AL/AX不能表达,便产生溢出,8086CPU中就产生编号为0的内部中断——除法错中断对DIV指令,除

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论