版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第1818章章 8086/80888086/8088指令集参考指令集参考 第第18章章 8086/8088指令集参考指令集参考 18.1 指令码编码规那么指令码编码规那么 18.2 按字母顺序陈列的指令集按字母顺序陈列的指令集 第第1818章章 8086/80888086/8088指令集参考指令集参考 18.1 指令码编码规那么指令码编码规那么 18.1.1 存放器的编码 运用存放器的机器指令码,可用3位指明是哪一个存放器,并有一个用来表示其“宽度为字节或字的“w位。此外,只需某些指令可以存取到段存放器。图18-1列出了一切存放器的编码。第第1818章章 8086/80888086/8088
2、指令集参考指令集参考 -通用、基地址及段存放器编码 编码 w=0 w=1 000 AL AX 001 CL CX 010 DL DX 011 BL BX 100 AH SP第第1818章章 8086/80888086/8088指令集参考指令集参考 101 CH BP DH SI BH DI编码 段存放器00 ES01 CS10 SS11 DS-图18-1 存放器编码 第第1818章章 8086/80888086/8088指令集参考指令集参考 例如,下面的MOV指令具有一个字节的立刻数: MOV AH,00 10110 100 00000000 w reg=AH 此例中,机器码的第一个字节,指出
3、操作数为一个字节(w=0),并且用到AH存放器(100)。应留意,不要从此例太早下结论,有些指令的w和reg能够在不同的位置。 第第1818章章 8086/80888086/8088指令集参考指令集参考 18.1.2 定址形状方式字节 假设机器指令码内含有定址形状方式字节,那么它通常是第二个字节,并且是由以下三部分组成的: (1) mod:占2位,表示定址形状方式,11表示用到了存放器,而00、01及10表示用到了内存单元。 (2) reg:占3位,表示用到了存放器。 (3) r/m:占3位,表示用到了存放器或内存,r表示哪一个存放器,m表示内存单元地址。第第1818章章 8086/80888
4、086/8088指令集参考指令集参考 机器指令码的第一个字节能够含有“d位,表示第一个字节和第二个字节间的流向。 例如,将AX加给BX: ADD BX,AX 00000011 11 011 000 dw mod reg r/m 此例中d=1,表示mod(11)及reg(011)描画的是第一个操作数BX;而r/m(000)描画的是第二个操作数。由于w=1,所以宽度是一个字。因此这个指令就是把AX(000)加给BX(011)。机器指令码的第二个字节,通常用来指出内存的定址形状方式。下面将更详细讨论定址形状方式。第第1818章章 8086/80888086/8088指令集参考指令集参考 1. mod
5、位 mod 的两个位用来区分是存放器还是内存的定址,其用法如下:00 以r/m位选用一种定址方式,没有“偏移地址字节。其中当r/m110时指定为直接寻址方式01 以r/m位选用一种定址方式,有一个“偏移地址字节10 以r/m位选用一种定址方式,有两个“偏移地址字节11 以r/m位选用一个存放器,“w位(在操作码字节)决议它用到的是8位或16位的存放器第第1818章章 8086/80888086/8088指令集参考指令集参考 2. reg位 reg的3个位配合w位决议实践运用的是8位或16位的存放器。 3. r/m位 r/m的3个位(存放器/内存)配合mod决议定址方式,见图18-2。第第181
6、8章章 8086/80888086/8088指令集参考指令集参考 -r/m mod=00 mod=01 mod=10 mod=11 mod=11 w=0 w=1000BX+SIBX+SI+dispBX+SI+dispALAX001BX+DIBX+DI+disp BX+DI+disp CL CX010BP+SI BP+SI+dispBP+SI+dispDLDX011BP+DIBP+DI+dispBP+DI+dispBLBX第第1818章章 8086/80888086/8088指令集参考指令集参考 100 SI SI+disp SI+dispAHSP101 DI DI+disp DI+dispCH
7、BP110Direct BP+disp BP+dispDHSI111 BX BX+disp BX+dispBHDI-图18-2 r/m位 第第1818章章 8086/80888086/8088指令集参考指令集参考 18.1.3 2字节指令例18.1 将AX加给BX。 ADD BX,AX 0000 0011 11 011 000 dw mod reg r/md 1 指用reg及w描画第一个操作数(BX),用mod、 r/m及w描画第二个操作数(AX)w 1 表示宽度为一个字第第1818章章 8086/80888086/8088指令集参考指令集参考 mod 11 表示第二个操作数是一个存放器reg
8、 011表示第一个操作数是BX存放器r/m 000表示第二个操作数是AX存放器第第1818章章 8086/80888086/8088指令集参考指令集参考 例18.2 AL乘以BL。 MUL BL 11110110 11 100 011 w mod reg r/m MUL指令假设AL内放着被乘数。宽度(w=0)是一个字节,mod表示要用到存放器,而存放器是BL(011)。reg=100在此没意义。第第1818章章 8086/80888086/8088指令集参考指令集参考 18.1.4 3字节指令 下面的MOV指令产生3字节的指令机器码: MOV mem,AX 10100001 dddddddd
9、dddddddd 从累加器(AX或AL)进展传送时,必需明确处置的对象是字节还是字。本例中,w=1表示字,所以用到了16位的AX。假设第二个操作数是AL,那么w=0。第2、3字节表示的是内存单元的偏移地址。运用累加器的指令通常会产生高效率的机器指令码。第第1818章章 8086/80888086/8088指令集参考指令集参考 18.1.5 4字节指令 例18.3 将AL乘以一个内存单元。 微处置器假设假设为字节乘,那么被乘数在AL中,假设为字乘,那么被乘数在AX中。 MUL mem_byte 11110110 00 100 110 w mod reg r/m 对于此指令,reg永远为100,m
10、od=00表示用到内存单元,r/m=110意为直接援用内存单元。机器指令操作码后紧跟着两个提供内存单元的偏移地址的字节。第第1818章章 8086/80888086/8088指令集参考指令集参考 例18.4 LEA指令前往指定内存单元地址。 LEA DX,mem 10001101 00 010 110 LEA mod reg r/m reg=010代表DX存放器。mod=00及r/m=110表示直接援用内存单元。紧跟着的两个字节提供内存单元的偏移地址。第第1818章章 8086/80888086/8088指令集参考指令集参考 18.2 按字母顺序陈列的指令集按字母顺序陈列的指令集 本节按字母顺
11、序列出指令集。为简约起见,把某些指令如移位及循环移位排在一同。另外对于8086、80286及80386微处置器,提供了一些本书范围以外的特殊指令。除了前面讨论的形状字节及宽度位以外,以以下出有关指令中的缩写:第第1818章章 8086/80888086/8088指令集参考指令集参考 addr 内存单元的地址addr-high内存单元地址的高字节addr-low 内存单元地址的低字节data 立刻数(假设w=0为8位,w=1那么为16位)data-high立刻数的高字节data-low立刻数的低字节disp 偏移地址(增量或偏移量)reg 存放器第第1818章章 8086/80888086/80
12、88指令集参考指令集参考 * AAA:加法的ASCII调整 功能:调整存放在AL内的两个ASCII字节的和。请参阅11.1.1节ASCII数相加。标志位:影响AF及CF(OF、PF、SF及ZF不确定)。机器码:00110111(无操作数)* AAD:除法的ASCII调整功 能:调整ASCII值的除法。请参阅11.1.4节ASCII除法。标志位:影响PF、SF、ZF(AF、CF及OF不确定)。机器码:|11010101|00001010|第第1818章章 8086/80888086/8088指令集参考指令集参考 * AAM:乘法的ACSII调整功能:调整两个非紧缩型十进制数相乘的积。AAM先把A
13、L除以10,然后,商存于AH,除数留于AL。AAM无操作数。请参阅11.1.3节ASCII乘法。标志位:影响PF、SF及ZF(AF、CF及OF不确定)。机器码:|11010100|00001010|* AAS:减法的ACSII调整功能:调整AL内两个ASCII字节的差。请参阅11.1.2节ASCII减法。标志位:影响AF及CF(OF、PF、SF及ZF不确定)。机器码:00111111第第1818章章 8086/80888086/8088指令集参考指令集参考 * ADC:带进位的二进制加法 功能:通常用于多字节的二进制加法。假设CF标志被设定为1,ADC首先把第一个操作数加1,接着就像ADD指令
14、,总是把第二个操作数加到第一个操作数。 标志位:影响AF、CF、OF、PF、SF及ZF。第第1818章章 8086/80888086/8088指令集参考指令集参考 机器码:(3种格式) Reg/mem with reg:|000100dw|mod reg r/m| Immed to accum r:|0001010w|-data -|data if w=1| Immed to reg/mem:|100000sw|mod 010 r/m|-data -|data if sw=01|第第1818章章 8086/80888086/8088指令集参考指令集参考 * ADD:二进制加法 功能:把内存单元
15、、存放器或立刻操作数的字节或字的值加给存放器,或把存放器、立刻操作数的字节或字加给内存单元。 标志位:影响AF、CF、OF、PF、SF及ZF。 机器码:(3种格式) Reg/mem with reg:|000000dw|mod reg r/m| Immed to accum r:|0000010w |-data-|data if w=1| Immed to reg/mem:|100000sw|mod 000 r/m|-data-|data if sw=01|第第1818章章 8086/80888086/8088指令集参考指令集参考 * AND:逻辑与 功能:对两个操作数的每个位作逻辑与(AND
16、)运算,两个操作数分别置于存放器或内存单元,同为字节或字。第二个操作数可为立刻操作数。假设相对应的两个位都是1,那么AND把第一个操作数的位设成1,否那么设成0。请参阅OR、XOR及TEST。第第1818章章 8086/80888086/8088指令集参考指令集参考 机器码:(3种格式) Reg/mem with reg:|001000dw|mod reg r/m| Immed to accum r:|0010010w|-data -|data if w=1| Immed to reg/mem:|1010000w|mod 100 r/m|-data -|data if w=1|第第1818章章
17、 8086/80888086/8088指令集参考指令集参考 * CALL:调用子程序 功能:调用一个NEAR或FAR的子程序。从子程序前往主程序用RET指令。CALL指令把SP减小,并把下一条指令的地址(即IP的内容)压入堆栈顶端,然后把目的处的地址(偏移地址)送给IP。当前往调用程序时,RET指令把这些内容复原。依段内或段间调用有4种CALL指令。段间的CALL先递减SP的值,把CS压入堆栈,然后把IP压入堆栈。 标志位:无影响。第第1818章章 8086/80888086/8088指令集参考指令集参考 机器码:(4种格式) Direct within segment:| 11101000|
18、disp-low|disp-high| Indir. within segment: |11111111|mod 010 r/m| Indirect intersegment: |11111111|mod 011 r/m| Direct intersegment: |10011010|offset-low|offset-high|seg-low|seg-high|第第1818章章 8086/80888086/8088指令集参考指令集参考 * CBW:字节扩展成字 功能:把AL内一个带符号字节数扩展成一个字。CBW把AL的正负号(bit 7)扩展到整个AH。请参阅10.5.2节的字节转换成字指令
19、CBW。 标志位:无影响。 机器码:10011000(无操作数) * CLC:清进位标志CF 功能:把CF标志位清为0,例如使ADC指令不至于多加1。CLC无操作数。请参阅STC。 标志位:CF(清为0)。 机器码:11111000第第1818章章 8086/80888086/8088指令集参考指令集参考 * CLD:清方向标志DF 功能:把DF标志位清为0,使CMPS及MOVS之类的字符串运算指令从左向右执行。请参阅STD。 标志位:DF(清为0)。 机器码:11111100(无操作数) * CLI:清中断标志IF 功能:使出如今处置器INTR引脚线上的“可屏蔽外部中断失效,并将IF标志位清
20、0。请参阅STI。 标志位:IF(清为0)。 机器码:11111010(无操作数)第第1818章章 8086/80888086/8088指令集参考指令集参考 * CMC:取反CF 功能:把进位标志CF变成它的反,使CF的值,0变成1或1变成0。 标志位:CF(取反)。 机器码:11110101(无操作数) 第第1818章章 8086/80888086/8088指令集参考指令集参考 * CMP:比较 功能:比较两个数据的大小。CMP在内部将第一个操作数减去第二个操作数,但不改动第一个操作数的值。操作数必需同为字节或字。CMP可把存放器、内存型数据或立刻数与存放器比较,或把存放器、立刻数与内存型数
21、据比较。 标志位:影响AF、CF、OF、PF、SF及ZF。第第1818章章 8086/80888086/8088指令集参考指令集参考 机器码:(3种格式) Reg/mem with reg:|001110dw|mod reg r/m| Immed to accum r:|0011110w|-data-|data if w=1| Immed to reg/mem:|100000sw|mod111r/m|-data-|data if sw=01|第第1818章章 8086/80888086/8088指令集参考指令集参考 * CMPS/CMPSB/CMPSW:字符串比较 功能:比较两个恣意长度的字符
22、串。这类指令通常配合指令前缀REPn运用,例如,REPE CMPSB。CMPSB比较内存中的字节,而CMPSW那么比较内存中的字。DS :SI存放器组对第一个操作数定址,ES :DI存放器组对第二个操作数定址。假设DF标志位为0,那么比较方向由左向右,SI及DI递增。假设DF为1,那么比较方向由右向左,SI及DI递减。 标志位:影响AF、CF、OF、PF、SF及ZF。 机器码:1010011w第第1818章章 8086/80888086/8088指令集参考指令集参考 * CWD:扩展字成为双字 功能:把AX内的一个带符号数字,经由正负号(第15位)扩展至DX的一切位而成为DX:AX双字。通常用
23、来产生32位的被除数。请参阅10.5.3节的字转换成双字指令CWD 。 标志位:无影响。 机器码:10011001(无操作数) 第第1818章章 8086/80888086/8088指令集参考指令集参考 * DAA:加法的十进制调整 功能:AL内是加的结果,而且是紧缩型的十进制数(BCD数),DAA调整AL内的两个BCD数。假设最右边4位的值大于9或AF标志位为1,那么DAA把AL加06并将AF标志置“1。假设AL的值大于9F或CF标志位为1,DAA把AL加60(Hex),并将CF标志置“1。请参阅DAS。 标志位:影响AF、CF、PF、SF及ZF(OF不确定)。 机器码:00100111(无
24、操作数)第第1818章章 8086/80888086/8088指令集参考指令集参考 * DAS:减法的十进制调整 功能:AL内是减的结果,而且是紧缩型的十进制数(BCD数),DAS调整AL内的两个BCD数。假设最右边4位的值大于9或AF标志位为1,那么DAS把AL减去Hex 60并将CF标志置“1。请参阅DAA。 标志位:影响AF、CF、PF、SF及ZF。 机器码:00101111(无操作数)第第1818章章 8086/80888086/8088指令集参考指令集参考 * DEC:减1 功能:把存放器或内存单元的字节或字减1,例如DEC CX。请参阅INC。 标志位:影响AF、OF、PF、SF或
25、ZF。 机器码:(2种格式) Register:| 01001reg | Reg/memory:| 1111111w | mod 001 r/m |第第1818章章 8086/80888086/8088指令集参考指令集参考 * DIV:无符号数除法 功能:无符号的被除数(16或32位)除以无符号除数(8或16位)。请参阅10.4.1节的无符号数除法指令DIV。 标志位:影响AF、CF、OF、PF、SF及ZF(全部不确定)。 机器码:| 1111011w | mod 110 r/m |第第1818章章 8086/80888086/8088指令集参考指令集参考 * ESC:微处置器放弃 功能:使协
26、处置器执行特殊功能。有些功能要用8087或80287之类的协处置器作浮点运算。ESC指令把要处置的指令及操作数交给协处置器。 标志位:无影响。 机器码:| 11011 x x x | mod xxx r/m |(x位不重要)第第1818章章 8086/80888086/8088指令集参考指令集参考 * HLT:微处置器暂停 功能:使微处置器在等待中断时进入暂停形状。HLT使CS及IP指到跟着HLT的下一条指令,然后处置器暂停。当中断发生时,微处置器把CS及IP压入堆栈,然后执行中断效力程序。前往调用程序时,IRET指令把堆栈内容取出,从原来跟着HLT的下一条指令处开场执行。 标志位:无影响。
27、机器码:11110100(无操作数)第第1818章章 8086/80888086/8088指令集参考指令集参考 * IDIV:有符号数除法 功能:有符号的被除数(16或32位)除以有符号的除数(8或16位)。请参阅10.4.2节的带符号数除法指令IDIV。 标志位:影响AF、CF、OF、PF、SF及ZF。 机器码:| 1111011w | mod 111 r/m |第第1818章章 8086/80888086/8088指令集参考指令集参考 * IMUL:有符号数乘法 功能:有符号数(8或16位)相乘。IMUL把最高位的1看成符号。请参阅10.3.2节的带符号数乘法指令IMUL。 标志位:影响C
28、F和OF(AF、PF、SF及ZF不确定)。 机器码:| 1111011w | mod 101 r/m |第第1818章章 8086/80888086/8088指令集参考指令集参考 * IN:输入 功能:从输入端口(Port)把一个字节数据传送给AL或把一个字传送给AX。输入端口可写成固定的数值操作数即直接地址(例如,IN AX,port #),或DX内的一个地址值(例如 IN AX,DX)。8086、80286及80386提供INS(Input String)指令。请参阅OUT。 标志位:无影响。 机器码:(2种格式) Variable port:| 1110110w | Fixed port
29、:| 1110010w | -port- |第第1818章章 8086/80888086/8088指令集参考指令集参考 * INC:加1 功能:把存放器或内存单元的字节或字加1,例如,写成INC CX。请参阅DEC。 标志位:影响AF、OF、PF、SF或ZF。 机器码:(2种格式) Register: | 01000 reg | Reg/memory:| 1111111w | mod 000 r/m | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * INT:中断 功能:中断正在执行的程序,并把控制权转移给256个中断(向量)地址中的一个。INT做以下事情: 把
30、SP减2,标志存放器压入堆栈,并重新设置IF及TF标志; 把SP减2,CS压入堆栈,再把中断向量的两个高字节拼成一个字放入CS; 把SP减2,IP压入堆栈,再把中断向量的两个低字节拼成一个字放入IP。 标志位:影响IF及TF。 机器码:| 1100110 v | -type- | (if v=0 type is 3)第第1818章章 8086/80888086/8088指令集参考指令集参考 * INTO:溢出中断 功能:假设发生溢出那么产生中断(OF标志位被设置为“1),并执行INT 04。中断地址放在地址Hex 10H处。请参阅INT。 标志位:无影响。 机器码:11001110 (无操作数
31、)第第1818章章 8086/80888086/8088指令集参考指令集参考 * IRET:中断前往 功能:从中断效力程序前往主程序,IRET做以下事情: 把栈顶的字取出送给IP然后SP加2; 再把栈顶的字取出放入CS,SP加2; 取出栈顶的字放入标志存放器,SP加2。此指令把中断时做的事复原然后前往。请参阅RET。 标志位:影响全部。 机器码:11001111(无操作数)第第1818章章 8086/80888086/8088指令集参考指令集参考 * JA/JNBE:大于或不小于、等于转 功能:测试一个无符号的数据后,将控制权转移到另一个地址。假设CF=0且ZF=0,指令将操作数(偏移地址)加
32、给IP实现跳转。 标志位:无影响。 机器码:| 01110111 | -disp- | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * JAE/JNB :大于、等于或不小于转 功能:测试一个无符号的数据后,将控制权转移到另一个地址。假设CF=0,把操作数(偏移地址)加给IP实现跳转。 标志位:无影响。 机器码:| 01110011 | -disp- | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * JB/JNAE:小于或不大于、等于转 功能:测试一个无符号的数据后,将控制权转移到另一个地址。假设CF=1,把操作数(偏移地址)加给
33、IP实现跳转。 标志位:无影响。 机器码:| 01110010 | -disp- | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * JBE/JNA:小于、等于或不大于转 功能:测试一个无符号的数据后,将控制权转移到另一个地址。假设CF=1或AF=1,那么把操作数(偏移地址)加给IP实现跳转。 标志位:无影响。 机器码:| 01110110 | -disp- | * JC:CF=1 转 功能:见JB/JNAE(具有一样的作用)。第第1818章章 8086/80888086/8088指令集参考指令集参考 * JCXZ:CX=0 转 功能:假设CX为0那么跳到指定地
34、址。JCXZ在循环的开场能够会很有用。 标志位:无影响。 机器码:| 11100011 | -disp- | * JE/JZ:假设为0或相等转(ZF=1) 功能:测试一个有符号或无符号的数据后,将控制权转移到另一个地址。假设标志位ZF=1,把操作数(偏移地址)加给IP实现跳转。 标志位:无影响。 机器码:| 01110100 | -disp- | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * JG/JNLE:大于或不小于、等于转 功能:测试一个有符号的数据后,将控制权转移到另一个地址。假设标志SF与OF不相等,把操作数(偏移地址)加给IP实现跳转。 标志位:无
35、影响。 机器码:| 01111100 | -disp- | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * JLE/JNG:小于、等于或不大于转 功能:测试一个带符号的数据后,将控制权转移到另一个地址。假设标志ZF=1或标志SF与OF不相等,把操作数(偏移地址)加给IP实现跳转。 标志位:无影响。 机器码:| 01111110 | -disp- | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * JMP:无条件转 功能:无条件跳转到指定地址。JMP用目的位置的偏移地址取代IP的内容。段内及段间跳转控制一共有五种用法。段间跳转时CS
36、也要改动成新的段地址。 标志位:无影响。 机器码:(5种格式) 第第1818章章 8086/80888086/8088指令集参考指令集参考 Direct within segment:|11101001|disp - low | disphigh | Direct within seg short:|11101011|-disp-| Indirect within segment:|11111111| mod 100 r/m | Indirect intersegment: | 11111111| mod 101 r/m | Direct intersegment:|11101010|offs
37、et - low | offset-high| seg-low| seg-high|第第1818章章 8086/80888086/8088指令集参考指令集参考 * JNC:假设无进位转(C=0) 功能:见JAE/JNB(具有一样的作用)。 * JNE/JNZ:假设不相等或不等于0转 功能:测试一个有符号或无符号的数据后,将控制权转移到另一个地址。假设标志ZF=0,那么把操作数(偏移地址)加给IP实现跳转。 标志位:无影响。 机器码:| 01110101 | -disp- | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * JNO:假设无溢出转(OF=0) 功能:
38、假设未发生溢出那么跳转到指定地址。假设OF=0,那么把操作数(偏移地址)加给IP实现跳转。 标志位:无影响。 机器码:| 01110001 | -disp- | * JNP/JPO:假设奇校验转(PF=0) 功能:假设奇偶校验后PF0,跳到指定地址。PF0是奇校验,指运算结果的低8位含有1的个数为奇数,把操作数(偏移地址)加给IP实现跳转。请参阅JP/JPE。 标志位:无影响。 机器码:| 01111011 | -disp- | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * JNS:假设为正数转(SF=0) 功能:假设符号位被设成“0(正值),跳到指定地址。S
39、F=0,把操作数(偏移地址)加给IP实现跳转。请参阅JS。 标志位:无影响。 机器码:| 01111001 | -disp- | * JO:假设溢出转(OF=1) 功能:假设发生溢出,跳到指定地址。OF=1,把操作数(偏移地址)加给IP实现跳转。请参阅JNO。 标志位:无影响。 机器码:| 01110000 | -disp- | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * JP/JPE:假设偶校验转(PF=1) 功能:假设产生偶校验,跳到指定地址。偶校验是指运算后的低8位含有1的个数为偶数,PF=1(偶校验),把操作数(偏移地址)加给IP实现跳转。请参阅JN
40、P/JPO。 标志位:无影响。 机器码:| 01111010 | -disp- | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * JS:假设为页数转(SF=1) 功能:假设符号位被设成“1(负值),跳到指定地址。SF=1,把操作数(偏移地址)加给IP实现跳转。 标志位:无影响。 机器码:| 01111000 | -disp- | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * LAHF:标志存放器的低8位装入AH 功能:把标志存放器的低8位装入AH。这个指令与8080兼容。请参阅SAHF,LAHF(无操作数)。标志存放器的低8位
41、如下: S Z * A * P * C (*表示没用到的位) 标志位:无影响。 机器码:10011111 第第1818章章 8086/80888086/8088指令集参考指令集参考 * LDS:地址传送(DS) 功能:LDS把保管在内存中的偏移地址及段地址(4个字节)装入目的存放器组。段地址放在DS而偏移地址可放入任何一个通用或索引存放器,下面的例子是把偏移地址装入DI,而把接下来的两个字节的高地址的内容送到DS: LDS DI,memory-addr 标志位:无影响。 机器码:| 11000101 | mod reg/m | 第第1818章章 8086/80888086/8088指令集参考指
42、令集参考 * LES:地址传送(ES)功能:请参阅LDS,改换的是ES而不是DS。标志位:无影响。机器码:| 11000100 | mod reg/m | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * LODS/LODSB/LODSW:反复装入字符串 功能:把内存单元中的一个字节装入AL或把一个字装入AX,虽然LODS是字符串型运算,却不适宜用指令前缀REP。DS:SI存放器组指向一个字节(假设用LODSB)或一个字(假设用LODSW),并把它从内存单元装入AL或AX。假设标志DF为0,那么此指令把SI加1(假设是字节)或加2(假设是字),否那么就减1或减2。
43、 标志位:无影响。 机器码:1010110w(无操作数) 第第1818章章 8086/80888086/8088指令集参考指令集参考 * LOOP:无条件循环 功能:控制一段程序按指定的次数执行。开场执行循环前就把次数放在CX内,LOOP指令普通放在循环体的底部;先把CX-1,假设CX0,把操作数(偏移地址)加给IP,实现循环;否那么执行LOOP下一条指令,即退出循环。 标志位:无影响。 机器码:| 11100010 | -disp- |第第1818章章 8086/80888086/8088指令集参考指令集参考 * LOOPE/LOOPZ:条件循环(CX0或ZF1) 功能:控制一段程序按指定的
44、次数执行或直到ZF标志被清0为止。LOOPE/LOOPZ和LOOP类似,先把CX-1;不同之处在于假设CX0或者ZF0那么退出循环,否那么继续循环,即把操作数(偏移地址)加给IP。请参阅LOOPNE/LOOPNZ。 标志位:无影响。 机器码:| 11100001 | -disp- |第第1818章章 8086/80888086/8088指令集参考指令集参考 * LOOPNE/LOOPNZ :条件循环(CX0或ZF0) 功 能:控制一段程序按指定的次数执行或直到ZF标志被置成1为止。LOOPNE/LOOPNZ和LOOP类似,先把CX-1,假设CX=0或者ZF=1退出循环,否那么继续循环,即把操作
45、数(偏移地址)加给IP,实现循环。请参阅LOOPE/LOOPZ。 标志位:无影响。 机器码:| 11100000 | -disp- |第第1818章章 8086/80888086/8088指令集参考指令集参考 * MOV:传送数据 功能:在两个存放器之间或存放器与内存单元之间传送一个字节或字的数据或把立刻数传送给存放器或内存段单元。MOV不能在两个内存单元之间传送数据,请参阅MOVS。根据操作数不同,有7种MOV指令。 标志位:无影响。 机器码:(7种格式)第第1818章章 8086/80888086/8088指令集参考指令集参考 Reg/mem to/from reg:|100010dw|m
46、od reg r/m| Immed to reg/mem:|1100011w|mod 000 r/m|-data-|data if w=1| Immed to register:|1011w reg|-data-|data if w=1| Mem to accumulator:|1010000w|addr-low|addr-high| Accumulator to mem:|1010001w|addr-low|addr-high| Reg/mem to seg reg:|10001110|mod 0sg r/m| (sg=seg reg) Seg reg to reg/mem:|1000110
47、0|mod 0sg r/m| (sg=seg reg) 第第1818章章 8086/80888086/8088指令集参考指令集参考 * MOVS/MOVSB/MOVSW:字符串传送 功能:在内存区域之间传送数据,通常配合指令前缀REP,MOVSB可以在两个内存区域传送恣意多个字节,而MOVSW可以传送恣意多个字。ES:DI确定第一个(目的)操作数的地址,而DS:SI确定第二个(源)操作数地址。假设DF标志为0,DI及SI递增;假设DF为1,那么DI及SI递减。 标志位:无影响。 机器码:1010010w(无操作数)第第1818章章 8086/80888086/8088指令集参考指令集参考 *
48、MUL:无符号乘法 功能:无符号的被乘数(8或16位)与乘数(8或16位)相乘。MUL把最高位看成数据而不是符号。8位相乘时,被乘数放在AL内,乘数放在存放器或内存单元中,例如MUL CL,积放在AX内。16位的乘法时,被乘数放在AX,乘数放在存放器或内存单元中,例如MUL BX,积放在DXAX。 标志位:影响CF及OF(AF、PF、SF及ZF不确定)。 机器码:| 1111011w | mod 100 r/m |第第1818章章 8086/80888086/8088指令集参考指令集参考 * NEG:正负变换 功能:改动二进制值的正负,即由正变负或由负变正。NEG的操作是用0减去操作数,即操作
49、数包括符号位,全部取反(1变0或0变1)后加1。例如,01H(+1)经NEG后变为0FFH(-1)。操作数可为存放器或内存单元的一个字节或字。请参阅NOT。 标志位:影响AF、CF、OF、PF、SF及ZF。 机器码:| 1111011w | mod 011 r/m |第第1818章章 8086/80888086/8088指令集参考指令集参考 * NOP:空操作 功能:当他要删除或插入机器码,又希望其他指令地址不发生变动,或想延伸执行时间时,可用此命令替代。NOP执行的是XCHG AX,AX,不改动任何东西,只是IP增值。 标志位:无影响。 机器码:10010000(无操作数)第第1818章章
50、8086/80888086/8088指令集参考指令集参考 * NOT:逻辑非 功能:把0变成1或1变成0。操作数是存放器或内存单元的一个字节或字。请参阅NEG。 标志位:无影响。 机器码:|1111011w|mod 010 r/m| * OR:逻辑或 功能:对两个操作数的每个位作逻辑OR。两个操作数必需是存放器或内存单元的字节或字,第二个操作数可以是立刻数。OR把两个操作数的每一个位逐一比较。假设相对应的两个位有任何一个是1,那么第一个操作数的该位变成1,否那么就不改动。请参阅AND及XOR。第第1818章章 8086/80888086/8088指令集参考指令集参考 标志位:影响CF、OF、P
51、F、SF及ZF(AF不确定)。 机器码:(3种格式) Reg/mem with reg:|000010dw|mod reg r/m| Immed to accum r:|0000110w|-data-|data if w=1| Immed to reg/mem:|1000000w|mod 001 r/m|-data-|data if w=1|第第1818章章 8086/80888086/8088指令集参考指令集参考 * OUT:输出 功能:从AL送出一个字节或从AX送出一个字至输出端口。可把输出端口写成直接地址(例如OUT port #,AX)或DX内为一个端口地址(例如OUT DX,AX)。
52、8086、80286及80386提供OUTS(输出字串)指令。请参阅IN。 标志位:无影响。 机器码:(2种格式) Variable port:|1110111w| Fixed port:|1110011w|-port-|第第1818章章 8086/80888086/8088指令集参考指令集参考 * POP:堆栈弹出 功能:把一个字(先前被压入堆栈者)弹出到指定的目的地。SP存放器指向当前栈顶的字。POP把此字弹出给指定的目的地并使SP+2。根据目的地是存放器、段存放器或内存单元的不同,而有3种POP指令。请参阅PUSH。 标志位:无影响。 机器码:(3种格式) Register:|01011
53、 reg| Segment reg:|000sg111|(sg implies segment reg) Reg/memory:|1000111 /m|mod 000 r/m| 第第1818章章 8086/80888086/8088指令集参考指令集参考 * POPA:堆栈弹出给一切存放器 (8088、8086、80286) 功能:依次将堆栈内容弹出给DI、SI、BP、SP、BX、DX、CX、AX存放器,并将SP加16,通常在此之前已用PUSHA将这些存放器压入堆栈中。SP值其实已被丢掉而没压入。 标志位:无影响。 机器码:01100001(无操作数)第第1818章章 8086/80888086
54、/8088指令集参考指令集参考 * POPF:堆栈弹出给标志存放器 功能:将堆栈(先前被压入堆栈者)弹出给标志存放器。请参阅PUSHF及POP。SP存放器指向当前栈顶的字,POPF把该字弹出给标志存放器,并把SP加2。该字通常是用PUSHF压入堆栈的标志存放器内容,而POPF把这些标志位复原。POPF不带操作数。 标志位:影响全部。 机器码:10011101(无操作数)第第1818章章 8086/80888086/8088指令集参考指令集参考 * PUSH:压入堆栈 功能:把一个字的值(地址或数据项)保管于堆栈以便未来运用。SP存放器指向当前栈顶的字,PUSH将SP减2并从指定操作数把一个字压
55、入新的栈顶。根据操作数是存放器、段存放器或内存字单元的不同,而有3种PUSH指令。请参阅POP及PUSHF。 标志位:无影响。第第1818章章 8086/80888086/8088指令集参考指令集参考 机器码:(3种格式) Register:| 01010 reg| Segment reg:| 000sg 110 | Reg/memory:| 11111111 | mod 110 r/m | 第第1818章章 8086/80888086/8088指令集参考指令集参考 * PUSHA:一切存放器压入堆栈(8088、8086、80286) 功能:把AX、CX、DX、BX、SP、BP、SI、DI依次
56、压入堆栈中并把SP减16,通常稍后POPA将这些存放器内容弹出堆栈。 标志位:无影响。 机器码:01100000(无操作数)第第1818章章 8086/80888086/8088指令集参考指令集参考 * PUSHF:标志存放器压入堆栈 功能:把标志存放器的内容保管于堆栈以供未来运用。SP存放器指向当前栈顶的字,PUSHF把SP减2,再把标志存放器压入新的栈顶。请参阅POPF及PUSH。 标志位:无影响。 机器码:10011100(无操作数)第第1818章章 8086/80888086/8088指令集参考指令集参考 * RCL与RCR:带进位循环左移与右移 功能:经由CF标志向左或向右循环挪动。
57、这个指令的操作对象可以是存放器或内存单元的一个字节或字。假设只挪动1位,那么可把操作数指定为1;假设超越1位那么需求把循环挪动的位数放在CL存放器中。RCL循环左移,最左边(最高)的位进入CF标志而CF位进入第0位,其他各位依序向左移。RCR循环右移,第0位进入CF标志位而CF位进入最左边(最高)位,其他各位依序向右移。第第1818章章 8086/80888086/8088指令集参考指令集参考 标志位:影响CF及OF。 机器码: RCL:| 110100cw | mod 010 r/m | (if c=0 shift is 1;) RCR:| 110100cw | mod 011 r/m |
58、(if c=1 shift is in CL)第第1818章章 8086/80888086/8088指令集参考指令集参考 * REP/REPE/REPZ/REPNE/REPNZ:反复字符串指令前缀 功能:按照指定次数反复字符串操作。这些前缀写在字符串指令CMPS、MOVS、SCAS及STOS前面。执行之前要先把次数放入CX,每执行字符串指令一次就把CX减1。运用REP时,字符串指令操作反复到CX=0为止。运用REPE/REPZ时,操作反复到CX=0或ZF=0为止。运用REPNE/REPNZ时,操作反复到CX=0或ZF=1为止。第第1818章章 8086/80888086/8088指令集参考指令
59、集参考 标志位:参阅相关字符串指令。机器码: REP/REPNE:11110010 REPE:11110011第第1818章章 8086/80888086/8088指令集参考指令集参考 * RET:子程序前往 功能:从稍前被CALL调用的子程序中前往。CALL可调用NEAR或FAR类型的子程序。当是NEAR的类型时,RET把栈顶的字弹出给IP,再把SP加2;当是FAR的类型时(即段间调用的前往),RET先把当前栈顶的字弹出给IP,然后SP加2,再把栈顶弹出给CS,SP加2。假设RET包含数值操作数(例如,RET 4),弹出时这个值同时加给SP。第第1818章章 8086/80888086/80
60、88指令集参考指令集参考 标志位:无影响。 机器码:(4种格式) Within a segment:| 11000011 | Within a segment with pop-value:| 11000010 | data-low | data-high | Intersegment:| 11001011 | Intersegment with pop-value:| 11001010 | data-low | data-high |第第1818章章 8086/80888086/8088指令集参考指令集参考 * ROL与ROR:不带进位的循环左移与右移 功能:向左或向右循环挪动。此指令的操作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 神经内科护理试题及答案2025年版
- 无网线监控摄像头施工方案
- 2025制冷与空调设备运行操作复训题库及答案
- 2025年生态环境与可持续发展考试题及答案
- 2025年环境监察与评估专业知识能力测验考试试卷及答案
- 中小商家服务需求分析-洞察与解读
- 异构网络切片隔离-洞察与解读
- 甘草药代动力学优化-洞察与解读
- 养猪场公司猪用保健品销售合同
- 嘉兴市中医院放射物理学期中年度理论考核试卷
- 村卫生室药品管理制度
- 职业健康安全管理手册+程序文件(ISO45001-2018)
- 煤气安全知识培训课件
- 降低阴式分娩产后出血发生率-PDCA
- 上海市院前急救质控手册
- 耳尖放血课件完整版
- 第一章前言Altiumdesigner是原Protel软件开发商
- GIS课程(空间数据处理)课件
- 高分子材料第五章药用高分子材料PPT
- 政务礼仪-PPT课件
- 《国际贸易单证理论与实务》全套课件(姚大伟版)
评论
0/150
提交评论