微型计算机技术及应用3_第1页
微型计算机技术及应用3_第2页
微型计算机技术及应用3_第3页
微型计算机技术及应用3_第4页
微型计算机技术及应用3_第5页
已阅读5页,还剩250页未读 继续免费阅读

下载本文档

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

文档简介

1、微型计算机原理及应用技术清华大学出版社清华大学出版社微型计算机概述微型计算机概述8086微处理器微处理器8086的寻址方式和指令系统的寻址方式和指令系统微型计算机和外设的数据传输微型计算机和外设的数据传输串并行通信和接口技术串并行通信和接口技术中断控制器、中断控制器、DMA控制器和计数器控制器和计数器/定时器定时器模模/数和数数和数/模转换模转换键盘和键盘和LED显示显示时段数据处理代表产品制造工艺集成度(管/片)时钟频率执行时间第一代19714位低档8位Intel4004Intel4040、8008PMOS20001MHz20 us第二代1974高档8位Intel8080、8085Z80MC

2、6800、6802NMOS840024MHz12 us第三代197816位Intel8086、8088Z8000MC68000HMOS200006000048MHz0.5 us1980高档16位Intel80286MC6801010000010MHz0.2 us第四代198032位Intel80386、80486Z80000MC6802015000050000016100MHz0.1 us第五代1993Pentium系列5000000以上150MHz以上微处理器也称微处理器也称CPU,是由大规模集成电路组成的,是由大规模集成电路组成的, 本身具本身具有运算能力和控制能力,能执行一定的指令系统的

