第3章寻址方式和指令系统(创新142)_第1页
第3章寻址方式和指令系统(创新142)_第2页
第3章寻址方式和指令系统(创新142)_第3页
第3章寻址方式和指令系统(创新142)_第4页
第3章寻址方式和指令系统(创新142)_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

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

文档简介

1、第第3 3章章 寻址方式与指令系统寻址方式与指令系统3.1 指令格式与寻址方式指令格式与寻址方式3.2 8086 指令系统指令系统3.3 80X86 与与Pentium 扩充和增加的指令扩充和增加的指令先看一个例子例:先看一个例子例:(分别以语言和汇编语言编写)(分别以语言和汇编语言编写)#include stdio.h int main(int argc, char* argv) int a,b,c; a=1; b=2; c=a+b; printf(“c=%dn,c); return 0; 编译后的目标文编译后的目标文件达到件达到3.59KB语言编写语言编写data segmenta db

2、?b db ?c db ?string db c=$data endscode segmentmain proc far assume cs:code, ds:data, es:datastart: push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,axmov a,1 mov b,2 mov al,a add al,b mov c,al lea dx,string mov ah,09 int 21h add c,30h mov dl,c mov ah,2 int 21h mov dl,0ah int 21h mov dl,0dh in

3、t 21h retmain endpcode ends end start汇编后的目汇编后的目标文件只有标文件只有208208字节字节汇编语言编写汇编语言编写指令构成指令构成 指令由操作码和操作数两部分构成指令由操作码和操作数两部分构成操作码操作码说明计算机要执行哪种操作,如传送、运算、说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部移位、跳转等操作,它是指令中不可缺少的组成部分。分。操作数操作数是指令执行的参与者,即各种操作的对象。是指令执行的参与者,即各种操作的对象。有些指令不需要操作数,通常的指令都有一个或两有些指令不需要操作数,通常的指令都有一个或两

4、个操作数,也有个别指令有个操作数,也有个别指令有3 3个甚至个甚至4 4个操作数。个操作数。操作码操作码操作数操作数指令中的操作码和操作数指令中的操作码和操作数 每种指令的每种指令的操作码操作码: 用一个唯一的助记符表示(英文缩写),用一个唯一的助记符表示(英文缩写), 对应着一个二进制编码的机器指令。对应着一个二进制编码的机器指令。 指令中的指令中的操作数操作数: 可以是一个具体的数值(立即数);可以是一个具体的数值(立即数); 可以是存放数据的寄存器;可以是存放数据的寄存器; 可以用多种方式指明寻址单元在存储器中的地址。可以用多种方式指明寻址单元在存储器中的地址。寻址方式寻址方式 指令系统

5、设计了多种操作数的来源,寻找操作数的过程就是操作数的寻址方式。 操作数采取哪一种寻址方式,会影响机器运行的速度和效率。如何寻址一个操作数对程序的设计来讲很重要。数据寻址数据寻址 形式地址形式地址 指令字中的地址指令字中的地址 有效地址有效地址 操作数的真实地址操作数的真实地址 约定约定 指令字长指令字长 = 存储字长存储字长 = 机器字长机器字长形式地址形式地址 A寻址特征寻址特征3.1 寻址方式寻址方式3.1.1 立即数寻址立即数寻址立即数立即数,操作数直接包含在指令中,作为指令的操作数直接包含在指令中,作为指令的一部分存放在代码段中一部分存放在代码段中OP A立即寻址特征立即寻址特征立即数

6、立即数 可正可负可正可负 补码补码立即数可以是立即数可以是8位或位或16位的,在位的,在80386以上的以上的CPU中,还可以是中,还可以是32位的位的3.1.1 立即数寻址立即数寻址例例3-1立即数寻址立即数寻址MOV AX,2004H ;(AH)=20H,(AL)=04HMOV BL, 5AH ;(BL)=5AHMOV EAX,22334455H ;(EAX)=22334455H, (AX)=4455H立即数常用于给寄存器赋初值,只能作源立即数常用于给寄存器赋初值,只能作源操作数,不能作目的操作数操作数,不能作目的操作数 3.1.2 寄存器寻址寄存器寻址 操作数存放在指令指定的操作数存放在

7、指令指定的8位、位、16位或位或32位通用寄存器中。位通用寄存器中。 对于对于16位的操作数,寄存器可以位的操作数,寄存器可以是是AX、BX、CX、DX、SI、DI、SP和和BP等等 为避免指令执行时间过长,双操为避免指令执行时间过长,双操作数指令一般必须有一个操作数使作数指令一般必须有一个操作数使用寄存器寻址。用寄存器寻址。EA = RiOPRi寻址特征寻址特征操作数操作数R0RiRn寄存器寄存器有效地址即为寄存器编号有效地址即为寄存器编号3.1.2 3.1.2 寄存器寻址寄存器寻址例例3-2 寄存器寻址寄存器寻址MOV AX,BX ; 将将BX中的内容送入中的内容送入AX中,中, BX中的

8、内容保持不变中的内容保持不变MOV SI,DI ;将;将DI中的内容送入中的内容送入S I中,中, DI中的内容保持不变中的内容保持不变MOV EAX,EBX ;将;将EBX中的内容送入中的内容送入EAX3.1.3 3.1.3 直接寻址直接寻址 直接寻址指的是操作数在存储器中的有直接寻址指的是操作数在存储器中的有效地址效地址EA直接包含在指令中,书写时直接包含在指令中,书写时有效地址加上中括号有效地址加上中括号 EA = A操作数操作数主存主存寻址特征寻址特征LDAAAACC3.1.3 3.1.3 直接寻址直接寻址例例3-3 存储器直接寻址存储器直接寻址MOV AX,1000H ;将;将DS段

