8086CPU指令系统

更新时间:2023-11-12 02:19:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第三章 8086CPU指令系统

内容提要:

1.寻址方式:

立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,基址寻址,变址寻址,基址加变址寻址,串寻址,端口寻址,隐含寻址。 2.8086指令系统:

数据传送指令,算术运算指令,移位指令,程序控制指令,串操作指令,处理器控

制指令,I/O指令,中断指令。

学习目标:

1.掌握寻址方式;

2.掌握常用指令的功能和用法。 难点:

区别指令的正确与错误。 学时:14

作业:

一、问答题

1、现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21023H)=65H,下列指令执行后填入AX寄存器的内容: (1)MOV AX,1200H; (AX)= (2)MOV AX,BX; (AX)= (3)MOV (4)MOV (1)MOV (2)MOV

AX,[1200H]; (AX)= AX,[BX]; (AX)= AX,1100[BX]; (AX)= AX,[BX][SI]; (AX)=

(3)MOV AX,1100[BX][SI];(AX)=

2、执行下列指令序列后,完成的功能是将(DX,AX)的值 。

MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 二、填空题

1、执行下列指令序列后,完成的功能是将(DX,AX)的值 。 MOV CX,4 NEXT: SHR DX,1 RCR AX,1 LOOP NEXT

2、下列指令执行后,BX= 。 MOV CL,3 MOV BX,4DABH ROL BX,1 ROR BX,CL 三、选择题 1、下列程序:

NEXT:MOV AL,[SI]

MOV ES:[DI],AL INC SI INC DI

LOOP NEXT 可用指令 来完成该功能。

A)REP LODSB B)REP STOSB C)REPE SCASB D)REP MOVSB 2、设(AL)=-68,(BL)=86,执行SUB AL,BL指令后,正确的结果是 。 A)CF=1 B)SF=1 C)OF=1 D)ZF=1

3、设(SS)=0FFA0H,(SP)=00B0H,(AX)=8057H,(BX)=0F79H,执行指令“PUSH AX”后,(SP)= (1) ;再执行指令:

PUSH BX

POP AX 后,(SP)= (2) ,(AX)= (3) ,(BX)= (4) 。

4、设(AL)=-68,(BL)=86,执行SUB AL,BL指令后,正确的结果是 。

A)SF=1 B)ZF=0 C)CF=1 D)OF=1 5、假设(SS)=2000H,(SP)=0012H,(AX)=1234H,执行PUSH AX后, =12H A)20014 B)20011H C)20010H D)2000FH 6、若要检查BX寄存器中的D12位是否为1,应该用 指令。 A)OR BX,1000H B)TEST BX,1000H JNZ NO JNZ YES C) XOR BX,1000H D)AND BX,1000H JZ YES JNZ YES

7、用BP作基址变址寻址时,操作数所在的段是当前 。 A)数据段 B)代码段 C)堆栈段 D)附加段 8、执行下列指令后: MOV AX,1234H MOV CL,4 ROL AX,CL

DEC AX

MOV CX,4 MUL CX HLT

(AX)=

A)8D00H B)9260H C)8CAOH D)0123H

四、判断题

1、MOV AX,[BP]的源操作数的物理地址为16×(DS)+(BP)。( ) 2、判断下列指令是否正确,若错误,请指出原因。 (1)CMP [CX],BYTE PTR STR+1 (2)MOV DI,OFFSET [BX][SI] (3)LEA DI,[BX][SI] (4)PUSH AL (5)SHL AX,3

(6)MOV AX,TAB2-TAB1+100 (7)OUT CX,AL (8)DIV 25

(9)MOV CX,BX (10) POP CS (11) (12) (13) (14) (15)

PUSH WORD PTR 20[BX+SI-2] LEA BX,4[BX]

MOV BYTE PTR [BX],1000 MOV AX,[SI][DI]

MOV SAVE_WORD,DS

(16) MOV AX,ARRAY1+ARRAY2

(17) MOV WORD_OP1,WORD_OP1-WORD_OP2 (18) MOV SP,SS:DATA_WORD[BX][SI] (19) MOV AH,BX (20) MUL AX,BX

(21) LEA DS,35[DI]

(22) MOV STR[BX][SI],ES:AX (23) MOV [BX][BP],AX (24) ADD AX,ACH

一、 8086指令的一般格式

概述

指令:是计算机用以控制各部件协调动作的命令; 指令系统:CPU可执行的指令的集合;

机器指令:是CPU仅能识别的指令的二进制代码,也称机器码;

