汇编语言程序设计-课件 第3章 80x86指令系统_第1页
汇编语言程序设计-课件 第3章 80x86指令系统_第2页
汇编语言程序设计-课件 第3章 80x86指令系统_第3页
汇编语言程序设计-课件 第3章 80x86指令系统_第4页
汇编语言程序设计-课件 第3章 80x86指令系统_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

第3章80x86指令系统计算机的指令由操作码字段和操作数字段两个部分构成。8086指令系统中操作数字段可以是零个操作数、一个操作数或两个操作数,称为零地址指令、一地址指令和二地址指令。3.1寻址方式3.1.1操作数类型操作数依其所在的不同位置可分为三种类型:立即数,寄存器操作数,存储器操作数。3.1寻址方式3.1.1操作数类型操作数的寻址方式就是寻找操作数所在地址的方式。1.立即寻址方式操作数类型为立即数,存放在指令中。3.1寻址方式2.寄存器寻址方式操作数在寄存器中,在指令中指明寄存器的名称。寄存器寻址方式通常用于寄存器之间传送数据。3.1寻址方式3.直接寻址方式直接寻址方式中操作数地址的是16位偏移量(有效地址EA)直接包含在指令中,而操作数则默认在数据段中。3.1寻址方式4.寄存器间接寻址方式在寄存器间接寻址方式中,操作数在内存中。操作数的有效地址在变址寄存器SI、DI或基址寄存器BX、BP中。只有SI、DI、BX、BP这四个寄存器可以用来存放地址。

3.1寻址方式5.寄存器相对寻址方式寄存器相对寻址方式是以指定的寄存器内容,加上指令中给出的位移量D(8位或16位),并以一个段寄存器为基准,给出操作数的地址。指定的寄存器一般是一个基址寄存器(BX、BP)或一个变址寄存器(SI、DI)。3.1寻址方式6.基址变址寻址方式基址变址寻址方式是用一个基址寄存器与一个变址寄存器的值相加作为操作数的偏移地址。通常把BX和BP看作是基址寄存器,把SI和DI看作变址寄存器。也就是说,把(BX,BP)寄存器其中一个的值与(SI,DI)寄存器其中一个的值相加作为操作数的偏移地址。不允许的搭配为[BX+BP],[SI+DI]。3.1寻址方式7.相对基址变址寻址方式相对基址变址寻址方式中操作数的偏移地址由三个部分构成:基址寄存器的值+变址寄存器的值+位移量D(8位或16位)。基址寄存器、变址寄存器及对应的缺省段与基址变址寻址相同。3.2指令系统[标号:]指令助记符目的操作数,源操作数[;注释]OPD:表示目的操作数OPS:表示源操作数mem:表示内存单元reg:表示通用寄存器seg:表示段寄存器imm:表示立即数3.2.1数据传送指令1.数据传送指令MOV指令格式:MOVOPD,OPS(1)MOVreg/mem,imm;立即数送寄存器或内存单元(2)MOVseg/reg/mem,reg;寄存器的内容传送到段寄存器、寄存器、内存单元(3)MOVseg/reg,mem;内存单元内容送寄存器或段寄存器(4)MOVreg/mem,seg;段寄存器内容送寄存器或内存单元

①两个存储单元之间不可以直接传送数据。两个内存单元之间不能进行操作,适用于所有指令。②目的操作数不能是CS及立即数,CS寄存器的内容是由操作系统给出的。③OPD,OPS的位数必须一致(字节类型或者字类型),同样适用于所有指令。④计算机根据寄存器默认其缺省的段寄存器,所以指令中只要给出偏移地址。⑤在内存和寄存器之间传送字类型数据是高地址和高8位寄存器对应,低地址和低8位寄存器对应。2.XCHG指令指令格式:XCHGOPD,OPS具体格式有:XCHG reg,memXCHG reg,regXCHG mem,reg示例2内存交换数据

3.查表指令XLAT指令格式:XLATTABLE或

