80868088汇编指令手册.docx

上传人:b****6 文档编号:7567893 上传时间:2023-01-25 格式:DOCX 页数:16 大小:24.65KB
下载 相关 举报
80868088汇编指令手册.docx_第1页
第1页 / 共16页
80868088汇编指令手册.docx_第2页
第2页 / 共16页
80868088汇编指令手册.docx_第3页
第3页 / 共16页
80868088汇编指令手册.docx_第4页
第4页 / 共16页
80868088汇编指令手册.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

80868088汇编指令手册.docx

《80868088汇编指令手册.docx》由会员分享,可在线阅读,更多相关《80868088汇编指令手册.docx(16页珍藏版)》请在冰豆网上搜索。

80868088汇编指令手册.docx

80868088汇编指令手册

80868088汇编指令手册

通用寄存器  

(1)数据寄存器  

数据寄存器共有4个寄存器AX、BX、CX、DX,用来保存操作数或运算结果等信息。

 

 AX寄存器称为累加器。

使用频度最高,用于算术、逻辑运算以及与外设传送信息等。

 

BX寄存器称为基址寄存器。

常用于存放存储器地址。

 

CX寄存器称为计数器。

一般作为循环或串操作等指令中的隐含计数器。

 

DX寄存器称为数据寄存器。

常用来存放双字数据的高16位,或存放外设端口地址。

  

(2)变址和指针寄存器  

变址和指针寄存器包括SI、DI、SP、BP 4个16位寄存器,主要用于存放某个存储单元的偏移地址。

 

SI是源变址寄存器。

 

DI是目的变址寄存器,在字符串操作中,SI和DI都具有自动增量或减量的功能。

 SP为堆栈指针寄存器,用于存放当前堆栈段中栈顶的偏移地址。

 

BP为基址指针寄存器,用于存放堆栈段中某一存储单元的偏移地址。

   

2.段寄存器  

8086 CPU的4个16位的段寄存器分别称为代码段寄存器CS,数据段寄存器DS,堆栈段寄存器SS,附加数据段寄存器ES。

段寄存器用来确定该段在内存中的起始地址。

 

代码段用来存放程序的指令序列。

CS存放代码段的段首址,指令指针寄存器IP指示代码段中指令的偏移地址。

  

3.指令指针  

    8086 CPU中的指令指针IP,它总是保存下一次将要从主存中取出指令的偏移地址,偏移地址的值为该指令到所在段段首址的字节距离。

在目标程序运行时,IP的内容由微处理器硬件自动设置,程序不能直接访问IP,但一些指令却可改变IP的值,如转移指令、子程序调用指令等。

  

3.1 标志寄存器  

8086 CPU中有一个很重要的16位标志寄存器,它包含9个标志位,主要用于保存一条指令执行后,CPU所处状态信息及运算结果的特征。

  

条件标志  

(1)进位标志CF 

(2)零标志ZF (3)符号标志SF (4)溢出标志 OF  

(5)奇偶标志 PF  (6)辅助进位标志AF  

状态控制标志  

(1)方向标志DF 

(2)中断允许标志IF (3)追踪标志TF 

运算结果标志位

1、进位标志CF(CarryFlag)

进位标志CF主要用来反映运算是否产生进位或借位。

如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

使用该标志位的情况有:

多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。

2、奇偶标志PF(ParityFlag)

奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。

如果“1”的个数为偶数,则PF的值为1,否则其值为0。

利用PF可进行奇偶校验检查,或产生奇偶校验位。

在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。

3、辅助进位标志AF(AuxiliaryCarryFlag)

在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:

(1)在字操作时,发生低字节向高字节进位或借位时;

(2)在字节操作时,发生低4位向高4位进位或借位时。

对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。

4、零标志ZF(ZeroFlag)

零标志ZF用来反映运算结果是否为0。

如果运算结果为0,则其值为1,否则其值为0。

在判断运算结果是否为0时,可使用此标志位。

5、符号标志SF(SignFlag)

符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。

在微机系统中,有符号数采用码表示法,所以,SF也就反映运算结果的

正负号。

运算结果为正数时,SF的值为0,否则其值为1。

6、溢出标志OF(OverflowFlag)

溢出标志OF用于反映有符号数加减运算所得结果是否溢出。

如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否

则,OF的值被清为0。

常用指令

通用数据传送指令.

MOV传送字或字节