3、器件,是有运算能力和控制能力,能执行一定的指令系统的器件,是微型计算机的核心。微型计算机的核心。一般具有下列功能:一般具有下列功能:可以进行算术和逻辑运算可以进行算术和逻辑运算可以保存少量数据可以保存少量数据能和存储器、外设交换数据能和存储器、外设交换数据能对指令进行译码并执行指令规定的动作能对指令进行译码并执行指令规定的动作提供整个系统所需要的控制信号和定时时钟提供整个系统所需要的控制信号和定时时钟完成程序流向控制完成程序流向控制 算术逻辑部件(算术逻辑部件(ALU)专门用来处理各种数据信息,可进行加、减、乘、除算术运算专门用来处理各种数据信息,可进行加、减、乘、除算术运算和与、或、非、异或

4、等逻辑运算。和与、或、非、异或等逻辑运算。累加器累加器功能:作为功能:作为ALU的一个操作数输入端。的一个操作数输入端。用于存放用于存放ALU的运算结果。的运算结果。输入输入/输出指令一般也通过累加器来完成。输出指令一般也通过累加器来完成。通用寄存器通用寄存器功能:用来暂时存放参加运算的操作数、中间结果或地址。功能:用来暂时存放参加运算的操作数、中间结果或地址。暂存寄存器(暂存寄存器(TMP)功能:用来暂存从数据总线或通用寄存器送来的操作数,并功能:用来暂存从数据总线或通用寄存器送来的操作数,并将该数据送入将该数据送入ALU进行运算,同时,它也能将数据送到内部数进行运算,同时,它也能将数据送到

5、内部数据总线。据总线。标志寄存器(标志寄存器(F)功能:用来保存功能:用来保存ALU操作结果的特殊状态。操作结果的特殊状态。指令部件指令部件PC)PC)功能:存放指令地址。功能:存放指令地址。程序执行过程中,首先由程序执行过程中,首先由PCPC指出当前要执行指令的地址,指出当前要执行指令的地址,当该指令取出后,当该指令取出后,PCPC的内容会自动加的内容会自动加1 1(除转移指令外),(除转移指令外),指向按顺序排列的下一条指令的地址。指向按顺序排列的下一条指令的地址。指令寄存器指令寄存器IRIR功能:存放当前要执行的指令的内容。功能:存放当前要执行的指令的内容。包括操作码和地址码两部分。操作

6、码送往指令译码器,包括操作码和地址码两部分。操作码送往指令译码器,地址码送至操作数地址形成电路。地址码送至操作数地址形成电路。指令译码器指令译码器IDID功能:分析指令功能,产生相应操作的控制电位。功能:分析指令功能,产生相应操作的控制电位。堆栈指示器(堆栈指针)堆栈指示器(堆栈指针)SPSP时序部件时序部件:用来产生计算机各部件所需的定时信号。用来产生计算机各部件所需的定时信号。时钟系统时钟系统 脉冲源脉冲源 功能:产生具有一定频率和脉宽的脉冲信号(主脉功能:产生具有一定频率和脉宽的脉冲信号(主脉冲)。一般采用石英晶体振荡器,因为它频率稳定。冲)。一般采用石英晶体振荡器,因为它频率稳定。 时

7、钟启停逻辑时钟启停逻辑 功能:控制启停主脉冲信号开关,按指令要求,开启功能:控制启停主脉冲信号开关,按指令要求,开启或关闭时钟脉冲序列。或关闭时钟脉冲序列。脉冲分配器脉冲分配器 功能:产生计算机各部分所需要的能按一定顺序逐个功能:产生计算机各部分所需要的能按一定顺序逐个出现的节拍电位或节拍脉冲的定时信号,以控制和协调计算出现的节拍电位或节拍脉冲的定时信号,以控制和协调计算机各部分有节奏的动作。机各部分有节奏的动作。微操作控制部件微操作控制部件 计算机在执行一条指令时,总是把一条指令分成若计算机在执行一条指令时,总是把一条指令分成若干基本操作,称为微操作。干基本操作,称为微操作。 根据指令产生计

8、算机各部件所需要的控制信号。根据指令产生计算机各部件所需要的控制信号。 这些控制信号是由指令译码器的输出电位、脉冲发这些控制信号是由指令译码器的输出电位、脉冲发生器产生的节拍电位、节拍脉冲以及外部的状态信号等生器产生的节拍电位、节拍脉冲以及外部的状态信号等进行组合而产生的。进行组合而产生的。 微操作控制部件按一定的时间顺序发出一系列微操微操作控制部件按一定的时间顺序发出一系列微操作控制信号,以完成指令所规定的全部操作。作控制信号,以完成指令所规定的全部操作。 由由CPU、存储器、存储器、I/O接口电路和系统总线等构成的一个完整的计算机。接口电路和系统总线等构成的一个完整的计算机。 有了总线结构

9、,系统中各功能部件之间的相互关系就变为各个部有了总线结构,系统中各功能部件之间的相互关系就变为各个部件面向总线的单一关系。一个部件只要符合总线标准,就可以连件面向总线的单一关系。一个部件只要符合总线标准,就可以连接到采用这种总线标准的系统中,从而使系统很容易得到扩展。接到采用这种总线标准的系统中,从而使系统很容易得到扩展。 以微型计算机为主体,配上系统软件和外设,以微型计算机为主体,配上系统软件和外设,就构成了微型计算机系统。就构成了微型计算机系统。 系统软件系统软件 常用的名词术语常用的名词术语1.1. 具有十六个不同的数字符号,即具有十六个不同的数字符号,即0-90-9和和A-FA-F三种

10、数制对照三种数制对照表表余余0 0 【1-3】 10100+1101=100001 10100+1101=100001 【1-4】 100001-10100=1101100001-10100=1101 1 0 1 0 0 1 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0 1 + 1 1 0 1 - 1 1 0 1 0 + 1 1 0 1 - 1 1 0 1 0 1 0 0 0 0 1 1 1 0 1 1 0 0 0 0 1 1 1 0 1 【1-5】 110111011011=10001111 1011=10001111 【1-6】 1110011100101=101101=10

11、11111 1 1 0 1 1 0 1 1 1 0 1 1 0 1 商商 1 0 1 1 1 1 1 0 0 1 0 1 1 1 1 1 0 0 1 1 0 1 1 0 1 1 1 0 1 1 0 1 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 1 + 1 1 0 1 1 1 + 1 1 0 1 1 1 1 0 0 0 1 1 1 11 0 0 0 1 1 1 1 X+0X+0 = = 补码补码3.补码的定义补码的定义求法与应用求法与应用 47主要内容: 指令系统的一般概念 对操作数的寻址方式 六大类指令的操作原理:操作码

12、的含义操作码的含义指令对操作数的要求指令对操作数的要求指令执行的结果指令执行的结果8086的寻址方式和指令系统的寻址方式和指令系统 3.3.4 3.3.4 串操作指令串操作指令 49回忆一、指令与指令系统指令:控制计算机完成某种操作的命令指令系统:处理器所能识别的所有指令的集合指令的兼容性:同一系列机的指令都是兼容的。50指令中应包含的信息:运算数据的来源运算数据的来源运算结果的去向运算结果的去向执行的操作执行的操作51操作码 操作数,操作数执行何种操作执行何种操作目标操作数目标操作数源操作数源操作数参加操作的数据或数据存放的地址参加操作的数据或数据存放的地址52立即数寄存器存储器表征参加操作

13、的数据本身表征参加操作的数据本身表征数据存放的地址表征数据存放的地址53立即数操作数 立即数本身是参加操作的数据,可以是8位或16位,只能作为源操作数。 例: MOV AX,1234H MOV BL,22H 立即数无法作为目标操作数 立即数可以是无符号或带符号数,其数值应在可取值范围内。54寄存器操作数 参加运算的数存放在指令给出的寄存器中,可以是16位或8位。 例: MOV AX,BX MOV DL,CH55存储器操作数 参加运算的数存放在存储器的某一个或某两个单元中。 表现形式: 立即数或寄存器立即数或寄存器 中的内容是存放所寻找数据的单元的偏移地址中的内容是存放所寻找数据的单元的偏移地址

14、56存储器操作数例 例: MOV AX,1200H MOV AL,1200H22H11H1200H偏移地址偏移地址AH AL 57 指令的字长影响指令的执行速度 对不同的操作数,指令执行的时间不同: 存储器快!快!立即数立即数寄存器寄存器指令字长:指令字长:由操作码的长度、操作数地址长度、操作数由操作码的长度、操作数地址长度、操作数个数决定。个数决定。寻找操作数所在地址的方法寻找操作数所在地址的方法59 操作数可能的来源或存放处: 由指令直接给出 寄存器 内存单元 寻找操作数所在地址的方法可以有三种大类型 指令直接给出的方式 存放于寄存器中的寻址方式 存放于存储器中的寻址方式3.2.1 3.2

15、.1 立即寻址立即寻址3.2.2 寄存器寻址寄存器寻址3.2.3 直接寻址直接寻址 如指令前面没有用前缀指明操作数在哪一段,则默认段寄存器如指令前面没有用前缀指明操作数在哪一段,则默认段寄存器为数据段寄存器为数据段寄存器DS。例:例:MOV AX ,1070H ;将;将DS:1070H的内容送到的内容送到AL DS:1071H的内容送到的内容送到AH如要对其他段寄存器所指出的存储区进行直接寻址,则本条指如要对其他段寄存器所指出的存储区进行直接寻址,则本条指令前必须用前缀指出段寄存器名。令前必须用前缀指出段寄存器名。例:例:CS:MOV AX ,1070H ;将;将CS:1070H的内容送到的内

16、容送到AL CS:1071H的内容送到的内容送到AH或或 MOV AX , CS:1070H3.2.4 寄存器间接寻址寄存器间接寻址 特点:特点:1、操作数实际一定存放在存储器中。、操作数实际一定存放在存储器中。2、寄存器可以也只可以为:、寄存器可以也只可以为:BX、BP、SI、DI。3、源操作数或者目的操作数。、源操作数或者目的操作数。4、采用间接寻址的寄存器要用、采用间接寻址的寄存器要用“ ”括起来。括起来。注意:注意:1、如指令前面没有用前缀指明操作数在哪一段,则默认段寄存器为数据、如指令前面没有用前缀指明操作数在哪一段,则默认段寄存器为数据段寄存器段寄存器DS;但若寄存器为;但若寄存器

17、为BP,则默认段寄存器为数据段寄存器,则默认段寄存器为数据段寄存器SS。2、如果要改变段寄存器,则必须在该指令前加前缀指出。、如果要改变段寄存器,则必须在该指令前加前缀指出。3、采用寄存器间接寻址时,允许在指令中指定一个位移量,这样,有效、采用寄存器间接寻址时,允许在指令中指定一个位移量,这样,有效地址就是寄存器的内容加上位移量得到。位移量可为地址就是寄存器的内容加上位移量得到。位移量可为8位,也可为位,也可为16位。位。65寄存器间接寻址 由寄存器间接给出操作数的偏移地址; 存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI 操作数的段地址(数据处于哪个段)取决于选择哪一个间

18、址寄存器: BX,SI,DI BP默认在数据段默认在数据段默认在堆栈段默认在堆栈段66寄存器间接寻址 寄存器间接寻址基址寻址(间址基址寻址(间址寄存器为基址寄存寄存器为基址寄存 器器BX,BP)变址寻址(间址变址寻址(间址寄存器为变址寄存寄存器为变址寄存 器器SI,DI) 若要对其他段寄存器所指的区域进行寻址,则必须在该若要对其他段寄存器所指的区域进行寻址,则必须在该指令前用前缀指出段寄存器名。指令前用前缀指出段寄存器名。例:若例:若ES=3000H,BX=3000HES:MOV AX ,BX ;将;将33000H单元的内容送到单元的内容送到AL 33001H单元的内容送到单元的内容送到AH

19、+ 若用若用BP寄存器,则默寄存器,则默认的段寄存器是认的段寄存器是SS,若用若用BX寄存器,则默寄存器,则默认的段寄存器是认的段寄存器是DS。 在寄存器间接寻址时在指令中加入了一个在寄存器间接寻址时在指令中加入了一个8位或位或16位位移量。位位移量。 +格式:格式: MOV AX , BX+6 MOV AX , 6BX MOV AX , BX+6 1MOV(Move):传送指令):传送指令MOV指令的格式为:指令的格式为:MOV dst,src ;dstsrc功能:将源操作数功能:将源操作数src复制到目的操作数复制到目的操作数dst中,结果目的操作中,结果目的操作数的内容等于源操作数的内容

20、,源操作数数的内容等于源操作数的内容,源操作数src的内容不变。的内容不变。对标志位的影响:无对标志位的影响:无语法格式:语法格式:MOV reg/mem/seg ,reg/mem/seg/imm MOV WORD PTR1000H ,AX MOV CS:BX+SI+100 ,AX MOV BYTE PTRBX ,AL MOV SI ,AL MOV AX ,BX MOV AX ,ES:BX+SI+100 MOV ES ,DX MOV DS ,AX MOV SS ,BX MOV ES ,SS:DI+100 MOV DX ,DS MOV BX ,ES MOV WORDPTRBX+SI+200 ,S

21、S MOV BX ,CS MOV DX ,AX MOV BL ,DH MOV CX ,DI MOV DX ,SI+100 MOV DI ,BX+DI+200 MOV WORD PTRDI ,DX MOV WORD PTRBX+SI+200 ,DI MOV AX ,77H ;默认为;默认为0077H MOV AL ,77H MOV DI ,6180H MOV WORD PTRBX+SI+500 ,1000H MOV BYTE PTRDI ,66 MOV DS:BP ,6180H 通用传送指令可传送通用传送指令可传送8位数据,也可传送位数据,也可传送16位数据,具体位数据,具体决定于指令中涉及的寄

22、存器是决定于指令中涉及的寄存器是8为还是为还是16位。位。 MOV CX ,AL (X) MOV CL ,AX (X) 通用传送指令中总是即有源操作数,又有目的操作数,并通用传送指令中总是即有源操作数,又有目的操作数,并且两者之中至少有一个要用寄存器来指出。且两者之中至少有一个要用寄存器来指出。不能在两个内存单元之间直接传送数据。不能在两个内存单元之间直接传送数据。 MOV seg , seg ;错误;错误 MOV mem ,mem ;错误;错误CS、IP这两个寄存器不能作为目的操作数。这两个寄存器不能作为目的操作数。用用BX、SI、DI来间接寻址时,默认的段寄存器是来间接寻址时,默认的段寄存

23、器是DS;用;用BP来间接寻址时,默认的段寄存器是来间接寻址时,默认的段寄存器是SS。在修改在修改SS和和SP的指令之间不要插入其他指令。的指令之间不要插入其他指令。所有的通用传送指令都不改变状态标志。所有的通用传送指令都不改变状态标志。 例:错误的例:错误的MOV 指令如下所示:指令如下所示:MOV AX,BL ;类型不匹配;类型不匹配MOV DS,1000H ;不允许立即数送段寄存器;不允许立即数送段寄存器MOV BX ,SI ;不允许内存操作数之间传送;不允许内存操作数之间传送MOV ES,CS ;不允许段寄存器之间传送;不允许段寄存器之间传送MOV CS,AX ;CS不能作为目的操作数

24、不能作为目的操作数例:设例:设A、B是已定义的字节变量,以下是一些错误和正确的指是已定义的字节变量,以下是一些错误和正确的指令。令。MOV AX,B ;错误,类型不匹配;错误,类型不匹配MOV A,0 ;正确,;正确,MASM可以判断出要送字节可以判断出要送字节02.堆栈指令堆栈指令堆栈概念堆栈概念 - 存储器的一段区域,按存储器的一段区域,按“先进后出先进后出”的原则进行存出操作。的原则进行存出操作。8086/8088系统,堆栈位于堆栈系统,堆栈位于堆栈段,其段地址由段,其段地址由SS指示,指示,SP寄存器作为指针,寄存器作为指针,SP内容内容始终指向栈顶所在存储单元。始终指向栈顶所在存储单

25、元。作用:在调用一个过程时,保存返回地址;暂时存放作用:在调用一个过程时,保存返回地址;暂时存放寄存器或存储器单元操作数的内容。寄存器或存储器单元操作数的内容。 堆栈堆栈SP:01F8SP:01FASP:01FCSP:01FESPAA BB(执行(执行PUSH AX之前)之前)堆栈堆栈SP:01F8SP:01FASP:01FCSP:01FESPAA BB(执行(执行PUSH AX之后)之后)1101H1101H AX堆栈堆栈SP:01F8SP:01FASP:01FCSP:01FESPAA BB(执行(执行POP AX之后)之后)1101H AX123堆栈操作总是按字操作的。堆栈操作总是按字操作

26、的。每执行一条压栈指令,堆栈指针减每执行一条压栈指令,堆栈指针减2,推入堆栈的数据放在栈顶,推入堆栈的数据放在栈顶,低位字节放在较低地址单元(真正的栈顶单元),高位字节放低位字节放在较低地址单元(真正的栈顶单元),高位字节放在较高单元。出栈时正好相反,每弹出一个字,堆栈指针加在较高单元。出栈时正好相反,每弹出一个字,堆栈指针加2。CS寄存器的值可以压入堆栈,但不能从堆栈中弹出值到寄存器的值可以压入堆栈,但不能从堆栈中弹出值到CS。一定要遵循一定要遵循“先进后出先进后出”的原则。的原则。直接的输入直接的输入/输出指令输出指令格式:格式: IN AL IN AL ,PORT OUT PORT PO

27、RT OUT PORT ,AL AL ;字节;字节IN AX IN AX ,PORT OUT PORT PORT OUT PORT ,AX AX ;字;字PORTPORT:外设的端口地址:外设的端口地址例:例:IN AL IN AL ,50H 50H ;将;将50H50H端口的字节读入端口的字节读入ALAL IN AX IN AX ,70H 70H ;将;将70H70H端口的字节读入端口的字节读入ALAL, 将将71H71H端口的字节读入端口的字节读入AHAH。 IN AX IN AX ,71H 71H ;将;将71H71H端口的字节读入端口的字节读入ALAL, 将将72H72H端口的字节读入

28、端口的字节读入AHAH。 OUT 50H OUT 50H ,AL AL ;将;将ALAL中的字节输出到中的字节输出到50H50H端口端口 OUT 80H OUT 80H ,AX AX ;将;将ALAL输出到输出到70H70H端口,端口,AXAX输出到输出到71H71H。 间接的输入间接的输入/ /输出指令输出指令格式:格式:IN AL IN AL ,DX OUT DX DX OUT DX ,AL AL ;字节;字节IN AX IN AX ,DX OUT DX DX OUT DX ,AX AX ;字;字例:例:IN AL IN AL ,DX DX ;从;从DXDX所指的端口读取字节送到所指的端口

29、读取字节送到ALAL。 IN AX IN AX ,DX DX ;从;从DXDX所指的端口读取字节送到所指的端口读取字节送到ALAL, 从从DX+1DX+1所指的端口读取字节送到所指的端口读取字节送到AHAH。 OUT DX OUT DX ,AL AL ;将;将ALAL中的字节输出到中的字节输出到DXDX所指的端口中。所指的端口中。 OUT DX OUT DX ,AX AX ;将;将ALAL中的字节输出到中的字节输出到DXDX所指的端口中,所指的端口中, 将将AHAH中的字节输出到中的字节输出到DX+1DX+1所指的端口中。所指的端口中。必须是用累加器。必须是用累加器。用直接输入用直接输入/ /

30、输出指令时,端口号不要用输出指令时,端口号不要用“ ” ”括括起来,且寻址范围为起来,且寻址范围为02550255(0000H00FFH0000H00FFH)。)。用间接输入用间接输入/ /输出指令时,只能用输出指令时,只能用DXDX寄存器,寻址范寄存器,寻址范围为围为065535065535(0000HFFFFH0000HFFFFH)。)。 ALAL DSDS:(:(BX+ALBX+AL) LEA 指令与指令与MOV 指令的区别:指令的区别:LEA SI,BUFF指令是将标号指令是将标号BUFF的偏移地址送入寄存器中;的偏移地址送入寄存器中;MOV SI,BUFF指令是将标号指令是将标号BU

31、FF所指存储单元的内容送入所指存储单元的内容送入SI。BUFF =0123454800FEFFLEA SI,BUFF;执行后:(执行后:(SI)=0002HMOV SI,BUFF;执行后:(执行后:(SI)=0048H段起始地址段起始地址57H13H68H24HDS:2480HDS:2481HDS:2482HDS:2483H 13 57 24 68 算术运算指令涉及的一些问题算术运算指令涉及的一些问题无符号数无符号数:将所有的数位都看成数据位,只有正数没有负数。:将所有的数位都看成数据位,只有正数没有负数。8位无符号位无符号数值的范围为数值的范围为0255,16位无符号数值的范围为位无符号数值

32、的范围为065535。有符号数有符号数:将最高位作为符号,数据本身用补码表示,即可表示正数,也:将最高位作为符号,数据本身用补码表示,即可表示正数,也可表示负数。可表示负数。8位有符号数值的范围为位有符号数值的范围为-128+127,16位无符号数值的范位无符号数值的范围为围为-32768+32767。对于加、减法,无符号数和有符号数可采用同一套指令,对于乘、除法,对于加、减法,无符号数和有符号数可采用同一套指令,对于乘、除法,无符号数和有符号数不能采用同一套指令。无符号数和有符号数不能采用同一套指令。无符号数和有符号数可采用同一套加、减法指令有两个条件:无符号数和有符号数可采用同一套加、减法

33、指令有两个条件: 两个操作数必须同为无符号数或有符号数。两个操作数必须同为无符号数或有符号数。 要用不同的方法检测无符号数或有符号数的运算结果是否溢出。要用不同的方法检测无符号数或有符号数的运算结果是否溢出。对于无符号数运算,用对于无符号数运算,用CF是否为是否为1来判断是否产生溢出;对于来判断是否产生溢出;对于有符号数运算,用有符号数运算,用OF是否为是否为1来判断是否产生溢出。来判断是否产生溢出。所有的算术运算指令,都会影响状态标志。具体有这样一些规则:所有的算术运算指令,都会影响状态标志。具体有这样一些规则:当无符号数运算产生溢出时,当无符号数运算产生溢出时,CF=1当有符号数运算产生溢

34、出时,当有符号数运算产生溢出时,OF=1运算结果为运算结果为0,ZF=1运算结果为负数,运算结果为负数,SF=1 运算结果中有偶数个运算结果中有偶数个1,PF=1 加法指令加法指令 例:例:ADD AL ADD AL ,BL BL ;将;将ALAL内容与内容与BLBL内容相加,结果送到内容相加,结果送到ALAL。 ADD AX ADD AX ,CX CX ;将;将AXAX内容与内容与CXCX内容相加,结果送到内容相加,结果送到AXAX。 ADD AX ADD AX ,1000H 1000H ;将;将AXAX内容与内容与1000H1000H,1001H1001H内容内容 相加,结果送到相加,结果

35、送到AXAX ADD BX ADD BX ,SI+100SI+100 ADD WORD PTRDI+200 ADD WORD PTRDI+200 ,CXCX ADD AX ADD AX ,100H100H ADD BYTE PTRBX+SI+100 ADD BYTE PTRBX+SI+100 ,2020例:将两个分别存放在例:将两个分别存放在2000H2000H和和3000H3000H开始的存储单元的开始的存储单元的4 4字节字节无符号数相加,结果存放到无符号数相加,结果存放到2000H2000H开始的单元。(地位在前,开始的单元。(地位在前,高位在后)高位在后) MOV SI MOV SI

36、,2000H2000H MOV AX MOV AX ,SISI MOV DI MOV DI ,3000H3000H ADD AX ADD AX ,DIDI MOV SI MOV SI ,AXAX MOV AX MOV AX ,SI+2SI+2 ADC AX ADC AX ,DI+2DI+2 MOV SI+2 MOV SI+2 ,AXAX例:例: INC AXINC AX INC CL INC CL INC SI+100 INC SI+100 INC 2000H INC 2000HADDADD、ADCADC指令对标志位指令对标志位AFAF、OFOF、PFPF、ZFZF、CFCF有影响,有影响,I

37、NCINC指令对标志位也有影响,但不影响指令对标志位也有影响,但不影响CFCF。例:例:SUB AL SUB AL ,BL BL ;将;将ALAL内容与内容与BLBL内容相减,结果送到内容相减,结果送到ALAL。 SUB AX SUB AX ,CX CX ;将;将AXAX内容与内容与CXCX内容相减,结果送到内容相减,结果送到AXAX。 SUB AX SUB AX ,1000H 1000H ;将;将AXAX内容与内容与1000H1000H,1001H1001H内容内容 相减,结果送到相减,结果送到AXAX。 SUB BX SUB BX ,SI+100SI+100 SUB WORD PTRDI+

38、200 SUB WORD PTRDI+200 ,CXCX SUB AX SUB AX ,100H100H SUB BYTE PTRBX+SI+100 SUB BYTE PTRBX+SI+100 ,2020例:将两个文分别存放在例:将两个文分别存放在2000H2000H和和3000H3000H开始的存储单元的开始的存储单元的4 4字节无符号数相减,结果存放到字节无符号数相减,结果存放到2000H2000H开始的单元。(地开始的单元。(地位在前,高位在后)位在前,高位在后) MOV SI MOV SI ,2000H2000HMOV AX MOV AX ,SISIMOV DI MOV DI ,300

39、0H3000HSUB AX SUB AX ,DIDIMOV SI MOV SI ,AXAXMOV AX MOV AX ,SI+2SI+2SBB AX SBB AX ,DI+2DI+2MOV SI+2 MOV SI+2 ,AXAX 例:例: DEC AXDEC AX DEC CL DEC CL DEC SI+100 DEC SI+100 DEC 2000H DEC 2000H 例:例: NEG AXNEG AX NEG CL NEG CL NEG SI+100 NEG SI+100 NEG 2000H NEG 2000H 例:例: CMP AX CMP AX ,2000H2000H CMP AL

40、 CMP AL ,50H50H CMP AX CMP AX ,BX+DI+100BX+DI+100 CMP DX CMP DX ,DIDI 会影响标志位会影响标志位AFAF、CFCF、OFOF、PFPF、SFSF、ZFZF。 两数相等,两数相等,ZF=1ZF=1 两数不等:两数不等:a a)、无符号数:)、无符号数:CF=0CF=0,被减数大,减数小;,被减数大,减数小;CF=1CF=1,被减数小,减数大。,被减数小,减数大。b b)、有符号数:若)、有符号数:若OFOF和和SFSF值相同,则说明被减数比减数大;若值相同,则说明被减数比减数大;若OFOF和和SFSF值不值不同,则说明被减数比减