9、的段的1000H和和1001H两个两个 单元的内容送入单元的内容送入AX寄存器中寄存器中MOV EAX,ES:2000H ;将;将ES段段的的2000H2003H四个单元的内容送入四个单元的内容送入EAX寄存中,其中寄存中,其中ES为段超越前缀为段超越前缀MOV AX,BUF ;将;将DS段内以有效地址段内以有效地址BUF(符号地址)(符号地址)起始的两个单元的内容送入起始的两个单元的内容送入AX寄存器中寄存器中间接寻址间接寻址EA =(A) 有效地址由形式地址间接提供有效地址由形式地址间接提供OPA寻址特征寻址特征AEA主存主存EAA1EA A1主存主存 EA10OPA寻址特征寻址特征A一次

10、间址一次间址多次间址多次间址操作数操作数操作数操作数 子程序子程序主程序主程序8081201202调用子程序调用子程序调用子程序调用子程序间接寻址编程举例间接寻址编程举例(A) = 81(A) = 202 间址特征间址特征JMP A 3.1.4 3.1.4 寄存器间接寻址寄存器间接寻址 操作数的有效地址操作数的有效地址EA存放在基址寄存存放在基址寄存器器BX、BP,或变址寄存器,或变址寄存器SI、DI中中 如果指定的寄存器是如果指定的寄存器是BX、SI、DI,则,则操作数默认在数据段中;如果使用操作数默认在数据段中;如果使用BP,默,默认在堆栈段中认在堆栈段中 允许段超越。允许段超越。 书写时