MOVOPRD1,OPRD2

功能:

本指令将一个源操作数送到目的操作数中,即OPRD1<--OPRD2

1.OPRD1为目的操作数,可以是寄存器、存储器、累加器.OPRD2为源操作数,可以是寄存器、存储器、累加器和立即数.

2.MOV指令以分为以下四种情况:

<1>寄存器与寄存器之间的数据传送指令

<2>立即数到通用寄存器数据传送指令

<3>寄存器与存储器之间的数据传送指令

<4>立即数到存储器的数据传送

3.本指令不影响状态标志位

PUSH把字压入堆栈

PUSHOPRD

功能:

实现压入操作的指令是PUSH指令;

1.OPRD为16位(字)操作数,可以是寄存器或存储器操作数.

2.PUSH的操作过程是:

(SP)<--(SP)-2,((sp))<--OPRD即先修改堆栈指针SP(压入时为自动减2),然后,将指定的操作数送入新的栈顶位置.

此处的((SP))<--OPRD,也可以理解为:

[(SS)*16+(SP)]<--OPRD或[SS:

SP]<--OPRD

POP把字弹出堆栈

POPOPRD

实现弹出操作的指令是POP指令

1.OPRD为16位(字)操作数,可以是寄存器或存储器操作数.

2.POP指令的操作过程是:

POPOPRD:

OPRD<--((SP)),(SP)<--(SP)+2

它与压入操作相反,是先弹出栈顶的数顶,然后再修改指针SP的内容.

3.示例:

POPAX

POPDS

POPDATA1POPALFA[BX][DI]

4.PUSH和POP指令对状态标志位没有影响

XCHG交换字或字节

XCHGOPRD1,OPRD2其中的OPRD1为目的操作数,OPRD2为源操作数

功能:

将两个操作数相互交换位置,该指令把源操作数OPRD2与目的操数OPRD1交换.

至少有一个操作数为寄存器,段寄存器不可作为操作数

1.OPRD1及OPRD2可为通用寄存器或存储器,但是两个存储器之间是不能用XCHG指令实现的.

2.段寄存器内容不能用XCHG指令来交换.

3.若要实现两个存储器操作数DATA1及DATA2的交换,可用以下指令实现:

示例:

PUSHDATA1

PUSHDATA2

POPDATA1

POPDATA2

4.本指令不影响状态标志位

输入输出端口传送指令.

INI/O端口输入

INAL,n;(AL)<--(n)

INAX,n;(AX)<--(n+1),(n)

INAL,DX;(AL)<--[(DX)]

INAX,DX;(AX)<--[(DX)+1],[(DX)]

功能:

输入指令

1.其中n为8位的端口地址,当字节输入时,将端口地址n+1的内容送至AH中,端口地址n的内容送AL中.

2.端口地址也可以是16位的,但必须将16位的端口地址送入DX中.当字节寻址时,由DX内容作端口地址的内容送至AL中;

当输入数据字时,[(DX)+1]送AH,[(DX)]送AL中,用符号:

(AX)<--[(DX)+1],[(DX)]表示

OUTI/O端口输出

OUTn,AL;(n)<--(AL)

功能:

输出指令

1.OUTn,AX;(n+1),(n)<--(AX)

OUTDX,AL;[(DX)]<--(AL)

OUTDX,AX;[(DX)+1],[(DX)]<--(AX)

2.输入指令及输出指令对标志位都不影响.

输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX指定时,其范围是0-65535.

目的地址传送指令.

LEA装入有效地址.

   例:

LEADX,string;把偏移地址存到DX.

LDS传送目标指针,把指针内容装入DS.

   例:

LDSSI,string;把段地址:

偏移地址存到DS:

SI.

LES传送目标指针,把指针内容装入ES.

   例:

LESDI,string;把段地址:

偏移地址存到ESDI.

LFS传送目标指针,把指针内容装入FS.

   例:

LFSDI,string;把段地址:

偏移地址存到FSD.

LGS传送目标指针,把指针内容装入GS.

   例:

LGSDI,string;把段地址:

偏移地址存到GSDI.

LSS传送目标指针,把指针内容装入SS.

   例:

LSSDI,string;把段地址:

偏移地址存到SSDI.

算术运算指令

ADD

加法

ADDOPRD1,OPRD2

功能:

OPRD1<-OPRD1+OPRD2

