版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3.1 寻址方式寻址方式指令:指令:要求计算机执行特定操作的命令(二进制编码)第第3章章 8086/8088指令系统指令系统指令系统:指令系统:计算机所能执行的全部指令的集合。指令程序指令程序:能完成某种任务的计算机能够识别和 执行的指令序列。源程序源程序:用户为解决自己的问题所编的程序。目的程序:目的程序:用计算机能够识别和执行的二进制编 码而编写的程序。 指令操作数和指令功能说明中用缩写符号3.1 寻址方式寻址方式n 寻址方式是指寻址方式是指CPUCPU在执行指令时寻找操作数的方式。在执行指令时寻找操作数的方式。80868086指指令中涉及的操作数(源)主要有四种:令中涉及的操作数(源)主
2、要有四种:立即操作数、寄存器立即操作数、寄存器操作数、存储器操作数和操作数、存储器操作数和I/OI/O端口操作数端口操作数。 1 1 立即寻址立即寻址 5 5 寄存器相对寻址寄存器相对寻址 2 2 寄存器寻址寄存器寻址 6 6 基址加变址寻址基址加变址寻址 3 3 直接地址直接地址 7 7 相对的基址加变址寻址相对的基址加变址寻址 4 4 间接地址间接地址 8 I/O8 I/O端口寻址端口寻址n一条指令由两部分组成一条指令由两部分组成: :操作码部分:规定指令执行什么样的操作;操作码部分:规定指令执行什么样的操作;操作数部分:是指令的操作对象,无操作数、单操作数、操作数部分:是指令的操作对象,
3、无操作数、单操作数、双操作数。双操作数。在微机中操作数存放的位置有下列3种: (1) 操作数包含在指令字节中。即指令格式中操作数部分就是操作数本身。这种寻址方式称为立即寻址,这种操作数就称为立即数。 (2) 操作数存放在CPU的某个内部寄存器中。此时指令格式中操作数部分是CPU内部寄存器的一个编码,这种寻址方式称为寄存器寻址。 (3) 操作数在内存的数据区中。处理器可根据指令字节中给出的地址信息求出存放操作数的内存地址称为有效地址EA(Effective Address),然后对存放在有效地址中的操作数进行存取操作。 指令系统中还有一种程序转移类指令。这类指令所指出的地址是将程序转移到指令规定
4、的转移地址,然后再顺序执行程序。这种提供转移地址的方法称为程序转移指令地址的寻址方式。 1 立即寻址立即寻址(Immediate Addressing) 操作数直接放在指令中,作为指令的一部分存放操作数直接放在指令中,作为指令的一部分存放在代码段里,可以是在代码段里,可以是8 8位、位、1616位,也叫立即数,用于给位,也叫立即数,用于给寄存器赋初值。例如:寄存器赋初值。例如:MOV AX, 1234H; 将16位立即数1234H送入AX寄存器中,其中(AH)=12H, (AL)=34HMOV AL, 0FF00H; 如操作数以字母开头,前面加0ADD AX, 3064H; 将立即数3064H
5、与AX内容相加,结果存入AX中,即(AX)+3064H(AX)2 寄存器寻址寄存器寻址(Register Addressing) 操作数包含在操作数包含在CPUCPU的内部寄存器中,由指令指定寄存器的的内部寄存器中,由指令指定寄存器的名称。名称。如:如:INC CX ; 将CX的内容加1, 即(CX)+1(CX)MOV AX,CX ; 将CX的内容传送到AX寄存器中,即CX)(AX) 注意:源操作数的长度必须与目的操作数的一致。注意:源操作数的长度必须与目的操作数的一致。3 直接寻址直接寻址(Direst Addressing) 操作数所在存储单元地址的操作数所在存储单元地址的1616位偏移量
6、(有效地址位偏移量(有效地址EA)直接包含在指令中,操作数默认存放在数据段中,允许段超越。直接包含在指令中,操作数默认存放在数据段中,允许段超越。如如: MOV AX,2000H ;DS162000H MOV BX,ES:2000H ;ES162000H MOV AL, 1064H ; 将有效地址将有效地址EA=1064H单元单元中的内容传送到中的内容传送到AL寄存器中。寄存器中。4 寄存器间接寻址寄存器间接寻址(Register Indirect Addressing) 指令里给出的寄存器中的值不是操作数本身,而是操作数指令里给出的寄存器中的值不是操作数本身,而是操作数的有效地址的有效地址E
7、AEA。 SISI、DIDI、BXBX(默认操作数在数据段中)默认操作数在数据段中): MOV AX,BX BP BP (默认操作数在堆栈段中(默认操作数在堆栈段中): MOV AX,BP 5 寄存器相对寻址寄存器相对寻址(Register Relative Addressing) 操作数的有效地址是一个基址或变址寄存器的内容与指令操作数的有效地址是一个基址或变址寄存器的内容与指令中指定的中指定的8 8位或位或1616位位移量之和。位位移量之和。如如 MOV BX,COUNTBX; DS=3000H,BX=2000H,COUNT=3000H 3000H 16 +2000H+30000H= 35
8、000H 6 基址变址寻址方式基址变址寻址方式(Based Indexed AddressingBased Indexed Addressing) 操作数的有效地址是一个基址寄存器(操作数的有效地址是一个基址寄存器(BPBP、BX)BX)和一个变和一个变址寄存器址寄存器(SI(SI、DI)DI)的内容之和,两个寄存器均由指令指定。的内容之和,两个寄存器均由指令指定。 如如 MOV AX,BXSI 7 相对基址变址寻址方式相对基址变址寻址方式(Relative Based Indexed Addressing) 操作数的有效地址是一个基址寄存器(操作数的有效地址是一个基址寄存器(BP、BX)和一
9、个和一个变址寄存器变址寄存器(SI、DI)的内容之和,再加上指令中指定的的内容之和,再加上指令中指定的8位位或或16位位移量位位移量. 如如 MOV AX,200HBXSI 注:以上四种寻址方式都允许段超越。注:以上四种寻址方式都允许段超越。8 I/O8 I/O端口寻址端口寻址 通过直接和间接的方式来进行操作数的寻址。通过直接和间接的方式来进行操作数的寻址。 直接寻址直接寻址: :能够寻址的端口号在能够寻址的端口号在0 0255255的范围内,即能的范围内,即能够寻址够寻址256256个端口。例如:个端口。例如: IN AL,60H ;60H60H端口中的内容送至端口中的内容送至ALAL 间接
10、寻址间接寻址: :必须通过必须通过DXDX间接寻址,这种方式能够寻址的间接寻址,这种方式能够寻址的端口号范围为端口号范围为0 06553565535,共计,共计64K64K个端口。例如:个端口。例如: MOV DX,0360H;0360H0360H端口中的内容送至端口中的内容送至ALAL IN AL,DX 程序转移地址的寻址方式程序转移地址的寻址方式 图 4.10 程序转移地址的寻址方式段内直接(相对)寻址; (b) 段内间接寻址;(c) 段间直接寻址; (d) 段间间接寻址 注:有关方括号的地址表达,必须遵循下列规则:注:有关方括号的地址表达,必须遵循下列规则:1)1)立即数可以出现在方括号
11、内,表示直接地址。立即数可以出现在方括号内,表示直接地址。例如例如: : 2000H2)只有只有BXBX、BPBP、SISI和和DIDI可以出现在方括号以内,它们可可以出现在方括号以内,它们可以单独出现,可以组合或以寄存器和常数相加的形式出以单独出现,可以组合或以寄存器和常数相加的形式出现,但现,但BXBX和和BPBP、SISI和和DIDI不允许出现在同一个方括号内。不允许出现在同一个方括号内。3)3)方括号有相加的含义,下面的几种写法都是等价的。方括号有相加的含义,下面的几种写法都是等价的。 6BX+SI BX+6 SI BX+SI+64)4)若方括号内含有若方括号内含有BPBP,则隐含使用
12、,则隐含使用SSSS提供段地址。提供段地址。 常见形式:常见形式:DISPBP+SI DISPBP+DI 20PA=SS 16+EA DISPBP3.2 8086指令系统指令系统v数据传送类指令数据传送类指令v算术运算类指令算术运算类指令v逻辑运算类指令逻辑运算类指令v串操作类指令串操作类指令v控制转移类指令控制转移类指令v处理器控制类指令处理器控制类指令数据传送指令通用数据传送指令MOV 字节或字的传送PUSH 入栈指令POP 出栈指令XCHG 交换字或字节XLAT 表转换输入输出指令IN 输入OUT 输出地址目标传送指令LEA 装入有效地址LDS 装入数据段寄存器LES 装入附加段寄存器标
13、志传送指令LAHF 标志寄存器低字节GAHT AH内容装入标志PUSHF 标志寄存器入栈操作POPF 出栈并送入标志寄存器3.2.1 数据传送类指令数据传送类指令( (不影响标志)不影响标志)一、通用数据传送指令一、通用数据传送指令1 MOV DST,SRC存储器寄存器立即数段寄存器注:MOV指令不能实现的数据传送:1)不能两个操作数都是存储单元2)不能用CS、IP作目的操作数3)不允许立即数作目的操作数4)不允许段寄存器间直接传送5)不能向段寄存器送立即数6)不能两个操作数一个是8位,一个是16位2 PUSH SRC; 入栈指令入栈指令 spsp-2 (sp+1,sp)src POP DST
14、; 出栈指令出栈指令 dest(sp+1,sp) spsp+2 注:1)入、出栈操作均是以字为单位 2)SRC、DST:R16、SEG、M16 3) DST 不允许是CS、IP寄存器3 XCHG DST,SRC 交换指令 DST SRC 将两个操作数相互交换 注: 1 允许字或字节操作 2 段寄存器和立即数不能做操作数 3 两个操作数必有一个在寄存器中4 XLAT;换码指令: 用查表方式将一种代码换成另一种代码 (BX+AL) AL (完成一字节的查表转换)注:必须事先把表的起始地址送BX,AL内容为表中的编号.二、地址传送指令二、地址传送指令用途:用于传送操作数的地址(段地址或偏移地址)用途
15、:用于传送操作数的地址(段地址或偏移地址) 执行结果不影响标志位执行结果不影响标志位1 取有效地址指令取有效地址指令LEA REG16,MEM ; ; 将指定内存单元的偏移地址送到指将指定内存单元的偏移地址送到指定寄存器定寄存器2 地址指针装入指令地址指针装入指令LDS REG16, MEM32 ; DS:REG(MEM; DS:REG(MEM开始的四个内存单开始的四个内存单元的内容元的内容) )注:1)源操作数必须是一个存储器操作数; 2)目的操作数必须是一个16位的通用寄存器。三、标志寄存器传送指令三、标志寄存器传送指令1 LAHF ; AH FLAGS的低的低8位位2 SAHF; FLA
16、GS的低的低8位位 AH3 PUSHF; 将标志寄存器中的内容压入堆栈将标志寄存器中的内容压入堆栈4 POPF ; 从堆栈中弹出字或双字到标志寄存器中从堆栈中弹出字或双字到标志寄存器中 该组指令用于对该组指令用于对FLAGSFLAGS进行保护和恢复,常进行保护和恢复,常用在子程序和中断服务程序的开头和结尾处。用在子程序和中断服务程序的开头和结尾处。四、输入输出指令四、输入输出指令 IN AL,n IN AL,DX ;从从8位端口读取一个字节位端口读取一个字节 IN AX,n IN AX,DX ;从从16位端口读取一个字位端口读取一个字 OUT n,AL OUT DX,AL ;向向8位端口写一个
17、字节位端口写一个字节 OUT n,AX OUT DX,AX ;向向16位端口写一个字位端口写一个字说明说明:当端口地址号为当端口地址号为00HFFH,采用第一种格式,共寻,采用第一种格式,共寻 址址256个端口;任一端口地址都可采用第二种格式。个端口;任一端口地址都可采用第二种格式。 注意:与I/O端口输入/输出信息只能通过累加器才能实现, 不能用其它寄存器代替。 同理,间接寻址时只能通过DX寄存器实现。 当I/O端口与内存统一编址时,此时CPU与I/O端口间交换信息就可采用访问存储器的指令来访问I/O端口,不必用输入/输出指令。3.2.2 算术运算类指令算术运算类指令一、加法指令一、加法指令
18、1 ADD DST,SRC ; SRC+DST DST2 ADC DST,SRC ; SRC+ DST+CF DST说明:说明:1) 目的操作数可以是寄存器、存储单元;目的操作数可以是寄存器、存储单元; 源操作数可以是寄存器、存储单元及立即数;源操作数可以是寄存器、存储单元及立即数; 不能同时为存储单元。不能同时为存储单元。2)对标志位)对标志位CF、OF、PF、SF、ZF、AF 有影响有影响 。非法指令:非法指令:ADD DS,BX;操作数不允许为段寄存器操作数不允许为段寄存器SUB DI.BP;不允许两操作数都为存储单元不允许两操作数都为存储单元ADD 34H,EAX;目的操作数不能为立即
19、数目的操作数不能为立即数3.2.2 算术运算类指令算术运算类指令一、加法指令一、加法指令3 INC DST ; DST+1 DST (increment)说明:说明:1)此指令完成对指定的操作数加)此指令完成对指定的操作数加1,然后返回此操作数;,然后返回此操作数;2)它影响的标志位为)它影响的标志位为AF,OF,PF,SF,ZF,而对进位,而对进位CF没有影响;没有影响;3)该指令只有一个操作数,如果内存单元的内容增)该指令只有一个操作数,如果内存单元的内容增1,则,则程序中必须有说明该存储单元是字或字节的符号或说明程序中必须有说明该存储单元是字或字节的符号或说明语句。语句。例:例:INC
20、BYTE PTRBX;内存内存字节字节单元内容增加单元内容增加1INC WORD PTRBX;内存内存字字单元内容增加单元内容增加1例例3.13.1:计算:计算56AB7809H+23905DF2H=56AB7809H+23905DF2H=? 分析:加法要分两次进行,先进行低两个字节相加,然后再分析:加法要分两次进行,先进行低两个字节相加,然后再做高两个字节的相加,此时必须考虑前两个字节相加后做高两个字节的相加,此时必须考虑前两个字节相加后的进位。假设被加数和加数分别存放在以的进位。假设被加数和加数分别存放在以DADA1DADA1和和DATA2DATA2为首地址的存储区,和存放在以为首地址的存
21、储区,和存放在以DATA3DATA3为首地址的存储区。为首地址的存储区。MOV AX, DATA1 ;低低16位的被加数送累加器位的被加数送累加器AXADD AX, DATA2 ;低低16位的被加数与加数相加位的被加数与加数相加MOV DATA3,AX ;低低16位相加的和送存位相加的和送存MOV AX,DATA1+2 ;高高16位的被加数送累加器位的被加数送累加器AXADC AX,DATA2+2 ;高高16位的被加数与加数相加位的被加数与加数相加MOV DATA3+2,AX ;高高16位相加的和送存位相加的和送存 存储器存储器 DATA1 F2H 5DH 78H ABH 被加数被加数 数据段
22、数据段 90H 23H 加数加数 09H 56H DATA2 二、减法指令二、减法指令1 SUB DST,SRC ; DST - SRC DST 同同ADD2 SBB DST,SRC ; (Subtract with borrow) 带借位减带借位减 主要用于多字节相减同主要用于多字节相减同ADC3 DEC DST; DST-1 DST (Decrement) 对指定的操作数减对指定的操作数减1,操作数可以是寄存器,也,操作数可以是寄存器,也可以是内存单元;影响可以是内存单元;影响AFOFPFSF和和ZF但不但不影响影响CF;同样对存储单元说明是字或字节的操作。;同样对存储单元说明是字或字节的
23、操作。二、减法指令二、减法指令4 NEG DST ;(Negate) 对操作数取补,即用对操作数取补,即用0减操作数,把结果送回操作数,求减操作数,把结果送回操作数,求补指令不同于补码的求法,若补指令不同于补码的求法,若DST为正数,求补后可得绝对值为正数,求补后可得绝对值相等的负数相等的负数(补码补码);若;若DST为负数为负数(补码补码),求补可得绝对值相,求补可得绝对值相等的正数。等的正数。5 CMP DST,SRC ; DST - SRC (Compare) 比较指令完成两个操作数相减,使结果反映在标志位上,比较指令完成两个操作数相减,使结果反映在标志位上,但并不送回结果;但并不送回结
24、果;其后往往跟着一条转移指令,根据比较结其后往往跟着一条转移指令,根据比较结果产生不同的程序分支果产生不同的程序分支。注:两个操作数类型要一致注:两个操作数类型要一致 目的操作数不为立即数目的操作数不为立即数 两操作数之一必为寄存器,不允许为段寄存器两操作数之一必为寄存器,不允许为段寄存器二、减法指令二、减法指令5 CMP DST,SRC ; DST - SRC (Compare) 比较指令执行后可以根据标志位判断比较结果比较指令执行后可以根据标志位判断比较结果 若:若:ZF=1,两数相等,两数相等 若:两数不相等时若:两数不相等时 无符号数比较无符号数比较: CF=0,则(,则(DST) (
25、SRC) CF=1,则(,则(DST) (SRC) 有符号数比较有符号数比较: OF SF=0,则(,则(DST) (SRC) OF SF=1 ,则(,则(DST) (SRC)例例3.23.2:存储器的数据段存放了:存储器的数据段存放了100100个带符号数,其首地址为个带符号数,其首地址为AREAAREA,要求将各数据取绝对值后再送存原来的存储单元。,要求将各数据取绝对值后再送存原来的存储单元。 分析:由于分析:由于100100个带符号数中既有正数,又有负数,若为正数则不需个带符号数中既有正数,又有负数,若为正数则不需要处理;若为负数则需用要处理;若为负数则需用NEGNEG指令求补,再送存,
26、因此程序中要先判指令求补,再送存,因此程序中要先判断正负。程序如下:断正负。程序如下: LEA SI, AREALEA SI, AREA;SI;SI源地址源地址 MOV CX, 100MOV CX, 100;CX;CX循环次数循环次数 CHECKCHECK: MOV AL, SIMOV AL, SI; ;取一个带符号数送取一个带符号数送ALAL OR AL, AL OR AL, AL;AL;AL内容不变,但影响标志位内容不变,但影响标志位 JNS NEXTJNS NEXT ; ;若若SF=0SF=0,则转向,则转向NEXTNEXT NEG AL NEG AL; ;否则求补否则求补 MOV SI
27、,ALMOV SI,AL; ;负数求补后送回负数求补后送回 NEXTNEXT: INC SIINC SI; ;源地址加源地址加1 1 DEC CX DEC CX; ;循环次数减循环次数减1 1 JNZ CHECK JNZ CHECK; ;循环次数不为循环次数不为0 0,转向,转向CHECKCHECK HLT HLT ; ;停止停止三、乘法指令三、乘法指令无符号数相乘无符号数相乘 1 MUL SRC ;1)本指令影响)本指令影响CF、OF,不影响,不影响AF、PF、SF、ZF2)DST:隐含在隐含在AL或或AX,SRC:是寄存器操作数或内存是寄存器操作数或内存操作数操作数3)字节()字节(AL)
28、字节字节=字(字(AX);如果);如果AH0,则,则CF=1,OF=1字(字(AX)字字=双字(双字(DX,AX);如果);如果DX0,则,则CF=1,OF=1例例3.3:计算:计算21H08H=? MOV AL, 21H;AL=21H MOV BL, 08H;BL=08H MUL BL ;AX=0108H, CF=OF=1 三、乘法指令三、乘法指令带符号数相乘带符号数相乘 2 IMUL SRC ; 整数乘法(带符号数相乘)与整数乘法(带符号数相乘)与MUL相似相似,当乘积高半部当乘积高半部分仅仅是低半部分符号位的扩展,则分仅仅是低半部分符号位的扩展,则CF=OF=0,否则,否则CF=OF=1
29、表示表示AH或或DX中包含着乘积的有效数字,而非中包含着乘积的有效数字,而非发生进位或溢出发生进位或溢出。例例3.4:计算带符号数:计算带符号数05H08H=? MOV AL, 05H ;AL=05H MOV BL, 08H ;BL=08H IMUL BL ;AX=0028H, CF=OF=0 无符号数除法指令无符号数除法指令 1 DIV SRC ;1)若除数为零,则内部产生一个类型)若除数为零,则内部产生一个类型0中断中断2)AX/字节字节 商商 AL,余数,余数 AHDX,AX/字字 商商 AX, 余数余数 DX 3)所有的标志位无意义)所有的标志位无意义例例3.5:计算无符号数:计算无符
30、号数0410HB8H=? MOV AX, 0410H;AX=0410H MOV BL, B8H;BL=B8H DIV BL;AL=05H, AH=78H 四、除法指令四、除法指令四、除法指令四、除法指令带符号数除法指令带符号数除法指令 2 IDIV SRC 与与DIV相似相似 例例3.6:计算带符号数:计算带符号数0410HB8H=? MOV AX, 0410H;AX=0410H MOV BL, B8H;BL=B8H IDIV BL;AL=F2H, AH=20H 五、十进制调整指令五、十进制调整指令 专用于对专用于对BCD码运算的结果进行调整码运算的结果进行调整 包括:包括: 压缩压缩BCD码
31、调整指令码调整指令DAA、DAS、 非压缩的非压缩的BCD码调整指令码调整指令AAA 、AAS、AAM、AAD 均为隐含寻址,隐含的操作数为均为隐含寻址,隐含的操作数为AL和和AH 为何要对为何要对BCD码的运算结果进行调整?码的运算结果进行调整? BCD码本质上是十进制数,即应遵循逢十进一码本质上是十进制数,即应遵循逢十进一的规则。而计算机是按二进制(十六进制)进行运的规则。而计算机是按二进制(十六进制)进行运算,并未按十进制规则进行运算算,并未按十进制规则进行运算。 五、十进制调整指令五、十进制调整指令1 AAA ;(;( Unpacked BCD ASCII adjust for add
32、ition ) 对对AL中的中的非压缩非压缩BCD码码相加的结果进行校正,相加的结果进行校正,得到正确的非压缩得到正确的非压缩BCD码和,码和,AAA必须紧接在必须紧接在ADD、ADC指令后,只影响指令后,只影响AF,CF。 2 DAA ;(;(Decimal Adjust for Addition) 对对AL中的两个压缩的中的两个压缩的BCD码相加的结果进行校码相加的结果进行校正,得到正确的压缩正,得到正确的压缩BCD码和,码和,DAA必须紧接在必须紧接在ADD、ADC指令后,只影响指令后,只影响AF,CF。 3 AAS ;(Unpacked BCD ASCII adjust for sub
33、traction ) 对对AL中的非压缩中的非压缩BCD码相减的结果进行校正,码相减的结果进行校正,得到正确的非压缩结果,得到正确的非压缩结果,AAS必须紧接在必须紧接在SUB、SBB指令后,只影响指令后,只影响AF,CF。4 DAS ;(Decimal Adjust for Subtraction) 对对AL中的两个压缩的中的两个压缩的BCD码相减的结果进行码相减的结果进行校正,得到正确的压缩校正,得到正确的压缩BCD码结果,码结果,DAA必须紧必须紧接在接在SBB、SUB指令后。指令后。 5 AAM ;(Unpacked BCDASCII adjust for multiply)将存放在将
34、存放在AL寄存器中两个一位非压缩寄存器中两个一位非压缩BCD码相乘之积调整为非压缩码相乘之积调整为非压缩BCD码码. AAM的调整操作为:的调整操作为: AH(AL)/0AH;AL除以除以10,商送,商送AH AL(AL)%0AH;AL除以除以10,余数送,余数送AL将将AL寄存器中的二进制数转换成非压缩寄存器中的二进制数转换成非压缩BCD码,码,十位存放在十位存放在AH中,中,个位存放在个位存放在AL中。中。AAM指令将根据指令将根据AL中的结果改变标志位中的结果改变标志位SF、ZF和和PF的状态,但的状态,但AF、CF和和OF的值不确定。的值不确定。 6 AAD ;(Unpacked BC
35、D ASCII adjust for division) 指令功能:指令功能:AL(AH)0AH+(AL) AH0 即将即将AH的内容乘的内容乘10并加上并加上AL的内容,结果送回的内容,结果送回AL,将,将0送回送回AH。这种操作的实质就是将这种操作的实质就是将AX中非压缩的中非压缩的BCD码转换成为二进制数,并存码转换成为二进制数,并存放在放在AL寄存器中。指令执行后,根据寄存器中。指令执行后,根据AL中的结果影响标志位中的结果影响标志位SF、ZF和和PF,其余标志位的值不确定。,其余标志位的值不确定。 六、符号扩展指令六、符号扩展指令 1 CBW ; (Convert Byte to W
36、ord)AL符号扩展符号扩展到到AH,8位到位到16位位 2 CWD ; (Convert Word to Double Word) AX符符号扩展到号扩展到DX,16位到位到32位位最高位为最高位为1,扩展全,扩展全1;最高位为;最高位为0,扩展全,扩展全0。3.3.3 位操作指令位操作指令一、逻辑运算指令一、逻辑运算指令1 NOT DST ; 对源操作数求反,然后回送源操作数对源操作数求反,然后回送源操作数 2 AND DST,SRC ;按位逻辑与,结果回送到目的操作按位逻辑与,结果回送到目的操作数数3 OR DST,SRC ; 按位逻辑或,结果回送到目的操作按位逻辑或,结果回送到目的操作
37、数数4 XOR DST,SRC ; 对指令的操作数进行对指令的操作数进行“异或异或”运算运算5 TEST DST,SRC ; 本指令完成本指令完成AND同样的操作但并同样的操作但并 不回送结果不回送结果 ,类似,类似CMP其他指令其他指令置置CF、OF为为0,AF不定不定 ( 无意义无意义 )SF、ZF、PF据结果置位据结果置位说明:说明:lSRC:REG/MEM/DATA, DST:REG/MEM 两个操作数不能同时为存储器两个操作数不能同时为存储器l 可进行字节或字操作可进行字节或字操作l NOT指令不影响标志指令不影响标志l TEST只影响标志位,不影响操作数。只影响标志位,不影响操作数
38、。例:例: _NOT AX ;(AX) (AX)XOR AX,AX ;清零清零AXAND AL,OFH;屏蔽高四位,保留第四位,(屏蔽高四位,保留第四位,(AL)=04H例例3.7:设(:设(AL)=0BFH,要求:,要求:屏蔽最低两位屏蔽最低两位将将AL的的D6和和D0位置位置1D0和和D1位变反位变反 例:设例:设AL寄存器中存有报警标志:若寄存器中存有报警标志:若D7=1,表示,表示温度报警,程序要转到温度报警处理温度报警,程序要转到温度报警处理T_ALARM;若若D6=1,则转压力报警程序,则转压力报警程序P_ALARM。可用。可用TEST指令来实现。指令来实现。TEST AL,80H
39、 ;D7=1?JNZ T_ALARM ;是1(非零)转温度报警TEST AL,40H ;D7=0,D6=1?JNZ P_ALARM ;是1转压力报警SHL DST, 1CLSAL DST, 1CLSHR DST, 1CLSAR DST, 1CL0CF0CFCF0CF执行操作执行操作指令格式指令格式二、移位指令二、移位指令SHL (Shift Logic Left)逻辑左移指令)逻辑左移指令SAL(Shift Arithmetic Left)算术左移指令)算术左移指令SHR (Shift Logic Right)逻辑右移指令)逻辑右移指令SAR (Shift Arithmetic Right)算
40、术右移指令)算术右移指令当移位次数为当移位次数为1时,如果移位后的最高位的值被改变,则时,如果移位后的最高位的值被改变,则OF=1三、三、 循环移位指令循环移位指令ROL (Rotate Left)循环左移指令)循环左移指令ROR (Rotate Right)循环右移指令)循环右移指令RCL (Rotate through CF Left)带进位循环左移指令)带进位循环左移指令RCR (Rotate through CF Right)带进位循环右移指令)带进位循环右移指令指令格式指令格式执行操作执行操作CFCFCFCF ROL DST, 1CLROR DST, 1CLRCL DST, 1CLR
41、CR DST, 1CL当移位次数为当移位次数为1时,如果移位后的最高位的值被改变,则时,如果移位后的最高位的值被改变,则OF=1对于移位指令,有以下几点需要说明:对于移位指令,有以下几点需要说明:1 1)DST:REG/MEMDST:REG/MEM,不能是立即数,不能是立即数2)2)若只移位若只移位1 1次,可使指令中的计数值设为次,可使指令中的计数值设为1 1;若移位次数;若移位次数大于大于1 1,则将移位次数送进,则将移位次数送进CLCL寄存器,再将寄存器,再将CLCL放在指令的放在指令的计数值中。计数值中。3 3)左移相当于乘)左移相当于乘2 2,右移相当于除,右移相当于除2 2;SAL
42、SAL、SARSAR用于带用于带符号数,符号数,SHLSHL、SHRSHR用于无符号数。用于无符号数。4 4)当移位次数为)当移位次数为1 1时,如果移位后的最高位的值被改变,时,如果移位后的最高位的值被改变,则则OF=1OF=1例例3.83.8:用右移的方法做除法:用右移的方法做除法133/8133/8。MOV AL,10000101BMOV AL,10000101BMOV CL,03HMOV CL,03HSHR AL,CLSHR AL,CL执行后(执行后(ALAL)=10H=16=10H=16,余数,余数5 5被丢失被丢失例例3.93.9:假设:假设AL=1AL=1,下列指令执行后,下列指
43、令执行后,ALAL寄存器的内容是什么?寄存器的内容是什么? SAL AL, 1SAL AL, 1;AL=2;AL=2 MOV BL, AL MOV BL, AL ;BL=2 ;BL=2 SAL AL, 1 SAL AL, 1;AL=4;AL=4 SAL AL, 1 SAL AL, 1;AL=8;AL=8 ADD AL, BL ADD AL, BL ;AL=10;AL=10例例3.103.10:统计一个:统计一个1616位存储器操作数中位存储器操作数中“1 1”的个数,假设存储器操作数的个数,假设存储器操作数的地址为的地址为DATADATA,统计结果存放的单元地址为,统计结果存放的单元地址为CO
44、UNTCOUNT。 MOV AX, DATA ;16MOV AX, DATA ;16位操作数送入位操作数送入AXAX MOV CX, 16 MOV CX, 16; ;置循环次数置循环次数 XOR BL, BLXOR BL, BL;BL;BL寄存器清零寄存器清零 AGAINAGAIN: ROL AX, 1ROL AX, 1 ; ;左循环移位左循环移位1 1次,最高位进次,最高位进CFCF JNC NEXT JNC NEXT; ;检查检查CFCF状态,若状态,若CF=0CF=0则跳转则跳转 INC BLINC BL; ;若若CF=1CF=1,则计数器,则计数器BLBL加加1 1 NEXT NEXT
45、: DEC CXDEC CX; ;循环次数减循环次数减1 1 JNZ AGAIN JNZ AGAIN ; ;循环次数不为零,继续循环循环次数不为零,继续循环 MOV COUNT,BLMOV COUNT,BL; ;统计结果送存统计结果送存 HLTHLT3.2.4 串操作类指令串操作类指令所有的串操作指令隐含规定:所有的串操作指令隐含规定:1、用用SI寻址源操作数且是在数据段中(寻址源操作数且是在数据段中(DS为段地址)为段地址)允许段超越;允许段超越;2、用、用DI寻址目的操作数且是在附加段中(寻址目的操作数且是在附加段中(ES为段地址)为段地址)不允许段超越;不允许段超越;3、这两个地址指针在
46、每一个串操作以后会自动修、这两个地址指针在每一个串操作以后会自动修改按增量还是按减量,取决于方向标志位改按增量还是按减量,取决于方向标志位DF; 若若DF=0每次操作后每次操作后SI和和DI增量增量 若若DF=1则减量(字节操作加则减量(字节操作加1,字操作则加字操作则加2)4、要比较的字符串长度放在、要比较的字符串长度放在CX中;中;5、在指令助记符后加、在指令助记符后加B是字节,加是字节,加W是字操作。主助记是字操作。主助记符后不允许写操作数。符后不允许写操作数。3.2.4 串操作类指令串操作类指令所有的串操作指令隐含规定:所有的串操作指令隐含规定:6、重复时在指令前加前缀、重复时在指令前
47、加前缀REP。 重复次数在重复次数在CX中,中,CX中的值自动修改,直到中的值自动修改,直到CX为为0。加前缀。加前缀REP时时,自动执行的操作自动执行的操作:(1)CX=0?为零则退出?为零则退出REP,否则往下执行,否则往下执行(2)CX1 CX(3)执行串操作指令)执行串操作指令(4)重复()重复(1) (3)有些串操作指令还可加重复前缀:有些串操作指令还可加重复前缀:REPEREPZ:当串未结束:当串未结束(CX0)且串相等(且串相等(Z标志标志为为1)时继续)时继续 REPNEREPNZ:当串未结束:当串未结束(CX0)且串不相等且串不相等(Z标志为标志为0)时继续)时继续 1 串传
48、送指令串传送指令 MOVS ;(Move String Byte/Word) 把串把串SI作为指针的源串中的一个字节或字作为指针的源串中的一个字节或字,传送至由传送至由DI作作为指针的目的串为指针的目的串,且自动修改且自动修改SI和和DI指针,以指向串中的下一指针,以指向串中的下一个元素个元素例例3.11:把:把100个字节从个字节从AREA1到到AREA2 也可采用重复前缀也可采用重复前缀 MOV SI,OFFSET AREA1 MOV SI,OFFSET AREA1 MOV DI,OFFSET AREA2 MOV DI,OFFSET AREA2 MOV CX,100 MOV CX,100
49、CLD CLDAGAIN:MOVS DI ,SI REP MOVSB DEC CX JNZ AGAIN2 串比较指令串比较指令CMPS ; (Compare String) 由由SI作为指针的源串中与由作为指针的源串中与由DI作为指针的目的串比作为指针的目的串比较,但减的结果只反映到标志位上。较,但减的结果只反映到标志位上。 两元素相等时两元素相等时ZF=0;不等时不等时ZF=1.常用该指令来比较两字符串是否相同,此指令以后,通常用该指令来比较两字符串是否相同,此指令以后,通常跟一条条件转移指令。常跟一条条件转移指令。3 串扫描指令串扫描指令 SCAS;(Scan String) 关键字放在关
50、键字放在AL或或AX中,操作时从中,操作时从AL或或AX的内容的内容减去由减去由DI作为指针的串元素,结果反映在标志位上,作为指针的串元素,结果反映在标志位上,但并不改变目的串元素以及累加器的值。但并不改变目的串元素以及累加器的值。 4 串装入指令串装入指令LODS SI /LODSB/LODSW ;(Load String) 本指令把由本指令把由SI作为指令的串元素,传送至作为指令的串元素,传送至AL或或AX,同,同时修改指令时修改指令SI,使指向串的下一个元素,该指令正常是不重,使指向串的下一个元素,该指令正常是不重复执行的,因为每重复一次,累加器中的内容就要改写,只复执行的,因为每重复一
51、次,累加器中的内容就要改写,只保留了最后一个元素。保留了最后一个元素。 5 串存储指令串存储指令REPSTOS DI/STOSB/STOSW ;(Store String) (B/W) 从累加器从累加器AL或或AX传送一个字节或字,到由传送一个字节或字,到由DI作为指针作为指针的目的串中,同时修改的目的串中,同时修改DI以指向串中的下一个单元,利用以指向串中的下一个单元,利用重复操作,可以在串中建立相同的值。重复操作,可以在串中建立相同的值。若数据段中有一个数据块,起始地址为BLOCK,数据块中的数为8位带符号数,要求将其中所含的正、符号数分开,然后把正数送到附加段中起始地址为PLUS-DAT
52、A的缓冲区,负数则送到附加段中起始地址为MINUS-DATA的缓冲区。START:MOV SI,OFFSET BLOCK MOV DI,OFFSET PLUS-DATA MOV BX,OFFSET MINUS-DATA MOV CX,COUNT CLDGOON:LOOSB TEST AL,80H JNZ MINUS STOSB JMP AGAINMINUS:XCHG BX,DI STOSB XCHG BX,DIAGAIN:DEC CX JNZ GOON HLT ;取源串一个字节送到AL;判断是否为负数;不是0,转移 ;是0,不转移;处理下一个字节;交换正负数指针;负数送负数区;恢复正负数指针;
53、次数减;不是0,继续 3.2.5 控制转移类指令控制转移类指令一、无条件转移指令一、无条件转移指令 JMPJMP 习惯:习惯: JMP 标号标号(1) 段内直接段内直接JMP:用指令中的偏移量加到目前指令指针用指令中的偏移量加到目前指令指针IP上来改变上来改变IP实现跳转实现跳转,当偏移量在,当偏移量在+127-128字节内就自动产生一个字节内就自动产生一个SHORT JMP指指令,否则产生令,否则产生NEAR JMP,在,在+32767 -32768范围内寻址。范围内寻址。例:例: JMP SHORT OBJECT 短转移短转移 JMP NEAR PTR 近转移近转移 寻址方式:寻址方式:3
54、.2.5 控制转移类指令控制转移类指令一、无条件转移指令一、无条件转移指令 JMPJMP 习惯:习惯: JMP 标号标号2) 段内间接段内间接JMP:目标地址由一个目标地址由一个16位通用寄存器或内存单元来寻址,位通用寄存器或内存单元来寻址,对内存单元可以用各种寻址方式进行访问(立即数除外)。段内间接寻对内存单元可以用各种寻址方式进行访问(立即数除外)。段内间接寻址只适用于无条件转移。址只适用于无条件转移。例:例: JMP BX 或或 JMP WORD PTRBX寻址方式:寻址方式:3.2.5 控制转移类指令控制转移类指令一、无条件转移指令一、无条件转移指令 JMPJMP 习惯:习惯: JMP
55、 标号标号(3) 段间直接段间直接JMP:指令中给出转向地址的段地址和段内偏移量,产生转指令中给出转向地址的段地址和段内偏移量,产生转移时将段值代入移时将段值代入CS,将偏移量代入,将偏移量代入IP。(4) 段间间接段间间接JMP:指令指定双字指针用第一个字单元的内容代替指令指定双字指针用第一个字单元的内容代替lP第二个字单元的内容代替第二个字单元的内容代替CS例例 JMP DWORD PTRBXSI 二、条件转移指令二、条件转移指令 这类指令转移的目的地址是采用相对寻址方式即以转移指令为基准的这类指令转移的目的地址是采用相对寻址方式即以转移指令为基准的+127或或-128字节的范围之内,对标
56、志位无影响。字节的范围之内,对标志位无影响。1 直接标志转移指令直接标志转移指令JC 标号标号 ;JNC 标号;标号;JS 标号标号 ;JNS 标号;标号;JO 标号标号 ;JNO 标号;标号;JP 标号标号 ;JNP 标号;标号;JZ/JE 标号标号 ;JNZ/JNE 标号;标号; 例例3.12:求:求AL和和BL寄存器中的两数之和,若有进寄存器中的两数之和,若有进位位 则则AH置置1,否则,否则AH清零。清零。 ADD AL,BL JC NEXT ;如果CF=1则转到NEXT MOV AH,0 ;如果CF=0则AH清零 JMP EXITNEXT:MOV AH,1 EXIT:2 间接标志转移
57、指令间接标志转移指令无符号数比较测试:无符号数比较测试: JAEJNB 标号标号 JA JNBE 标号标号 JB JNAE 标号标号 JBE/ JNA 标号标号带符号数比较测试:带符号数比较测试: JG JNLE 标号标号 JGEJNL 标号标号 JL JNGE 标号标号 JLEJNG 标号标号“A” Above 高于高于“B” Below 低于低于“G” Great than 大于大于“L” Less than 小于小于例例3.13:设某个学生英语成绩已经存放在:设某个学生英语成绩已经存放在AL寄存器中,寄存器中,若低于若低于60分,则打印分,则打印F;若大于等于;若大于等于85分,则打印分
58、,则打印G;当在当在60分和分和85分之间,打印分之间,打印P。 CMP AL,60 JB FALL ; 60分转到FALL CMP AL,85 JAE GOOD ; 85分转到GOOD MOV AL,P ;其他将ALP JMP PRINTFALL:MOV AL,F JMP PEINTGOOD:MOV AL,GPRINT:例例3.143.14:在以首地址为:在以首地址为TABLETABLE的的1010个内存单元中放了个内存单元中放了1010个带个带符号数,要求统计其中正数,负数和零的个数。并将结符号数,要求统计其中正数,负数和零的个数。并将结果分别存入果分别存入PLUSPLUS,NEGTNEG
59、T和和ZEROZERO单元。单元。TABLE DB 01H,80H,0F5H,32H,86H,74H,49H,DAFH,25H,40H PLUS DB ? NEGT DB ? ZERO DB ? MOV CX,10 ;数据总数 MOV BX,0AGAIN:CMP TABLEBX,0 ;取一个数和0相比较 JGE GRET_EQ ;0转GRET_EQ JNC NEGT ;0负数个数加1 JMP NEXTGRET_EQ:JG P_INC ;0,转P_INC INC ZERO ;=0,零的个数加1 JMP NEXT P_INC: INC PLUS NEXT:INC BX ;数据地址指针加1 DEC
60、CX ;总数减1 JNZ AGAIN ;未完,继续统计例例3.153.15 假设某温度控制系统中,从温度传感器输入一个假设某温度控制系统中,从温度传感器输入一个8 8位二位二进制的摄氏温度。当系统中的温度低于进制的摄氏温度。当系统中的温度低于100100度时,打开加热度时,打开加热器;当温度器;当温度100100度时,关闭加热器,进行下一步处理。设度时,关闭加热器,进行下一步处理。设置温度传感器的端口号为置温度传感器的端口号为320H320H,同时假设控制加热器的输出,同时假设控制加热器的输出信号连到端口号信号连到端口号322H322H最低有效位,当这一位置最低有效位,当这一位置1 1时,加热
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度木结构建筑维护木工承包合同范本3篇
- 二零二五年度婚庆服务市场前景分析婚庆协议合同3篇
- 二零二五年度木材采购与木材行业技术培训合同3篇
- 2025年度个人二手房交易资金监管合同范本4篇
- 二零二五年度智能停车场车牌租赁与安全管理合同4篇
- 2025版民间借贷合同要点识别并规避四种借款人风险4篇
- 二零二五年度棉布面料环保认证与检测服务合同4篇
- 二零二五年度民爆物品储存安全责任合同4篇
- 2025年度汽车文化体验馆租赁合同4篇
- 2025年物业管理公司委托管理合同范本3篇
- 辽宁省抚顺五十中学2024届中考化学全真模拟试卷含解析
- 2024年湖南汽车工程职业学院单招职业技能测试题库及答案解析
- 2024年中国科学技术大学少年创新班数学试题真题(答案详解)
- 家长心理健康教育知识讲座
- GB/T 292-2023滚动轴承角接触球轴承外形尺寸
- 2024年九省联考高考数学卷试题真题答案详解(精校打印)
- 军人结婚函调报告表
- 民用无人驾驶航空器实名制登记管理规定
- 北京地铁6号线
- 航空油料计量统计员(初级)理论考试复习题库大全-上(单选题汇总)
- 谅解书(标准样本)
评论
0/150
提交评论