指令格式:由操作码和操作数两部分组成,有些指令无操作数。操作码规定了指令的操作性质,用助记符表示;操作数规定了指令的操作对象。

指令可分为无操作数指令、单操作数指令、双操作数指令。 例:HLT 无操作数

DAA 约定或隐含操作数 INC AL 单操作数

MOV AL,BL 双操作数,其中逗号前的操作数AL为目的操作数,逗号后的操作数BL为源操作数。

操作数类型有三种:立即数:出现在指令中的常数; 寄存器操作数:操作数在寄存器中; 存储器操作数:操作数在存储器中。

二、 8086寻址方式

是指CPU在执行指令时寻找操作数或操作数地址的方式。

1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在

指令操作码之后的存储单元中。 例:MOV AL,50H

2. 寄存器寻址:存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以

是目的操作数。 例:MOV AL,BL

以下寻址方式3~8,操作数都在存储器中。存储器操作数具有类型属性,如字节

(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储器操作数的偏移地址;用类型名 PTR 偏移地址的形式说明指令中存储器操作数的类型,例:WORD PTR [1000H];用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存储器操作数,如BUF DB 10H,20H。

3. 存储器寻址

(1)直接寻址:存储器操作数的16位偏移地址直接包含在指令的方括号中。

例:MOV AL,[1000H] 约定由DS提供段地址

MOV AL,CS:[1000H] ;段超越,由CS提供段地址 MOV AL,SS:[1000H] ;段超越,由SS提供段地址

(2)寄存器间接寻址:操作数所在的存储单元的偏移地址放在指令给出的寄存器中。可用

于这种寻址方式的寄存器只能是SI、DI、BP和BX。其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。

例:MOV AX,[SI] ;AX←DS:[SI] MOV [BX],AX ;DS:[BX]←AX

(3)基址寻址:操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之

和,段寄存器约定同寄存器间接寻址,允许段超越。 例:MOV AX,[BX+3AH] ;AX←DS:[BX+3AH] MOV [BP+4EB3H],AX;SS:[BP+4EB3H]←AX

(4)变址寻址:操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄

存器约定在DS中,允许段超越。

例:MOV [DI+12H],AX ;DS:[DI+12H] ←AX MOV BX,SS:[DI+45H] ;BX←SS:[DI+45H]

(5)基址变址寻址:操作数的有效地址是指令给定的位移量和一个基址寄存器(BX或BP)

及一个变址寄存器(SI或DI)的内容之和,段寄存器约定由基址寄存器决定,若为BX,段寄存器约定为DS;若为BP,段寄存器约定为SS,允许段超越。

例:MOV BX,[DI+BP+45H] ;BX←SS:[DI+BP+45H]

MOV AX,ES:[SI+BX+76H];AX←ES:[SI+BX+76H]

注意:基址寄存器BX和BP不能同时出现在一个方括号内,变址寄存器DI和SI亦如

此。

(6)串寻址:用于数据串操作指令,它隐含地运用:SI指出源串偏移地址,DI指出目的串

偏移地址,指令执行后,SI和DI的内容自动加1或减1(操作数为字节类型时)、加2或减2(操作数为字类型时);约定源串段地址在DS中,目的串段地址在ES中。不允许段超越。

例:MOVSB ;ES:[DI] ←DS:[SI],SI←SI MOVSW ;ES:[DI] ←DS:[SI],SI←SI

(7)端口寻址:操作数在外设端口中。

直接端口寻址:指令中直接给出的8位常数是外设端口地址。 例:IN AL,34H ;AL←[34H] OUT 34H,AL ;[34H]←AL

间接端口寻址:指令中外设端口的16位地址在DX中。 例:MOV DX,280H

IN AL,DX ;AL←[280H] OUT DX,AL ;[280H]←AL

(8)隐含寻址:指令中没有给出操作数,但却隐含在固定对象中。 例:AAA ;隐含对AL操作,

1,DI←DI 2,DI←DI

1 2

三、数据传送指令

1. 通用数据传送指令

① MOV dst,src 指令功能:dst←src, 标志寄存器:不影响,

操作数:src:通用寄存器、段寄存器、存储器操作数、立即数;

dst:通用寄存器、段寄存器、存储器操作数。

注意点:src和dst必须类型一致(都是8位或者是16位); dst不能是立即数;

当操作数不是立即数时,两个操作数不能都是存储器操作数; 源操作数是立即数时,目的操作数不能是段寄存器; CS不得作目的操作数。 例:MOV BX,CX ;BX←CX

MOV [2000H],BL ;DS:[2000H]←BL ① XCHG dst,src 指令功能:dst←→src 标志寄存器:不影响,

操作数:两操作数可以是通用寄存器和存储器。 注意点:两操作数不能都是存储器操作数; 两操作数类型必须一致。 例:XCHG AX,BX ;AX ←→BX ② PUSH src

指令功能:SP←SP-1,[SP]←srcH,SP←SP-1,[SP]←srcL 标志寄存器:不影响

操作数:寄存器(IP除外)或存储单元。

注意点:源操作数只能是16位,而不能是8位的。 ③ POP dst

指令功能:dstL←[SP],SP←SP+1,dstH←[SP],SP←SP+1 标志寄存器:不影响,POPF除外

操作数:同PUSH指令,但CS不能作为目的操作数。 注意点:目的操作数只能是16位的,而不能是8位的。 ④ XLAT(查表指令)

指令功能:AL←DS:[BX+AL]; 标志寄存器:不影响;

用途:用于查表,表首地址的偏移地址在BX中,表长度可达256字节。 2. 地址传送指令:用来传送操作数的地址。 ① LEA reg16,src 取偏移地址指令

指令功能:将源操作数的偏移地址送16位通用寄存器; 标志寄存器:不影响;

操作数:目的操作数是16位通用寄存器,源操作数是存储器操作数。 ② LDS reg16,src 和LES reg16,src 取地址指针指令

指令功能:将源操作数的有效地址所对应的双字存储单元的高16位内容送入DS(LES指令送入ES),低16位内容送入指令指定的16位通用寄存器;

标志寄存器:不影响。

例:设某双字存储单元偏移地址为3000H,双字数据为12345678H,则

LDS SI,[3000H] ;DS=1234H,SI=5678H LES DI,[3000H] ;ES=1234H,DI=5678H 3. 标志传送指令 专门用于对标志寄存器进行操作 ① LAHF ;AH ←FL ,标志寄存器低8位送AH ② SAHF ;FL←AH,AH的内容送标志寄存器低8位 ③ PUSHF ;标志寄存器内容压栈 ④ POPF ;栈顶内容送标志寄存器

注意点:SAHF和POPF指令将直接影响标志位,而其他传送均不会对标志位产生影响。 4. 输入/输出指令 用于主机与外设端口间的数据传送。 IN AL,n; IN AL,DX; IN AX,n; IN AX,DX

指令功能:从端口(地址为n或在DX中)输入8位数据到AL中或输入16位数据到AX中;

标志寄存器:不影响。

OUT n,AL; OUT DX,AL; OUT n,AX; OUT DX,AX

指令功能:从AL中输出8位数据到端口(地址为n或在DX中)或从AX中输出16位数据到端口(地址为n或在DX中)。

标志寄存器:不影响。

四、算术运算指令

1. 加法指令

① ADD dst,src 指令功能:dst←src+dst

标志寄存器:影响AF、CF、PF、OF、ZF、SF 操作数:目的操作数:通用寄存器、存储器; 源操作数:通用寄存器、存储器、立即数; 注意点:两操作数必须类型一致;

两操作数不能同时为存储器操作数。 例:ADD AX,BX ;AX←AX+BX

ADD [BX+DI+64H],AX ;[BX+DI+64H]←AX ② ADC dst,src

指令功能:dst←dst+src+CF 其余同ADD指令。 ③ INC dst

指令功能:dst←dst+1

标志寄存器:影响OF、SF、ZF、AF、PF; 操作数:8位/16位通用寄存器或存储器; 注意点:不影响CF。 2. 减法指令

① SUB dst,src 指令功能:dst←dst-src; 其余同ADD指令。

例:SUB BX,CX ;BX←BX-CX ② SBB dst,src

指令功能:dst←dst-src-CF; 其余同SUB指令。

例:SBB [BX+SI],AL ;[BX+SI] ←[BX+SI]-AL-CF ③ DEC dst 指令功能:dst←dst-1 其余同INC指令。 ④ NEG dst

指令功能:dst←0-dst或det←

+1

标志寄存器:影响AF、CF、PF、OF、ZF、SF; 操作数:8位/16位通用寄存器或存储器。 例:MOV AH,5

NEG AH ;AH=11111011B,是-5(补码) MOV AX,-6

NEG AX ;AX=0006H,是+6 ⑤ CMP dst,src 指令功能:dst-src 其余同SUB指令;

注意点:指令执行后,目的操作数保持原值不变。 3. 乘法指令

① MUL src 无符号数乘法指令 指令功能:AX←AL*src(字节乘法) DXAX←AX*src(字乘法) 标志寄存器:字节乘:若乘积高8位AH

0,则CF=1,OF=1,

若乘积高8位AH=0,则CF=0,OF=0; 字乘: 若乘积高16位DX

0,则CF=1,OF=1,

若乘积高16位DX=0,则CF=0,OF=0;

操作数:可以是通用寄存器、存储器,不能是立即数。 例:MUL BX ;DXAX←AX*BX MUL BYTE PTR [SI] ;AX←AL*(DS:[SI]) ② IMUL src 带符号数乘法指令 指令功能:同MUL指令;

标志寄存器:若乘法结果AH或DX包含有效值,则OF=1、CF=1,

若乘法结果AH或DX只是低半部分的符号扩展,则OF=0、CF=0 操作数:同MUL指令。

例:IMUL WORD PTR [DI] ;DXAX←AX*(DS:[DI]) 4. 除法指令

① DIV src 无符号除法指令

指令功能:字节除:AL←AX/src,余数在AH中, 字除: AX←DXAX/src,余数在DX中。

若商超过AL(字节除)或AX(字除)所能存放的最大值(FFH或FFFFH)时,系统会自动产生0类中断,且商和余数都不确定。 操作数的规定与乘法指令相同。

例:DIV BX ;DX,AX←DXAX/BX,DX←余数,AX←商 ② IDIV src 带符号数除法指令

需强调的是余数的符号必须和被除数的符号相同。当商超过AL或AX所能存放的最大值+127(字节除)或+32767(字除),以及所能存放的最小值-127(字节除)或-32767(字除)时,系统会自动产生0类中断。操作数的规定与乘法指令相同。 5. 符号扩展指令 扩展带符号数的字节数

① CBW

指令功能:将AL中数的符号位扩展到整个AH中。 ② CWD

指令功能:将AX中数的符号位扩展到整个DX中。 例:MOV AL,-16 ;AL=0F0H(-16)

CBW ;AX=0FFF0H(-16) CWD ;DXAX=0FFFFFFF0H(-16) IDIV BX ;DX←余数,AX←商

6. BCD数调整指令

压缩型BCD数(也称组合BCD数):一个字节表示两位BCD数;

非压缩型BCD数(也称非组合BCD数):一个字节表示一位BCD数,有效位在低4位,高4位为零。

① 加法的BCD数调整

a.AAA:加法的非压缩型BCD数调整指令

指令功能:对在AL中两个非压缩型BCD数相加的结果,调整成非压缩型BCD数在AL中;若AL低4位大于9或AF=1,则AL+6,AH+1,CF和AF置1,AL高4位清0;否则AL高4位清0,CF和AF置0,

标志寄存器:该指令不影响PF、ZF、SF、OF。

注意点:必须紧跟在加法指令之后且只能对AL中的内容进行调整。 b. DAA:压缩型BCD数调整指令

指令功能:对在AL中两个压缩型BCD数相加的结果,调整成压缩型BCD数在AL中; 标志寄存器:影响CF、PF、AF、ZF、SF,其中CF=1说明结果大于99。 注意点:必须紧跟在加法指令之后且只能对AL中的内容进行调整。

例:MOV BL,35H MOV AL,85H ADD BL,AL DAA

结果AL=20H,CF=1,AF=1,PF=0,ZF=0,SF=0 ② 减法的BCD数调整

a.AAS:减法的非压缩型BCD数调整指令

指令功能:对在AL中两个非压缩型BCD数相减的结果,调整成非压缩型BCD数在AL中;

标志寄存器:影响AF、CF;

注意点:必须紧跟在减法指令之后且只能对AL中的内容进行调整。 例:SUB AL,BL ;AL和BL中的非压缩BCD数相减 AAS ;调整AL为正确的非压缩BCD数 b.DAS:减法的压缩型BCD数调整指令

指令功能:对在AL中两个压缩型BCD数相减的结果,调整成压缩型BCD数在AL中; 标志寄存器:同DAA指令。

注意点:必须紧跟在减法指令之后且只能对AL中的内容进行调整。 ③ 乘法的BCD数调整 AAM;非压缩型BCD数调整

指令功能:对AX中两个非压缩型BCD数在相乘的结果调整成两位非压缩型BCD数,高位非压缩型BCD数在AH中,低位非压缩型BCD数在AL中;

标志寄存器:影响PF、SF、ZF。 注意点:必须紧跟在乘法指令之后。 ④ 除法的BCD数调整 AAD;非压缩型BCD数调整

指令功能:用在两位非压缩型BCD数在相除之前进行调整,对AX内容进行调整,使两个未组合的十进制数相除之后可得到非组合的BCD数结果,商在AL中,余数在AH中;

标志寄存器:影响PF、SF、ZF。 注意点:必须紧跟在除法指令之前。

五、位操作指令(包括逻辑运算指令、移位指令)

1. 逻辑运算指令

① AND dst,src 指令功能:dst←dst∩src

标志寄存器:影响SF、ZF、PF,OF=0、CF=0,AF不确定 操作数:目的操作数:通用寄存器、存储器; 源操作数:通用寄存器、存储器、立即数; 注意点:两操作数不能都是存储器操作数。 例:MOV BX,0F56H

AND BL,BH ;BL=06H ② OR dst,src 指令功能:dst←dst∪src 其余同AND指令。 ③ NOT dst 指令功能:dst←

标志寄存器:不影响;

操作数:通用寄存器、存储器。 例:MOV AL,05H

NOT AL ;AL=0FAH ④ XOR dst,src 指令功能:dst←dst 其余同AND指令。 ⑤ TEST dst,src

src

指令功能:dst∩src 其余同AND指令

注意点:指令执行后,目的操作数的值保持不变。 2. 移位指令

移位次数cnt可以是1,若移位次数大于1时,必须放在CL中,移位结束后,CL值不变。影响AF以外的各标志位,而AF不定;当cnt=1时,OF才有意义,当移位前操作数的最高两位相同时,移位后OF=0,当操作数的最高两位不同时,OF=1。

① SAL dst,cnt 算术左移指令 SHL dst,cnt 逻辑左移指令 指令功能:

操作数:通用寄存器或存储器的8位或16位内容。

② SAR dst,cnt 算术右移指令

指令功能:

操作数:通用寄存器或存储器的8位或16位内容。

③ SHR dst,cnt 逻辑右移指令

指令功能:

操作数:通用寄存器或存储器的8位或16位内容。 3. 循环移位指令

只影响CF和OF,同样只有当cnt=1时,OF才有意义。操作数同移位指令

① ROL dsr,cnt 循环左移指令

指令功能:

② ROR dst,cnt 循环右移指令

指令功能:

③ RCL dst,cnt 带进位循环左移指令

若CX=0,执行下一条指令。 ② REPE/REPZ 指令功能:若CX 若CX=0 ③ REPNE/REPNZ 指令功能:若CX 若CX=0 2. 串传送:不影响标志

① MOVSB

指令功能:ES:[DI] ←DS:[SI],DI←DI ② MOVSW

指令功能:ES:[DI] ←DS:[SI],DI←DI 3. 串取出:不影响标志

① LODSB

指令功能:AL ←DS:[SI],SI←SI ② LODSW

指令功能:AX←DS:[SI],SI←SI 4. 串存入:不影响标志

① STOSB

指令功能:ES:[DI] ←AL,DI←DI ② STOSW

指令功能:ES:[DI] ←AX,DI←DI

2。 1。 2。 1。

2,SI←SI

2。

1,SI←SI

1。

0且ZF=0,重复执行,CX←CX-1, ZF=1,执行下一条指令。 0且ZF=1,重复执行,CX←CX-1, ZF=0,执行下一条指令。

5. 串比较:影响OF、SF、ZF、AF、PF、CF

① CMPSB

指令功能:DS:[SI]—ES:[DI],SI←SI ② CMPSW

指令功能:DS:[SI]—ES:[DI],SI←SI

2, DI←DI

2。

1, DI←DI

1。

6. 串搜索:影响OF、SF、ZF、AF、PF、CF

① SCASB

指令功能:AL—ES:[DI],DI←DI ② SCASW

指令功能:AX—ES:[DI],DI←DI

1。

2。

八、处理器控制指令

控制处理器的某些功能分为三类: 1. 标志位操作指令

表3. 2 处理器控制指令

分类 标 志 位 操 作 指令格式 STC CLC CMC STD CLD STI CLI 外 部 同 步 空操作 HLT WAIT ESC ext-opcode,src LOCK NOP 等待 功 能 进位标志置1 进位标志置0 进位标志取反 方向标志置1 方向标志置0 中断允许标志置1 中断允许标志置0 暂停 信号有效 操作内容 CF←1 CF←0 CF← DF←1 DF←0 IF←1 IF←0 交权给外部协处理器 封锁总线 空操作

参见表3.2 2. 外部同步指令

主要用于CPU与外部事件同步,参见表3.2 3. 空操作指令

NOP

指令功能:空操作。

本文来源:https://www.bwwdw.com/article/ynnv.html

Top