XLAT指令功能:把待查表格的一个字节内容送到AL累加器中。待查表格存于内存单元中,TABLE为待查表格的首地址。执行前,应将待查表格的首地址TABLE先送至BX寄存器中,然后将待查字节与其距表首地址的位移量送AL。执行后,将有效地址为(BX)+(AL)的内存单元的内容传送给给AL。即(AL)←((BX)+(AL))。示例4.堆栈指令PUSH和POP指令格式:PUSH OPDPOP OPD指令功能:PUSH指令将栈顶指针SP自动减2,即(SP)←(SP)-2,把OPD压入堆栈;POP指令将栈顶的一个字数据送到OPD,栈顶指针SP自动加2,即(SP)←(SP)+2。OPD必须是16为寄存器、16位内存单元和段寄存器。示例5.标志传送指令(1)标志位送AH指令LAHF指令格式:LAHF指令功能:取标志寄存器FLAG的低8位传送到AH。该指令不影响标志寄存器内容。(2)AH送标志寄存器指令SAHF指令格式:SAHF指令功能:将AH寄存器的内容传送到标志寄存器FLAG的低8位。该条指令影响FLAG中的SF、ZF、AF、PF、CF标志。(3)标志进栈指令PUSHF指令格式:PUSHF指令功能:先将(SP)←(SP)-2,然后标志寄存器入栈。该指令不影响标志寄存器内容。(4)标志出栈指令POPF指令格式:POPF指令功能:与PUSHF指令的功能相反,将栈顶内容送标志寄存器,(SP)←(SP)+2。该指令影响标志。PUSHF指令和POPF指令主要用于子程序和中断过程中对FLAG内容的保护和恢复。6.地址传送指令(1)有效地址指令LEA指令格式:LEAOPD,OPSOPD可为一个16位的通用寄存器,通常为:BX、BP、SI、DI。OPS可为变量名、标号或地址表达式。示例,指令的区别(2)取地址指令LDS及LES指令格式:LDS OPD,OPSLES OPD,OPS其中OPD为任意一个16位的寄存器,OPS为的存储器地址。指令功能:是将OPS所指向的存储单元的连续4个字节(32位)的内容分别传送到OPD和DS寄存器中。示例3.2.2算术运算指令1.加法指令(1)ADD加法指令指令格式:ADDOPD,OPS(2)ADC带进位加法指令指令格式:ADCOPD,OPS(3)INC指令指令格式:INCOPD2.减法指令(1)减法指令SUB指令格式:SUBOPD,OPS(2)带借位减法指令SBB指令格式:SBBOPD,OPS(3)减1指令DEC指令格式:DECOPD,其中OPD的含义与INC指令相同。(4)求补指令NEG指令格式:NEGOPD(OPD可以是reg或mem)对0求补时,CF=0,其他情况CF=1(5)比较指令CMP指令格式:CMPOPD,OPS3.乘法指令(1)无符号数乘法指令MUL指令格式:MULOPD,操作数可以是reg或mem,不能是立即数。(2)有符号数乘法指令IMUL指令格式:IMULOPD乘法指令对标志位的影响:如果乘积的高一半为低一半的符号扩展则CF=0;OF=0;否则,CF=1;OF=1。4.除法指令(1)无符号除法指令DIV指令格式:DIVOPD,操作数可以是reg或mem,不能是立即数。(2)有符号数除法法指令IDIV指令格式:IDIVOPD除法指令对标志位的影响:除法指令对标志没有定义。5.符号扩展指令(1)字节扩展为字CBW指令格式:CBW(2)字扩展为双字CWD指令格式CWD注意:符号扩展的隐含操作数是AL和AH以及AX和DX,与其他寄存器无关。例设B1,B2,B3为有符号字节类型变量,写出完成(B1×B2+B3)/B2功能的指令序列。MOV AL,B1IMUL B2 ;乘积存于AX中MOV CX,AX ;为什么要写这一句?MOV AL,B3 ;B1×B2为16位数据,B3为8位数据,不能相加,需要扩展CBWADD AX,CXIDIV B2;结果的余数在AH中,商在AL中若把题目中的式子改为:(B1+B2+B3)/B2,指令序列该如何写?6.十进制数调整指令十进制数调整指令分成压缩BCD码和非压缩BCD码调整。(1)压缩BCD码加法调整指令DAA指令格式:DAA(2)压缩BCD码减法调整指令DAS指令格式:DAS(3)非压缩BCD码加法调整指令AAA指令格式:AAA(4)非压缩BCD码减法调整指令AAS指令格式:AAS(5)非压缩BCD码乘法调整指令AAM指令格式:AAM(6)非压缩BCD码除法调整指令AAD指令格式:AAD因为AAA和AAS指令在调整中有可能产生了进位或借位,所以AH要加上进位或减去借位,同时CF=AF=1,否则CF=AF=0;调整指令对其他标志无定义。

3.2.3逻辑运算指令1.逻辑与运算指令AND指令格式:ANDOPD,OPS对标志位的影响:设置CF=OF=0,根据结果确定SF、ZF和PF状态,而对AF未定义。2.逻辑或运算指令OR指令格式:OROPD,OPS对标志位的影响同AND指令。3.逻辑非指令NOT指令格式:NOTOPD不影响标志位。4.逻辑异或运算XOR指令格式:XOROPD,OPS对标志位的影响同AND指令。5.测试指令TEST指令格式:TESTOPD,OPS建立结果状态标志。特别注意逻辑运算指令的应用3.2.4移位指令指令格式SAL/SHLOPD,OPS SAROPD,OPS SHROPD,OPS对标志位的影响:对AF无定义。CF由移后的值确定,并根据移位后的结果设置SF、ZF、PF;当移动1位时,移位后如果符号位发生变化,则OF=1,符号位不发生变化,则OF=0,移位次数大于1时,OF不确定。