11、对间接寻址的寄存器加上中括号。书写时对间接寻址的寄存器加上中括号。操作数的物理地址为:操作数的物理地址为:(DS)16(SI/DI/BX)或(或(SS)16(BP)EA = ( Ri )操作数操作数主存主存OPRi寻址特征寻址特征地址地址R0RiRn寄存器寄存器有效地址在寄存器中有效地址在寄存器中例例3-4 寄存器间接寻址,假定(寄存器间接寻址,假定(DS)2000H,(SI)=3600H,(,(23600H)=6022HMOV AX,SI ;先将先将DS中的值左移中的值左移4位,然后与位,然后与SI中的值相加,中的值相加, 形成物理地址是形成物理地址是23600H,再将该物理地址中的,再将该

12、物理地址中的 数据数据6022H送入送入AX寄存器中寄存器中例例3-5 寄存器间接寻址,假定(寄存器间接寻址,假定(SS)=3000H,(BP)=1100H,(31100H)=5E28HMOV BX,BP ;先将先将SS中的值左移中的值左移4位,然后与位,然后与BP中的值相加,中的值相加, 形成物理地址形成物理地址31100H,再将该物理地址中的,再将该物理地址中的 数据数据5E28H送入送入BX寄存器中寄存器中例例3-6 偏移量为偏移量为32位时的寄存器间接寻址位时的寄存器间接寻址MOV EAX,ECX ;从数据段的从数据段的DS:ECX地址处开始取四地址处开始取四个存储单元的内容送入个存储

13、单元的内容送入EAX寄存器中寄存器中MOV EAX,DX ;从从DS:DX地址处开始取四个存储单元地址处开始取四个存储单元 的内容送入的内容送入EAX中中3.1.5 寄存器相对寻址寄存器相对寻址操作数的有效地址是一个基址寄存器或变址寄操作数的有效地址是一个基址寄存器或变址寄存器中存放的数据加上指令中给出的存器中存放的数据加上指令中给出的8位或位或16位偏移量位偏移量其物理地址为:其物理地址为:(DS)16(SI/DI/BX)8位或位或16位偏移量位偏移量 或或 (SS)16(BP)8位或位或16 位偏移量位偏移量实际上就是在寄存器间接寻址的基础上,再加实际上就是在寄存器间接寻址的基础上,再加上

14、一个偏移量上一个偏移量 3.1.5 寄存器相对寻址寄存器相对寻址例例3-7寄存器相对寻址,假定(寄存器相对寻址,假定(DS)=2000H,(SS)=3000H,(SI)=3600H,(BP)=1100H,COUNT=10H,(23620H)=8A76H,(31110H)=4567H MOV AX ,SI+20H ;2000H16+3600H+20H=23620H, 将从将从23620H开始的物理地址中的开始的物理地址中的 数据数据8A76H送入送入AX寄存器中寄存器中3.1.5 寄存器相对寻址寄存器相对寻址指令指令MOV BX,BP+COUNT书书写有下面的等效形式:写有下面的等效形式: MO

15、V BX,BP+COUNT MOV BX,COUNTBPMOV BX ,BP+COUNT ;3000H161100H+10H=31110H, 将从将从31110H开始的物理地址中的开始的物理地址中的 数据数据4567H送入送入BX寄存器中寄存器中基址寻址基址寻址(1) 采用专用寄存器作基址寄存器采用专用寄存器作基址寄存器EA = ( BR ) + ABR 为基址寄存器为基址寄存器OPA操作数操作数主存主存寻址特征寻址特征ALUBR(2) 采用通用寄存器作基址寄存器采用通用寄存器作基址寄存器操作数操作数主存主存寻址特征寻址特征ALUOPR0AR0 作基址寄存器作基址寄存器 由用户指定哪个通用寄存

16、器作为基址寄存器由用户指定哪个通用寄存器作为基址寄存器通用寄存器通用寄存器R0Rn-1R1 基址寄存器的内容由操作系统确定基址寄存器的内容由操作系统确定 在程序的执行过程中在程序的执行过程中 R0 内容不变,形式地址内容不变,形式地址 A 可变可变变址寻址变址寻址EA = ( IX ) +AOPA操作数操作数主存主存寻址特征寻址特征ALUIXIX 为变址寄存器(专用)为变址寄存器(专用)通用寄存器也可以作为变址寄存器通用寄存器也可以作为变址寄存器例例 设数据块首地址为设数据块首地址为 D,求求 N 个数的平均值个数的平均值直接寻址直接寻址变址寻址变址寻址LDA DADD D + 1ADD D

17、+ 2ADD D + ( N -1 )DIV # NSTA ANSLDA # 0LDX # 0INXCPX # NBNE MDIV # NSTA ANS共共 N + 2 条指令条指令共共 8 条指令条指令ADD X, DMX 为变址寄存器为变址寄存器D 为形式地址为形式地址(X) 和和 #N 比较比较(X) +1 X结果不为零则转结果不为零则转3.1.6 基址变址寻址基址变址寻址操作数的有效地址是一个基址寄存器和一操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和个变址寄存器的内容之和 段寄存器一般由基址寄存器决定,使用段寄存器一般由基址寄存器决定,使用BX默认段寄存器默认段寄存器DS

18、;使用;使用BP,默认段寄存,默认段寄存器器SS允许段超越允许段超越其物理地址为:其物理地址为:(DS)16(BX)()(SI/DI)或(或(SS)16+(BP)+(SI/DI)3.1.6 基址变址寻址基址变址寻址例例3-8基址变址寻址,假定(基址变址寻址,假定(DS)=2000H,(,(SS)3000H,(,(BX)=1800H,(BP)=2080H ,(DI)=1000H,(SI)=0800H, (22800H)=80CFH,(32880H)=067AHMOV AX,BXDI ;(AX) ((DS)16(BX)+(DI)) 将从将从22800H开始的物理地址的两个存储单开始的物理地址的两个

19、存储单元元之中的数据之中的数据80CFH送到送到AX寄存器中寄存器中MOV AX,BP+SI ;(AX)(SS)16(BP)+(SI)将(将(32880H)中的数据)中的数据067AH送入送入AX中中相对寻址相对寻址 EA = ( PC ) + AA 是相对于当前指令的位移量(可正可负,补码)是相对于当前指令的位移量(可正可负,补码)操作数操作数寻址特征寻址特征ALUOPA相对距离相对距离 A1000PC 主存主存1000AOP3.1.7 基址变址相对寻址基址变址相对寻址操作数的有效地址是一个基址寄存器内操作数的有效地址是一个基址寄存器内容和一个变址寄存器的内容和容和一个变址寄存器的内容和8位

20、或位或16位偏移量相加之和位偏移量相加之和其物理地址为:其物理地址为: 3.1.7 基址变址相对寻址基址变址相对寻址例例3-9基址变址相对寻址基址变址相对寻址MOV AX, BX+SI+100HMOV 20H BP+SI, AXMOV CX,DS:BX+SI+NUMMOV DX,SS: NUMDIBP例例3-10 32位偏移量的寄存器比例寻址位偏移量的寄存器比例寻址MOV EAX,DAT EBX+ESIMOV EAX,NUM EBP+EDI3.1.8 寄存器比例寻址寄存器比例寻址 形成存储器操作数的有效地址可以采用:形成存储器操作数的有效地址可以采用:(1)变址寄存器的内容乘以比例因子,再)变

21、址寄存器的内容乘以比例因子,再加上偏移量,称为比例变址方式加上偏移量,称为比例变址方式(2)变址寄存器的内容乘以比例因子,再)变址寄存器的内容乘以比例因子,再加上基址寄存器的内容,称为基址比例变加上基址寄存器的内容,称为基址比例变址方式址方式(3)变址寄存器的内容乘以比例因子,再)变址寄存器的内容乘以比例因子,再加上基址寄存器的内容和偏移量,称为基加上基址寄存器的内容和偏移量,称为基址比例变址偏移方式址比例变址偏移方式比例因子可以是比例因子可以是1、2、4、8,默认情况为,默认情况为13.1.8 寄存器比例寻址寄存器比例寻址 例例3-11 寄存器比例寻址寄存器比例寻址MOV EAX,XEDI*

22、4 ;EA=(EDI)*4+X, 其中X是8位或32位偏移量MOV EBX,EDI*8EBX ;EA=(EDI)*8+(EBX)MOV EAX,XESI*4EBP ;EA=(ESI)*4+(EBP)+X, 其中X是8位或32位偏移量 (1) 相对寻址举例相对寻址举例M 随程序所在存储空间的位置不同而不同随程序所在存储空间的位置不同而不同EA = ( M+3 ) 3 = M 3*LDA # 0LDX # 0ADD X, DINXCPX # NBNE MDIV # NSTA ANSMM+1M+2M+3而指令而指令 BNE 与与 指令指令 ADD X, D 相对位移量不变相对位移量不变 3* 指令指

23、令 BNE操作数的有效地址为操作数的有效地址为 3* 相对寻址特征相对寻址特征*(2) 按字节寻址的相对寻址举例按字节寻址的相对寻址举例OP位移量位移量2000 H2008 H8JMP * + 8OP06 H2000 H2008 H8设设 当前指令地址当前指令地址 PC = 2000H转移后的目的地址为转移后的目的地址为 2008H因为因为 取出取出 JMP * + 8 后后 PC = 2002H二字节指令二字节指令故故 JMP * + 8 指令指令 的第二字节为的第二字节为 2008H - 2002H = 06H10. 堆栈寻址堆栈寻址(1) 堆栈的特点堆栈的特点堆栈堆栈硬堆栈硬堆栈软堆栈软

24、堆栈多个寄存器多个寄存器指定的存储空间指定的存储空间先进后出先进后出(一个入出口)(一个入出口) 栈顶地址栈顶地址 由由 SP 指出指出 11FFFH +12000 H进栈进栈 (SP) 1 SP出栈出栈 (SP)+ 1 SP栈顶栈顶栈底栈底2000 HSP2000 H1FFF HSP1FFFH栈顶栈顶栈底栈底进栈进栈出栈出栈 1FFF H栈顶栈顶 2000 H栈顶栈顶(2) 堆栈寻址举例堆栈寻址举例15200HACCSPX栈顶栈顶200H栈底栈底主存主存151FFHACCSP15栈顶栈顶200H栈底栈底主存主存X1FFHPUSH A 前前PUSH A 后后POP A 前前POP A 后后Y1

25、FFHACCSPX栈顶栈顶200H栈底栈底主存主存151FFH15200HACCSP栈顶栈顶200H栈底栈底主存主存X15(3) SP 的修改与主存编址方法有关的修改与主存编址方法有关 按按 字字 编址编址进栈进栈出栈出栈(SP) 1 SP(SP)+ 1 SP 按按 字节字节 编址编址存储字长存储字长 16 位位进栈进栈出栈出栈(SP) 2 SP(SP)+ 2 SP存储字长存储字长 32 位位进栈进栈出栈出栈(SP) 4 SP(SP)+ 4 SP表表3-1 8086 CPU常用指令一览表常用指令一览表 3.2.1 数据传送指令数据传送指令数据传送指令用于寄存器、存储单元和输入输数据传送指令用于

26、寄存器、存储单元和输入输出端口之间传送数据或地址。除出端口之间传送数据或地址。除SAHF和和POPF外,对标志无影响外,对标志无影响1通用数据传送指令通用数据传送指令(1)基本的传送指令)基本的传送指令格式:格式:MOV DEST , SRC功能:将源操作数的内容传送到目的操作数中功能:将源操作数的内容传送到目的操作数中3.2.1 数据传送指令数据传送指令例3-12 基本的传送指令MOV AL,30H ;立即数传送到寄存器MOV AL, BL ;寄存器之间传送字节数据MOV SI, BX+62H ;寄存器和存储器之间传送数据例3-13下列指令是不合法的。MOV 6234H,AX ;立即数不能用

27、于目的操作数MOV CS,AX ;CS不能用于目的操作数MOV IP,AX;IP不能用于目的操作数MOV DS,4234H ;立即数不能直接传送给段寄存器MOV AL,BX ;源操作数与目的操作数的位数必须一致MOV BUF1,BUF2 ;不能在两个存储器单元之间传送数据MOV DS,ES ;不能在两个段寄存器之间传送数据(2)交换指令)交换指令格式:格式:XCHG DEST,SRC功能:将源操作数与目的操作数的内容交换功能:将源操作数与目的操作数的内容交换(Exchange)例3-14 交换指令XCHG AL,CL ;字节交换XCHG BX,SI ;字交换XCHG AX,BX+SI ;寄存器

28、和存储器之间交换数据例3-15 下列指令是非法的XCHG AX,6234H ;寄存器与立即数之间不能交换XCHG BUF1,BUF2 ;存储器单元与存储器单元之间不能交换XCHG ADDR,4234H ;存储器单元与立即数之间不能交换XCHG CS,DATBX ;不能与CS(或IP)寄存器进行交换(3)堆栈操作指令)堆栈操作指令堆栈是按堆栈是按“先进后出先进后出”原则工作的一段存储器原则工作的一段存储器区域区域 格式:格式:PUSH SRC POP DEST功能:PUSH指令的执行是先将SP (SP)-2,然后将16位源操作数压入堆栈,SRC可以是寄存器或存储器 : POP指令的执行是先从栈顶

29、弹出16位操作数到目的操作数中,同时SP (SP)+2,DEST可以是寄存器(CS除外)或存储器例例3-16 将将16位通用寄存器位通用寄存器CX的内容压入堆栈,然后,弹出栈顶至的内容压入堆栈,然后,弹出栈顶至CX中,已知:(中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其,其示意图见图示意图见图3-1和图和图3-2。 12FAH+216存储器SS段首地址新栈顶原栈顶图图3-2 POP CX指令的操作过指令的操作过程示意图程示意图CXSPSS020012FA0008200620072008FA122000+-2020012FA162006200712FAH2000

30、存储器SS段首地址新栈顶原栈顶12图图3-1 PUSH CX指令的操作过指令的操作过程示意图程示意图0008SSCXSP2008FA+(4)换码指令)换码指令格式:格式:XLAT功能:这是一条专门用于功能:这是一条专门用于AL和字节表中某一存储单元之间执行数据传和字节表中某一存储单元之间执行数据传送的指令。执行(送的指令。执行(AL) BX+AL的操作,使的操作,使AL中的一个值变换中的一个值变换为内存表格中的某一个值,实现编码的转换。为内存表格中的某一个值,实现编码的转换。 例3-17 在内存的数据段中存放有一张数值09的ASCII码转换表,首地址为Hex_table,如图3-3所示。现要把

31、数值8转换成对应的ASCII码,可用以下几条指令实现:LEA BX,Hex_table ;(BX)表首偏移地址MOV AL, 8 ; (AL)8XLAT ;查表转换注意:由于要查找元素的序号放在注意:由于要查找元素的序号放在AL中,所以表格的最大中,所以表格的最大长度不能超过长度不能超过256个字节个字节2地址传送指令地址传送指令(1)有效地址传送指令)有效地址传送指令格式:格式:LEA DEST,SRC功能:这是一条取有效地址的指令(功能:这是一条取有效地址的指令(Load effective address)。)。它用来将源操作数的偏移地址传送到通用寄存器、指针或变址它用来将源操作数的偏移

32、地址传送到通用寄存器、指针或变址寄存器中寄存器中 Hex_table+0Hex_table+1Hex_table+2Hex_table+8Hex_table+90128930H31H32H38H39H图图3-3 09的换码表的换码表例3-18 有效地址传送指令MOV BX,3200H ;将3200H单元的内容送BXLEA BX,3200H ;将有效地址3200H送BXLEA SI,ADDR ;将ADDR的有效地址送SI(2)地址指针传送指令)地址指针传送指令格式:格式:LDS DEST,SRC LES DEST,SRC功能:将源操作数指定的连续功能:将源操作数指定的连续4个存储器单元中存放的个

33、存储器单元中存放的32位地址指针位地址指针(包括一个段地址和一个偏移地址)传送到两个(包括一个段地址和一个偏移地址)传送到两个16位寄存器位寄存器 例3-19 地址指针传送指令POINT DD 55663344H ;设定POINT的段地址和偏移地址 LDS BX,POINT ;(BX)=3344H,(DS)=5566H LES BX,POINT ;(BX)=3344H,(ES)=5566H地址传送指令的寄存器不能使用段寄存器,地址传送指令的寄存器不能使用段寄存器,且操作数必须使用存储器寻址方式。且操作数必须使用存储器寻址方式。3标志传送指令标志传送指令(1)标志读写指令)标志读写指令格式:格式

34、:LAHF/SAHF功能:功能:LAHF用于将标志寄存器的低用于将标志寄存器的低8位送位送AH,即将标志寄存器,即将标志寄存器FLAGS中的中的SF(符号标志)、(符号标志)、ZF(零标志)、(零标志)、AF(半加进位标(半加进位标志)、志)、PF(奇偶标志)和(奇偶标志)和CF(进位标志进位标志)5个标志位分别传送到累加器个标志位分别传送到累加器AH的对应位的对应位 D7 D0 D15 OF DF IF TF D0SF ZF AF PF CFAH图图3-4 LAHF指令操作示意图指令操作示意图FLAGS(2)标志入栈出栈指令)标志入栈出栈指令格式:格式:PUSHF/POPF功能:功能:PUS