CF、SF、OF、PF、ZF、AF

1.两个操作数类型匹配

2.OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的,但不允许两个都是存储器操作数.

ADC带进位加法

ADCOPRD1,OPRD2

功能:

OPRD1<-OPRD1+OPRD2+CF

该语句在ADD语句后才会有意义

INC

加1

INCOPRD

功能:

OPRD<--OPRD+1

影响AF、OF、PF、SF、ZF标志位,但不影响CF标志位

1.OPRD为寄存器或存储器操作数.

2.3.示例:

INCSI;(SI)<--(SI)+1

INCWORDPTR[BX]

INCBYTEPTR[BX+DI]

INCCL;(CL)<--(CL)+1

注意:

上述第二,三两条指令,是对存储字及存储字节的内容加1以替代原来的内容.

AAA加法的ASCII码调整.

AAA

功能:

调整AL值,该值由两个ASCII码相加而得

CF、SF、PF、ZF、AF

OF无定义

1.把结果转换成直观的十进制,默认操作数AL

2.AAA的调整操作

(1)若(AL)低四位>9或AF=1,则(AL)<--(AL)+6,(AH)<--(AH)+1,AF=1,置AF和CF=1,否则只置AF、CF=0;

(2)清除AL高四位

DAA加法的十进制调整.

DAA

功能:

将AL值调整为压缩BCD码AF、CF、PF、SF、ZF

(OF无定义)

1.调整操作如下

(1)若低四位>9或AF=1,则(AL)<--(AL)+6,AF<--1

(2)若(AL)高四位>9或CF=1,则(AL)<--(AL)+60H,CF<--1.

(3)如果以上两点都不成立,清除AF、CF

2.示例:

(AL)=18H,(BL)=06H

ADDAL,BL;(AL)<--(AL)+(BL);(AL)=1EH

DAA;(AL)

SUB

减法.

SUBOPRD1,OPRD2

功能:

两个操作数的相减,即从OPRD1中减去OPRD2,其结果放在OPDR1中

CF、SF、OF、PF、ZF、AF

SBB带借位减法.

SBBOPRD1,OPRD2

功能:

是进行两个操作数的相减再减去CF进位标志位,即从OPRD1<--OPRD1-OPRD2-CF,其结果放在OPDR1中.

CF、SF、OF、PF、ZF、AF

DEC

减1

DECOPRD

功能:

OPRD<--OPRD-1

1.OPRD为寄存器或存储器操作数.

2.这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF标志位.

AAS减法的ASCII码调整

AAS

功能:

调整AL值,该值由两个AXCII字节相减所得。

影响标志位CF及AF(其他未定义)

1.若(AL)低四位>9或AF=1则(AL)<--(AL)-6,(AH)<--(AH)-1,AF=1,CF=1,

否则AF=0,CF=0

2.清除AL高四位

DAS减法的十进制调整

DAS

功能:

将AL值调整为压缩BCD码

若(AL)低四位>9或AF=1,则(AL)<--(AL)-6,AF=1

若(AL)高四位>9或CF=1,则(AL)<--(AL)-60h,CF=1

如果以上都不成立,清除AF、CF

MUL无符号乘法

MULOPRD

功能:

乘法操作

结果回送AH和AL(字节运算),或DX和AX(字运算)

1.OPRD为通用寄存器或存储器操作数.

2.OPRD为源操作数,即作乘数.目的操作数是隐含的,即被乘数总是指定为累加器AX或AL的内容.

3.16位乘法时,AX中为被乘数.8位乘法时,AL为被乘数.当16位乘法时,32位的乘积存于DX及AX中;8位乘法的16位乘积存于AX中.

4.操作过程:

字节相乘:

(AX)<--(AL)*OPRD,当结果的高位字节(AH)不等于0时,则CF=1、OF=1

IMUL整数乘法

IMULOPRD

功能:

完成两个带符号数的相乘结果回送AH和AL(字节运算),或DX和AX(字运算)

1.其中OPRD为任一通用寄存器或存储器操作数.

2.MUL指令对带符号相乘时,不能得到正确的结果.

例如:

(AL)=255

(CL)=255

MULCL

(AX)=65025

注意:

这对无符号数讲,结果是正确的,但对带符号数讲,相当于(-1)*(-1)结果应为+1,而65025对应的带符号数为-511,显然是不正确的.

AAM

乘法的ASCII码调整