举例:若X,Y为字节类型数,求Z=((X+Y)×8-X)/2

MOV AX,XADD AX,YMOV CL,3SAL AX,CL ;左移3位就是×8SUB AX,XSAR AX,1 ;除2MOV Z,AX

2.循环移位指令指令格式:ROLOPD,OPS;不带进位循环左移ROROPD,OPS;不带进位循环右移RCLOPD,OPS;带进位循环左移RCROPD,OPS;带进位循环右移对标志位的影响同一般移位指令。

3.2.5控制转移指令控制转移类指令用于实现分支、循环、过程等程序结构,是汇编中的常用指令。1.无条件转移指令JMP指令格式:JMPLABLE

LABLE是将要转移到的目标地址,按LABLE是否与当前指令在一个代码段,无条件转移可分为段内转移和段间转移;而按LABLE的不同寻址方式又可分为直接寻址和间接寻址。直接寻址:转移地址在指令代码中。间接寻址:转移地址在寄存器或内存单元中。(1)段内转移:在当前代码段范围64KB内转移(±32KB范围)称为近转移(NEARPTR)。转移范围在段内-128~+127范围内称为短转移(SHORT)。段内转移CS段地址不变,只要改变IP偏移地址。

JMPSHORTLABLE ;短转移,直接寻址,目标地址为LABLEJMPNEARPTRLABLE;近转移,直接寻址,目标地址为LABLEJMPSI;间接寻址,目标地址在SI寄存器中JMPWORDPTR[BX];间接寻址,目标地址在内存单元中(2)段间转移:远转移(FARPTR)从当前代码段转移到另一个代码段(设为代码段2),转移范围1MB。需要改变CS段地址和IP偏移地址。因此目标地址必须用一个32位数表达。

指令JMPFARPTRLABLE的功能是远转移到代码段2的LABLE,IP←[LABLE],CS←[代码段2的段地址]。

指令JMPFARPTRMEM,其中MEM是内存单元的地址,从MEM开始的4个连续单元中存放着2个16位的地址,一个是目标地址的偏移地址,一个是目标地址的段地址。即IP←[MEN],CS←[MEM+2]。

2.条件转移语句JCC条件转移语句都是段内短转移。条件转移指令的一般格式为:JCCLABLE

指令中的条件即为状态标志的状态,条件转移指令可分成三类:判断单个标志位状态、比较无符号数高低、比较有符号数大小。(1)判断单个标志位状态①JZ/JE和JNZ/JNE②JS和JNS③JO和JNO④JP/JPE和JNP/JPO⑤JC/JB/JNAE和JNC/JNB/JAE(2)比较无符号数高低(条件为一个标志或标志组合)指令中的A表示高(Above),B表示低(Below),利用CF确定高低、利用ZF标志确定相等。JB/JNAE/JCJNB/JAE/JNCJBE/JNAJNBE/JA(3)比较有符号数大小(条件为标志组合)指令中的G表示大(Greater),L表示小(Less)JL/JNGEJNL/JGEJLE/JNGJNLE/JG例:在AL,BL,CL中有三个有符号数,找出最大数存于AL中。

CMP AL,BL

JG LL XCHG AL,BLLL: CMP AL,CL

JG EXIT XCHG AL,CLEXIT:例:AL寄存器中存放一个字符,如果是数字字符,则改为*。

CMP AL,'0'

JB EXIT

CMP AL,'9'

JA EXIT

MOV AL,'*'EXIT:

(4)测试CX的值为0,则转移的指令指令格式:JCXZLABLE

3.循环控制指令循环指令默认利用CX计数器,属于段内短转移。指令格式:LOOPLABLELOOPZ/LOOPELABLELOOPNZ/LOOPNELABLE

例:求1+3+5+7+……19,结果存于AX寄存器中。 MOV AX,0 MOV CX,10 MOV BX,1AGAIN: ADD AX,BX ADD BX,2 LOOP AGAIN ……4.子程序调用及返回指令(1)子程序调用指令CALLCALL指令位于主程序,CALL调用的子程序与CALL指令可以处于同一代码段内,也可以在不同的代码段,因而分段内调用和段间调用。段内直接调用、段内间接调用、段间直接调用、段间间接调用。CALLNEARPTRLABLECALLR16/M16CALLFARPTRLABLE

CALLMEM(2)返回指令RET是子程序最后执行的指令。根据子程序与主程序是否同处于一个代码段内,返回指令也分为段内返回和段间返回。RETRETnRETRETn

RETn为有参数返回,n为1个16位立即数,则堆栈指针SP将增加,即SP←SP+n。主要用于程序可以方便地从堆栈中去除若干执行CALL指令以前入栈的参数,因为这些参数在子程序返回后就不再需要了。将AL中的数转换成2位十进制数的ASCII码,存于BX寄存器中。设AL=20H=32D,则BH=33H,BL=32H。主程序: MOV AL,20H

温馨提示

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

评论

0/150

提交评论