35、HF指令是将标志寄存器中的内容压入堆栈,指令的操指令是将标志寄存器中的内容压入堆栈,指令的操作为作为SP-1(FLAGSH),SP-2(FLAGSL),(SP)(SP)-2POPF指令是将栈顶的字单元内容弹出到标志寄存器中,同时指令是将栈顶的字单元内容弹出到标志寄存器中,同时SP(SP)+2SAHF和和POPF将直接影响标志寄存器的内容,利用这一特性,可将直接影响标志寄存器的内容,利用这一特性,可以非常方便地改变标准寄存器中指定位的状态以非常方便地改变标准寄存器中指定位的状态4输入输出指令输入输出指令格式:格式:IN DEST,SRC OUT DEST,SRC功能:专门用于累加器和功能:专门用

36、于累加器和I/O端口之间执行数据传送端口之间执行数据传送例3-20 输入输出指令IN AL,28H ;从端口28H输入一个字节到ALOUT 15,AL ;从AL输出一个字节到端口15MOV DX,0362H ;先将端口地址送入DXIN AX,DX ;从端口0362H输入一个字到AX3.2.2 算术运算指令算术运算指令1加法指令加法指令(1)不带进位加法指令)不带进位加法指令格式:格式:ADD DEST, SRC功能:将源操作数与目的操作数相加,结果送入原存放目的操作数的地方。功能:将源操作数与目的操作数相加,结果送入原存放目的操作数的地方。该指令对标志位有影响。该指令对标志位有影响。例3-21