AAM

功能:

调整AL值,该值由两个BCD码用无符号乘法指令MUL所得。

PF、SF、ZF(其他无定义)

(AH)<--(AL)/10(AL)<--(AL)%10

若AL低四位>9或AF=1,AH<--AH-1,AL<--AL-6,AF=1,CF=1;

否则,AF=0,CF=0

DIV无符号除法

DIVOPRD

功能:

实现两个无符号二进制数除法运算.

商回送AL,余数回送AH,(字节运算);

   或商回送AX,余数回送DX,(字运算)

被除数必须是除数长度的两倍

IDIV整数除法

DIVOPRD

功能:

这实现两个带符号数的二进制除法运算.

商回送AL,余数回送AH,(字节运算);

   或商回送AX,余数回送DX,(字运算)

1.其中OPRD为任一通用寄存器或存储器操作数.

2.理由与IMUL相同,只有IDIV指令,才能得到符号数相除的正确结果.

3.被除数必须是除数长度的两倍

AAD除法的ASCII码调整

格式:

AAD

功能:

在作除法前用于调整AH、AL的值,把两个寄存器中单BCD码组成一个十进制数值

PF、SF、ZF(其他无定义)

AL<--(AH)×10+(AL),AH=0

CBW

字节转换为字.

CBW

功能:

将字节扩展为字,即把AL寄存器的符号位扩展到AH中.

1.两个字节相除时,先使用本指令形成一个双字节长的被除数.

2.本指令不影响标志位.

CWD

字转换为双字

CWD

功能:

将字扩展为双字长,即把AX寄存器的符号位扩展到DX中

1.两个字或字节相除时,先用本指令形成一个双字长的的被除数.

2.本指令不影响标志位.

NEG求反(以0减之)

NEGOPRD

功能:

对操作数OPRD进行取补操作,然后将结果送回OPRD.取补操作也叫作求补操作,就是求一个数的相反数的补码

1.OPRD为任意通用寄存器或存储器操作数.

2.示例:

(AL)=44H,取补,(AL)=0BCH(-44H).

3.本指令影响标志位CF、OF、SF、PF、ZF及AF

逻辑运算指令

AND

与运算

ANDOPRD1,OPRD2

功能:

对两个操作数实现按位逻辑与运算,结果送至目的操作数.本指令可以进行字节或字的‘与’运算

1.目的操作数OPRD1为任一通用寄存器或存储器操作数.源操作数OPRD2为立即数,任一通用寄存器或存储器操作数.

2.示例:

ANDAL,0FH;(AL)<--(AL)AND0FH

OR

或运算

OROPRD1,OPRD2

功能:

OR指令完成对两个操作数按位的‘或’运算,结果送至目的操作数中,本指令可以进行字节或字的‘或’运算.OPRD1<--OPRD1OROPRD2

1.其中OPRD1,OPRD2含义与AND指令相同,对标志位的影响也与AND指令相同.

2.两数相或,有一个数为真则值为真.

CF、OF、PF、ZF、SF(AF无定义)

NOT

取反

NOTOPRD

功能:

完成对操作数按位求反运算(即0变1,1变0),结果关回原操作数

1.其中OPRD可为任一通用寄存器或存储器操作数.

2.本指令可以进行字或字节‘非’运算.

3.本指令不影响标志位.

XOR

异或运算

XOROPRD1,OPRD2

功能:

实现两个操作数按位‘异或’运算,结果送至目的操作数中.

OPRD1<--OPRD1XOROPRD2

1.其在OPRD1、OPRD2的含义与AND指令相同,对标志位的影响与与AND指令相同.

2.相异为真,相同为假.

TEST

测试

ESTOPRD1,OPRD2

功能:

其中OPRD1、OPRD2的含义同AND指令一样,也是对两个操作数进行按位的'与'运算,唯一不同之处是不将'与'的结果送目的操作数,即本指令对两个操作数的内容均不进行修改,仅是在逻辑与操作后,对标志位重新置位.

TEST与AND指令的关系,有点类似于CMP与SUB指令之间的关系.

SHL逻辑左移

SHLOPRD1,COUNT

功能:

对给定的目的操作数左移COUNT次,每次移位时最高位移入标志位CF中,最低位补零.

OF,PF,SF,ZF,CF

1.其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.

2.COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.

SAL算术左移.(=SHL)

SHR逻辑右移