41、数小。同,则说明被减数比减数小。(2 2)带符号数除法指令)带符号数除法指令例:将两个分别存放在例:将两个分别存放在2000H2000H和和3000H3000H开始的存储单开始的存储单元的元的2 2字节组合字节组合BCDBCD码数相加,结果存放到码数相加,结果存放到2000H2000H开开始的单元。始的单元。 MOV SI ,2000HMOV AL ,SIMOV DI ,3000HADD AL ,DIDAAMOV SI ,ALMOV AL ,SI+1ADC AL ,DI+1DAAMOV SI+1 ,AL(5 5)非组合非组合BCDBCD码的乘法调整指令码的乘法调整指令例:例:MOV AL MO

42、V AL ,05H05H MOV BL MOV BL ,07H07H MUL BL MUL BL ;AX=0023HAX=0023H AAM AAM ;AH=03HAH=03H、AL=05H AL=05H 例:例:35357=57=5 MOV AX MOV AX ,0305H0305H AAD AAD ;AH=00HAH=00H、AL=23HAL=23H MOV BL MOV BL ,07H07H DIV BL DIV BL 0CFOPR0CFOPRCFOPRCFOPRCFOPRCFOPRCFOPRCFOPR 例:例: MOV SI MOV SI ,1000H1000H MOV DI MOV