37、 不带进位加法指令ADD CL,20H ;(CL)(CL)+20HADD AX,SI ;(AX)(AX)+(SI)ADD DATA BX,AL ;(BX)+DATA)(BX)+DATA)+(AL)ADD DX,BX+SI ;(DX)(DX)+(BX)+(SI)(2)带进位加法指令)带进位加法指令格式:格式:ADC DEST,SRC功能:将源操作数和目的操作数相加,同时加上进位标志的现行值功能:将源操作数和目的操作数相加,同时加上进位标志的现行值CF,结果送入原存放目的操作数的地方,结果送入原存放目的操作数的地方例3-22 带进位加法指令ADC AX,SI ;(AX)(AX)+(SI)+CFAD

38、C BX,3000H ;(BX)(BX)+3000H+CFADC AX,DATSI ;(AX)(AX)+(SI+DAT)+CF(3)加)加1指令指令格式:格式:INC DEST功能:将目的操作数中的内容加功能:将目的操作数中的内容加1,然后送回该操作数。目的操作数可以,然后送回该操作数。目的操作数可以是寄存器或存储器。该指令一般用在循环程序中修改指针和循环次数是寄存器或存储器。该指令一般用在循环程序中修改指针和循环次数例3-23 加1指令INC BX ;(BX)(BX)+1INC BYTE PTR DI+100H ;将(DI)100H所指的字节 单元内容加1(4)BCD码加法十进制调整指令码加