SHROPRD1,COUNT

功能:

本指令实现由COUNT决定次数的逻辑右移操作,每次移位时,最高位补0,最低位移至标志位CF中

1.其中OPRD1为目的操作数,可以是通用寄存器或存储器操作数.

2.COUNT代表移位的次数(或位数).移位一次,COUNT=1;移位多于1次时,COUNT=(CL),(CL)中为移位的次数.

3.影响标志位OF,PF,SF,ZF,CF.

SAR算术右移.(=SHR)

ROL循环左移

ROLOPRD1,COUNT;不含进位标志位CF在循环中的左循环移位指令.

影响标志位OF,PF,SF,ZF,CF.

1.本指令组只影响标志CF、OF.OF由移入CF的内容决定,OF取决于移位一次后符号位是否改变,如改变,则OF=1.

2.由于是循环移位,所以对字节移位8次;对字移位16次,就可恢复为原操作数.由于带CF的循环移位,可以将CF的内容移入,

所以可以利用它实现多字节的循环.

ROR循环右移

ROROPRD1,COUNT;不含进位示志位CF在循环中的右循环移位指令.

影响标志位OF,PF,SF,ZF,CF.

RCL通过进位的循环左移.

RCR通过进位的循环右移.

   以上八种移位指令,其移位次数可达255次.

   移位一次时,可直接用操作码.如SHLAX,1.

   移位>1次时,则由寄存器CL给出移位次数.

  如MOVCL,04

     SHLAX,CL  

串指令  

MOVS串传送

MOVSOPRD1,OPRD2

MOVSB

MOVSW

功能:

OPRD1<--OPRD2

1.其中OPRD2为源串符号地址,OPRD1为目的串符号地址.

2.字节串操作:

若DF=0,则作加,若DF=1,则作减.

3.对字串操作时:

若DF=0,则作加,若DF=1,则作减,.

4.在指令中不出现操作数时,字节串传送格式为MOVSB、字串传送格式为MOVSW.

5.本指令不影响标志位.

CMPS串比较

CMPSOPRD1,OPRD2

CMPSB

CMPSW

功能:

由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.

同时SI,DI将自动调整.

1.其中OPRD2为源串符号地址,OPRD1为目的串符号地址.2.本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.

3.与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较

SCAS串扫描

把AL或AX的内容与目标串作比较,比较结果反映在标志位

LODS装入串

LODSOPRD其中OPRD为源字符串符号地址.

功能:

把SI寻址的源串的数据字节送AL或数据字送AX中去,并根据DF的值修改地址指针SI进行自动调整

把源串中的元素(字或字节)逐一装入AL或AX中LODSB传送字符.LODSW传送字.LODSD传送双字

本指令不影响标志位

STOS保存串

STOSOPRD

功能:

把AL(字节)或AX(字)中的数据存储到DI为目的串地址指针所寻址的存储器单元中去.指针DI将根据DF的值进行自动调整.

是LODS的逆过程

1.其中OPRD为目的串符号地址.

2.本指令不影响标志位.当不使用操作数时,可用STOSB或STOSW分别表示字节串或字串的操作.

REP

REP

功能:

在串操作指令前加上重复前缀,可以对字符串进重复处理.由于加上重复前缀后,对应的指令代码是不同的,所以指令的功能便具有重复处理的功能,重复的次数存放在CX寄存器中

当CX≠0时重复

REPE/REPZ

当ZF=1或比较结果相等,且CX≠0时重复

REPNE/REPNZ

当ZF=0或比较结果不相等,且CX≠0时重复

程序转移指令  

CMP比较.(两操作数作减法,仅修改标志位,不回送结果).

CMPOPRD1,OPRD2

功能:

对两数进行相减,进行比较

1.OPRD1为任意通用寄存器或存储器操作数.OPRD2为任意通用寄存器或存储器操作数,立即数也可用作源操作数OPRD2.

2.对标志位的影响同SUB指令,完成的操作与SUB指令类似,唯一的区别是不将OPRD1-OPRD2的结果送回OPRD1,而只是比较.

1.无符号数

指令

功能

检测条件

JZ、JE

相等或为0转移

ZF=1

JNZ、JNE

不等或不为0转移

ZF=0

JA、JNBE

>则转移

CF=0&ZF=0

JAE、JNB

>=则转移

CF=0

JB、JNE

<则转移

CF=1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1