43、DI ,2000H2000H MOV CX MOV CX ,100100 CLD CLD REP MOVSB REP MOVSB ;将源地址开始的;将源地址开始的100100 个字节送到目的地址个字节送到目的地址 REPREP指令:(指令:(CXCX)1 CX1 CX,当,当CX=0CX=0时,退出时,退出重复,执行其后面的程序。重复,执行其后面的程序。 例:例: MOV DI MOV DI ,1000H1000H MOV SI MOV SI ,2000H2000H CLD CLD MOV CX MOV CX ,0004H0004H REP CMPSB REP CMPSB JZ KKK JZ

44、KKK ;ZF=0ZF=0,表示,表示4 4个比较单元都相同个比较单元都相同REPZREPZ指令:指令:ZF=1ZF=1,条件满足,执行重复,(,条件满足,执行重复,(CXCX)1 CX1 CX, 当当CX=0CX=0时,退出重复,执行其后面的程序。时,退出重复,执行其后面的程序。ZF=0ZF=0,条件不满足,退出重复,执行其后面的程序。,条件不满足,退出重复,执行其后面的程序。REPNZREPNZ指令:与指令:与REPZREPZ的条件正好相反。的条件正好相反。 例:从例:从ESES段:段:3000H3000H单元开始的单元开始的5 5个单元中找到第一个单元中找到第一个与个与ALAL中内容相等

45、的单元,并使其内容增中内容相等的单元,并使其内容增1 1。 MOV AL MOV AL ,40H40HMOV DI MOV DI ,3000H3000HCLDCLDMOV CX MOV CX ,5 5MOV DX MOV DX ,CXCXREPNZ SCASBREPNZ SCASBJNZ AA1JNZ AA1SUB DX SUB DX ,CXCXDEC DXDEC DXMOV DI MOV DI ,DXDXINC BYTE PTR DI+3000hINC BYTE PTR DI+3000hAA1AA1: 例:将例:将0700H0700H单元开始的单元开始的5 5个字节的内容逐一取来,放个字节的

46、内容逐一取来,放在累加器中进行处理,处理后在送回到原内存单元。在累加器中进行处理,处理后在送回到原内存单元。 CLDCLDMOV SI MOV SI ,0700H0700HMOV CX MOV CX ,5 5MOV DI MOV DI ,SISIL1:LODSBL1:LODSBPUSH CXPUSH CXPOP CXPOP CXDEC CXDEC CXMOV DI MOV DI ,ALALINC DIINC DIJNZ LI JNZ LI (2 2)存字符串指令存字符串指令例:使例:使0404H0404H开始的开始的256256个单元清个单元清0 0。 CLDCLDLEA DI LEA DI

47、,0404H0404HMOV CX MOV CX ,0080H0080HXOR AX XOR AX ,AXAXREP STOSWREP STOSW控制转移指令包括控制转移指令包括5类指令:类指令:子程序调用和返回指令子程序调用和返回指令无条件转移和条件转移指令无条件转移和条件转移指令循环控制指令循环控制指令中断指令中断指令处理器控制指令处理器控制指令1.1.关于转移指令和调用指令的寻址关于转移指令和调用指令的寻址 a、段内直接转移方式、段内直接转移方式 指令中给出一个相对位移量,这样,转移的有效偏移地指令中给出一个相对位移量,这样,转移的有效偏移地址为址为IP当前内容加上一个当前内容加上一个8

48、位或位或16位位移量。位位移量。适用:适用: 条件转移指令条件转移指令 无条件转移指令无条件转移指令 调用指令调用指令注意:注意: 条件转移指令中,只能用条件转移指令中,只能用8位位移量。位位移量。 b b、段内间接转移方式、段内间接转移方式 转移的有效偏移地址总是在寄存器中或转移的有效偏移地址总是在寄存器中或者在内存单元中。者在内存单元中。适用:适用: 无条件转移指令无条件转移指令例:例:JMP 1000HJMP 1000H;直接转移;直接转移 JMP BX JMP BX ;间接转移;间接转移 JMP BX JMP BX ;间接转移;间接转移 c c、段间直接转移方式、段间直接转移方式 指令

49、中给出转移地址的段值和偏移量。产生转指令中给出转移地址的段值和偏移量。产生转移时,将段值代入移时,将段值代入CSCS中,将偏移量代入中,将偏移量代入IPIP中。中。 例:例:JMP 2000HJMP 2000H:1000H1000Hd d、段间间接转移方式、段间间接转移方式 转移地址(转移地址(IPIP、CSCS内容)用内存中内容)用内存中2 2个连续的个连续的字来替换。字来替换。 例:例:JMP DWORD PTR DI JMP DWORD PTR DI 转移地址由转移地址由DIDI、DI+1DI+1、DI+2DI+2、DI+3DI+3单元的内容单元的内容给出,其中给出,其中DIDI、DI+

50、1DI+1为偏移量,为偏移量,DI+2DI+2、DI+3DI+3为段地为段地址。址。 例:例: CALL 1000H CALL 1000H ;段内直接调用;段内直接调用 CALL AX CALL AX ;段内间接调用;段内间接调用 CALL 2500HCALL 2500H:3600H 3600H ;段间直接调用;段间直接调用 CALL DWORD PTR DI CALL DWORD PTR DI ;段间间接调用;段间间接调用a a、无条件转移指令、无条件转移指令例:例: JMP 1000H JMP 1000H ;段内直接转移;段内直接转移 JMP CX JMP CX ;段内间接转移;段内间接转

51、移 JMP 2000HJMP 2000H:0100H 0100H ;段间直接转移;段间直接转移 JMP DWORD PTR SI JMP DWORD PTR SI ;段间间接转移;段间间接转移 例:设例:设2000H2000H开始的区域中,存放着开始的区域中,存放着14H14H个无符号数,个无符号数,要求找出其中最大的一个数,并存放到要求找出其中最大的一个数,并存放到2000H2000H。 GTAMAXGTAMAX: MOV BX MOV BX ,2000H2000H MOV AL MOV AL ,BXBX MOV CX MOV CX ,14H14HP1P1: INC BXINC BX CMP

52、 AL CMP AL ,BXBX JAE P2 JAE P2 MOV AL MOV AL ,BXBXP2P2: DEC CXDEC CX JNZ P1 JNZ P1 MOV BX MOV BX ,2000H2000H MOV BX MOV BX ,ALAL例:在例:在4040个元素构成的数组中寻找第一个非个元素构成的数组中寻找第一个非0 0元素元素MOV CX MOV CX ,4040MOV SI MOV SI ,0FFH0FFHNEXTNEXT: INC SIINC SICMP BYTE PTR SI CMP BYTE PTR SI ,0 0LOOPZ NEXTLOOPZ NEXTJNZ K

53、KKJNZ KKKCALL DISPLAY1CALL DISPLAY1RETRETKKKKKK: CALL DISPLAY2CALL DISPLAY2RETRET中断指令为程序员提供了软件中断手段。中断指令为程序员提供了软件中断手段。中断指令:中断指令:INT nINT n中断返回指令:中断返回指令:IRETIRET执行执行INT nINT n指令时,将使指令时,将使CPUCPU转到一个中断处理程转到一个中断处理程序。此时,标志位被推入堆栈,序。此时,标志位被推入堆栈,SPSP2 2;然后清;然后清IFIF、TFTF;接着,将主程序的下一条指令的地址(断点地;接着,将主程序的下一条指令的地址(

54、断点地址)的段值和偏移量推入堆栈,址)的段值和偏移量推入堆栈,SPSP4 4。n n为中断类为中断类型号。型号。 (5 5)总线封锁前缀总线封锁前缀3.4 ASM86汇编语言中的标记、表达式和伪指令汇编语言中的标记、表达式和伪指令 机器语言:机器语言:用以二进制编码的形式表示的机器指令组。用以二进制编码的形式表示的机器指令组。用机器语言编制的程序称为机器程序,又称为目标程序,它能机器所识用机器语言编制的程序称为机器程序,又称为目标程序,它能机器所识别并执行。机器语言编写程序易出错、难修改、不易看懂。别并执行。机器语言编写程序易出错、难修改、不易看懂。高级语言:高级语言:用通用符号指令码。用通用

55、符号指令码。用高级语言编制的程序称为源程序,它必须通过翻译程序把它翻译成目用高级语言编制的程序称为源程序,它必须通过翻译程序把它翻译成目标程序(机器程序)后,才能被机器所识别、执行。源程序易学、使用标程序(机器程序)后,才能被机器所识别、执行。源程序易学、使用方便、易推广。但翻译后的目标程序长,执行时间长,实时性差。方便、易推广。但翻译后的目标程序长,执行时间长,实时性差。汇编语言:汇编语言:用机器专用符号指令码。用机器专用符号指令码。用汇编语言编制的程序称为汇编语言程序,它也是源程序,必须通过汇用汇编语言编制的程序称为汇编语言程序,它也是源程序,必须通过汇编程序将它翻译成目标程序。它的目标程

56、序短,实时性好,大量用于实编程序将它翻译成目标程序。它的目标程序短,实时性好,大量用于实时控制程序中。时控制程序中。 汇编语言的基本概念汇编语言的基本概念3.4.13.4.1 一个完整的汇编语言的语句由下列几部分组成:一个完整的汇编语言的语句由下列几部分组成:标识符标识符、保留字保留字、界符界符、常数常数和和注释注释,所有这些都称为标记。,所有这些都称为标记。 标识符标识符:是程序员为了使程序便于理解和书写所使用的一:是程序员为了使程序便于理解和书写所使用的一些字符串,常作为一段程序的开头、一个数据块的开头。些字符串,常作为一段程序的开头、一个数据块的开头。 保留字保留字:是汇编语言中预先保留

57、下来的具有特殊含义的符号,只能作为:是汇编语言中预先保留下来的具有特殊含义的符号,只能作为固定的用途。如:固定的用途。如:MOVMOV、INTINT、DBDB、SEGMENTSEGMENT、ENDEND等。凡是等。凡是80868086的指令、的指令、伪指令、寄存器名等都是保留字。伪指令、寄存器名等都是保留字。界符界符:作为一个程序中或者一条指令中两个部分的分隔符号。如:作为一个程序中或者一条指令中两个部分的分隔符号。如“,”、“;”等。等。常数常数:就是指令中出现的那些固定值。如立即寻址时所用的立即数、直:就是指令中出现的那些固定值。如立即寻址时所用的立即数、直接寻址时所用的地址等。接寻址时所

58、用的地址等。常数的表示形式:常数的表示形式:二进制,二进制,01001000B01001000B十进制,十进制,100100,200D200D十六进制,十六进制,1000H1000H、74H74H、0FE00H0FE00H八进制,八进制,2560Q2560Q用引号引起来的字符串。如用引号引起来的字符串。如ABCABC,等效于常数,等效于常数41H41H、42H42H、43H43H。注释注释:汇编语言中为了便于阅读和理解而加入的一些说明文字。:汇编语言中为了便于阅读和理解而加入的一些说明文字。注意注意:注释要用注释要用“;”打头。打头。在汇编过程中,注释被略去不作处理。在汇编过程中,注释被略去不

59、作处理。 表达式由表达式由操作数操作数和和运算符运算符组成。组成。 操作数操作数:内容上可能代表一个数据,也可能代表一个存储:内容上可能代表一个数据,也可能代表一个存储单元。单元。对于一个数据最简单的表达方式就是用常数形式,如对于一个数据最简单的表达方式就是用常数形式,如100H100H。汇编语言程序中也常常用标号来表示数据,如用汇编语言程序中也常常用标号来表示数据,如用PORTPORT表示表示一个端口号,而在汇编语言程序又用伪指令对一个端口号,而在汇编语言程序又用伪指令对PORTPORT作了定作了定义,使它等于某个常数。义,使它等于某个常数。源程序中,存储器地址也常用标号表示,作为转移指令的

60、源程序中,存储器地址也常用标号表示,作为转移指令的转移地址或调用指令的调用地址。如转移地址或调用指令的调用地址。如JMP STARTJMP START中的中的STARTSTART标号,实际上包括了地址的段值和偏移量。标号,实际上包括了地址的段值和偏移量。:包括包括EQ(相等)、(相等)、NE(不相等)、(不相等)、LT(小于)、(小于)、GT(大于)、(大于)、LE(小于或大于)、(小于或大于)、GE(大于或等于)共六种。(大于或等于)共六种。分析操作符(数值返回运算符)分析操作符(数值返回运算符)(1)取地址的偏移量)取地址的偏移量 分析操作符(数值返回运算符)分析操作符(数值返回运算符)分

温馨提示

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

评论

0/150

提交评论