39、法十进制调整指令 未组合BCD码的加法调整指令 格式:AAA功能:将AL的内容调整为一位非组合型的十进制数 例3-24 两个未组合BCD码的加法运算,设(AH)=0MOV AL,08 ;(AL) 08 (AL)=00001000ADD AL,09 ;(AL) 08+09 (AL)=00010001=11HAAA ;AF=1,(AH)(AH)+01,AL(AL+6),AL高4位为0,(AL)=00000111,结果(AX)=0107 AF=1 CF=1 组合组合BCD码的加法调整指令码的加法调整指令格式:格式:DAA功能:将功能:将AL的内容调整为两位组合型的二进制数的内容调整为两位组合型的二进

40、制数例3-25 两个组合BCD码的加法运算MOV AL,37 ;(AL)37MOV BL,35 ;(BL)35ADD AL,BL ;(AL)=6CH,AF=0,CF=0DAA ;因为AL中的低4位大于9,所以(AL)(AL)+06, 结果(AL)=72,AF=1,CF=0 2减法指令减法指令(1)不带借位的减法指令)不带借位的减法指令格式:格式:SUB DEST, SRC功能:将目的操作数减去源操作数,结果送入目的操作数。功能:将目的操作数减去源操作数,结果送入目的操作数。例3-26 不带借位的减法指令SUB AX,3000H ;(AX)(AX)-3000HSUB BX,SI+100H ;(B

41、X)(BX)-SI+100H(2)带借位的减法指令)带借位的减法指令格式:格式:SBB DEST, SRC功能:将目的操作数减去源操作数,还要减去功能:将目的操作数减去源操作数,还要减去CF的值,结果送入的值,结果送入目的操作数目的操作数例3-27 带借位的减法指令SBB AX,BX ;(AX)(AX)-(BX)-CFSBB WORD PTR SI,1068H ;(SI)(SI)-1068H-CF(3)减)减1指令指令格式:格式:DEC DEST功能:将目的操作数的内容减功能:将目的操作数的内容减1,然后送回目的操作数。,然后送回目的操作数。例3-28 减1指令DEC BL ;(BL)(BL)

42、-1DEC BYTE PTRDI+2 ;DI+2DI+2-1(4)求补指令)求补指令格式:格式:NEG DEST功能:对目的操作数取补码,即用零减去此操作数,结果功能:对目的操作数取补码,即用零减去此操作数,结果送回此操作数中。送回此操作数中。例3-29设(AX)=020H,(BX)2212HNEG AX ;(AX)0-(AX),结果(AX)=0E0HNEG BX ;(BX)0-(BX),结果(BX)=DDEEH(5)比较指令)比较指令格式:格式:CMP DEST,SRC功能:将目的操作数减去源操作数,结果不送回目的操作数,二操作功能:将目的操作数减去源操作数,结果不送回目的操作数,二操作数原

43、值不变,只是影响状态标志位。其余同数原值不变,只是影响状态标志位。其余同SUB指令。指令。这条指令后边一般跟条件转移指令,以判断二操作数是否满足某种关这条指令后边一般跟条件转移指令,以判断二操作数是否满足某种关系。根据比较结果对标志位的影响来实现程序的分支。系。根据比较结果对标志位的影响来实现程序的分支。(6)BCD码减法十进制调整指令码减法十进制调整指令 未组合未组合BCD码的减法调整指令码的减法调整指令格式:格式:AAS功能:与功能:与AAA指令类似是将指令类似是将AL的内容调整为一位非组合型的十进制数的内容调整为一位非组合型的十进制数例3-30 两个未组合BCD码的减法运算MOV AX,

44、0608H ;AX0608HSUB AL, 09H ;AL0FFHAAS ;AL09H,AH05H 组合组合BCD码的减法调整指令码的减法调整指令格式:格式:DAS功能:与功能:与DAA指令类似,是将指令类似,是将AL 的内容转换成两位组合型的十进制数的内容转换成两位组合型的十进制数例3-31:两个组合BCD码的减法运算MOV AL,73H ;AL73HSUB AL,27H ;AL4CHDAS ;AL46H3乘法指令乘法指令在乘法指令中,操作数只是乘数,被乘数为累加器,在乘法指令中,操作数只是乘数,被乘数为累加器,隐含为目的操作数。隐含为目的操作数。(1)无符号数乘法指令)无符号数乘法指令格式

45、:格式:MUL SRC功能:字节相乘时,功能:字节相乘时,AL与源操作数相乘,乘积为与源操作数相乘,乘积为16位送入位送入AX中;中;字相乘时,字相乘时,AX与源操作数相乘,乘积为与源操作数相乘,乘积为32位,高位,高16位送位送DX,低,低16位送位送AX。对标志位影响:若乘积的高半部分(字节相乘时为对标志位影响:若乘积的高半部分(字节相乘时为AH,字相乘时,字相乘时为为DX)不为零,则)不为零,则CF1,OF1;否则;否则CF=0,OF=0。其它标。其它标志位为任意值。志位为任意值。例3-32 无符号数乘法指令MUL DL ;AXAX*DLMUL CX ;DX:AXAX*CXMUL BYT

46、E PTR SI+8 ;AXAL*SI+8(2)有符号数乘法指令)有符号数乘法指令格式:格式:IMUL SRC功能:与功能:与MUL的功能相同,只是要求两乘数都必须为有符号数。的功能相同,只是要求两乘数都必须为有符号数。例3-33两个有符号数的乘法MOV AL,FEH ;ALFEH,FEH看作有符号数-2MOV CL,11H ;CL11H,11H看作有符号数17IMUL CL ;AXFFDEH,执行02H*11H, 将乘积结果取补码得FFDEH=-34(3)非组合)非组合BCD码乘法调整指令码乘法调整指令格式:格式:AAM功能:用于将非组合功能:用于将非组合BCD码乘法的结果(在码乘法的结果(

47、在AL中)转换成两个非组合中)转换成两个非组合型型BCD码(码(AH和和AL中)中)例3-34 两个非组合BCD码的乘法运算。MOV AL,,06H ;AL06HMOV BL,07H ;BL07HMUL BL ;AX002AHAAM ;AX0402H4除法指令除法指令(1)无符号数除法指令)无符号数除法指令格式:格式:DIV SRC功能:功能:a.字节除法:将字节除法:将AX/SRC的商送入的商送入AL,将,将AX/SRC的余数送入的余数送入AHb.字除法:将字除法:将DX:AX/SRC的商送入的商送入AX,将,将DX:AX/SRC的余数送入的余数送入DX例3-35 无符号数除法指令DIV C

48、L ;AX中的16位数除以CL中的8位数, 商送AL,余数送AHDIV CX ;DX和AX中的32位数除以CX中的16位数, 商送AX,余数送DX(2)有符号数除法指令)有符号数除法指令格式:格式:IDIV SRC功能:与功能:与DIV指令相比只有两点不同:指令相比只有两点不同:a.两个操作数均为有符号数。两个操作数均为有符号数。b.如果被除数不是除数的两倍长度,对被除数要用专门的指令进行符号如果被除数不是除数的两倍长度,对被除数要用专门的指令进行符号扩展,以产生双倍长度表示的被除数。扩展,以产生双倍长度表示的被除数。 (3)非组合)非组合BCD码除法调整指令码除法调整指令格式:格式:AAD功

49、能:功能:AAD指令常用于指令常用于DIV指令之前,将指令之前,将AX中的两位非组合中的两位非组合BCD码变为码变为二进制数二进制数例3-36 两个非组合BCD码的除法运算。MOV AX, 0605H ;AX0605HMOV BL,07H ;BL07HAAD ;AX0041HDIV BL ;商值AL09,余数AH02H(4)有符号扩展指令)有符号扩展指令格式:格式:CBW CWD功能:功能:CBW为字节扩展指令,将为字节扩展指令,将AL中有符号数的符号位扩展到中有符号数的符号位扩展到AH中中例3-37MOV AL,12H ;AL12HCBW ;AX0012H,AH=00HMOV AX,BBA3

50、HCWD ;DXFFFFH,AXBBA3H3.2.3 逻辑运算与移位指令逻辑运算与移位指令逻辑运算指令主要用于对寄存器或存储器单元中某些位的逻辑运算指令主要用于对寄存器或存储器单元中某些位的测试、置位、复位等操作测试、置位、复位等操作逻辑运算指令对操作数都是按位进行操作,对相应的标志逻辑运算指令对操作数都是按位进行操作,对相应的标志位产生影响,操作数可以是字节或字位产生影响,操作数可以是字节或字1逻辑运算指令逻辑运算指令格式格式:AND DEST,SRC ;逻辑与,(DEST)(DEST)(SRC)OR DEST,SRC ;逻辑或,(DEST(DEST)(SRC)NOT DEST ;逻辑非,(

51、DEST) ( )XOR DEST,SRC ;逻辑异或,(DEST) (DEST) + (SRC)TEST DEST,SRC;测试,(DEST)(SRC)DEST(1)AND、OR、和、和XOR指令将目的操作数与源操作数指令将目的操作数与源操作数按位进行与、或、异或运算,结果送回目的操作数按位进行与、或、异或运算,结果送回目的操作数例例3-38AND AL,0FH ;AL中的内容和中的内容和OFH相与,结果在相与,结果在AL中中AND AX,BX ;AX和和BX中的内容相与,结果在中的内容相与,结果在AX中中AND DX,BX+SI ;DX和和2个存储单元的内容相与,个存储单元的内容相与, 单

52、元地址由单元地址由BX+SI和和BX+SI+1指出,结果在指出,结果在DX中中OR AX,00F0H ;AX和和00F0相或,结果在相或,结果在AX中中XOR AL,0FH ;AL和和0FH相异或,结果在相异或,结果在AL中中XOR AX,AX ;AX的内容本身进行异或,结果的内容本身进行异或,结果AX清零清零(2)TEST指令和指令和AND指令执行同样的操作,但指令执行同样的操作,但TEST指指令不送回操作结果,而仅仅影响标志位。令不送回操作结果,而仅仅影响标志位。例例3-39TEST AX,8000H ;如果;如果AX的最高位为的最高位为1,则,则ZF0, 否则否则ZF=1TEST AL,

53、01H ;如果;如果AL的最低位为的最低位为1,则,则ZF=0, 否则否则ZF=1(3)NOT指令将操作数的每一位进行求反,再指令将操作数的每一位进行求反,再送回目的操作数。送回目的操作数。例例3-40NOT AL ;AL中内容求反码,结果在中内容求反码,结果在AL中中NOT BX ;BX中内容求反码,结果在中内容求反码,结果在BX中中NOT WORD PTR 1000H ;1000H和和1001H 2个单元中个单元中 的内容求反码,再送回这的内容求反码,再送回这2个单元中个单元中例例3-41AND AL,0FH ;AL中的高中的高4位请零位请零OR AL,0FH ;AL中的低中的低4位置位置

54、1XOR AL,0FH ;AL中的低中的低4位求反位求反TEST AL,0FH ;检查;检查AL中的低中的低4位是否全为零位是否全为零2移位指令移位指令移位指令可以对寄存器或存储器单元按字节或字进行操作,移位指令可以对寄存器或存储器单元按字节或字进行操作,移位指令包括:算术左移指令移位指令包括:算术左移指令SAL(Shift Arithmetic Left)、算术右、算术右移指令移指令SAR(Shift Arithmetic Right)、逻辑左移指令、逻辑左移指令SHL(Shift Logic Left)、逻辑右移指令、逻辑右移指令SHR(Shift Logic Right)式中式中COUN

55、T表示移位数,其值或是表示移位数,其值或是1,或大于,或大于1,当大于,当大于1时其值由时其值由CL寄存器的值确定寄存器的值确定功能:将目的操作数中的内容按功能:将目的操作数中的内容按COUNT的值进行左(右)移位,的值进行左(右)移位,最低位补最低位补0,最高位进入,最高位进入CF但但SAR指令移位时,最高位返回原位指令移位时,最高位返回原位 最高位最低位CF0最高位最低位CF0最高位最低位CF0最高位最低位CF图图3-5 非循环移位指令功能示意图非循环移位指令功能示意图a)算术左移指令SALd)逻辑右移指令SHRb)逻辑左移指令SHLc)算术右移指令SAR例例3-42将将AL寄存器中的数据

56、左移寄存器中的数据左移1位,位,BL寄存器中的数据右移寄存器中的数据右移4位位 MOV AL,52H ;AL52H MOV BL,63H ;BL63H MOV CL,04H ;CL04HSHL AL,1 ;ALA4H SHR BL,CL ;BL0CH3循环移位指令循环移位指令循环移位指令包括:不含进位位的循环左移指令循环移位指令包括:不含进位位的循环左移指令ROL(Rotate Left)、)、不含进位位的循环右移指令不含进位位的循环右移指令ROR(Rotate Right)、含进位位的循环左移、含进位位的循环左移指令指令RCL(Rotate through CF Left)、含进位位的循环右

57、移指令、含进位位的循环右移指令RCR(Rotate through CF Right)功能:循环移位是将目的操作数从一端移出的位返回到另一端形成循环,功能:循环移位是将目的操作数从一端移出的位返回到另一端形成循环,它可以分成不带进位的循环移位和带进位的循环移位它可以分成不带进位的循环移位和带进位的循环移位 图图3-6 循环移位指令的功能循环移位指令的功能c)不带CF的循环右移指令ROR最高位最低位CF最高位最低位CF最高位最低位CF0最高位最低位CFa)不带CF的循环左移指令ROLb)带CF的循环左移指令RCLd)带CF的循环右移指令RCR 例例3-43 将将AX的最高位移入的最高位移入DX的

58、最低位的最低位 RCL AX,1 ;将;将AX的最高位移位的最高位移位CF RCL DX,1 ;将;将CF移入移入DX的最低位的最低位 例例3-44 将将AX00A2H,BX=00B4H, 装配在一起形成装配在一起形成AXA2B4H MOV CL,8 ;(CL)移位数移位数8 ROL AX,CL ;AX循环左移循环左移8位,(位,(AX)=A200HADD AX,BX 3.2.4 串操作指令串操作指令1基本串操作指令基本串操作指令基本串操作指令中的源操作数地址由基本串操作指令中的源操作数地址由DS:SI提供,目的操作提供,目的操作数地址由数地址由ES:DI提供。提供。串操作的方向是递增还是递减

59、由标志位串操作的方向是递增还是递减由标志位DF确定,确定,DF=1,按递,按递减方向进行;减方向进行;DF=0,按递增方向进行,按递增方向进行 (1)串传送指令)串传送指令格式:格式:MOVS 目的串,源串目的串,源串MOVSB ;字节传送,字节传送,ES:DIDS:SI, SISI1,DIDI 1MOVSW ;字传送,;字传送,ES:DIDS:SI, SISI 2,DIDI 2功能:将数据段存储单元的一个字节或字,传送到附加段存储功能:将数据段存储单元的一个字节或字,传送到附加段存储单元中。单元中。 (2)取串指令)取串指令格式:格式:LODS 源串源串LODSB ;字节传送,字节传送,AL

60、DS:SI,SISI 1LODSW ;字传送,字传送,AXDS:SI,SISI 2功能:将存储器单元源串中的一个字节或字内容送入到功能:将存储器单元源串中的一个字节或字内容送入到AL或或AX中中(3)存串指令)存串指令格式:格式:STOS 目的串目的串STOSB ;字节传送,字节传送,ES:DIAL,DIDI 1STOSW ;字传送,字传送,ES:DIAX,DIDI 2.功能:将累加器功能:将累加器AL或或AX中的内容存入到存储单元的附加段中中的内容存入到存储单元的附加段中(4)串比较指令)串比较指令格式:格式:CMP 源串,目的串源串,目的串CMPSB ;字节传送字节传送ES:SI-DS:D

温馨提示

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

评论

0/150

提交评论