第3章 8086CPU指令系统

  • 格式:doc
  • 大小:143.00 KB
  • 文档页数:13

第三章 8086CPU指令系统

一 8086指令的一般格式

⒈ 概述

① 指令:是计算机用以控制各部件协调动作的命令;

② 指令系统:CPU可执行的指令的集合;

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

⒉ 指令格式

① 组成

由操作码和操作数两部分组成,有些指令无操作数。

操作码规定了指令的操作性质,用助记符表示;操作数规定了指令的操作对象。

② 分类

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

例:HLT 无操作数

DAA 约定或隐含操作数

INC AL 单操作数

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

③ 操作数类型

立即数:出现在指令中的常数;

寄存器操作数:操作数在寄存器中;

存储器操作数:操作数在存储器中。

④ 一般格式

[标号:] 操作码 操作数;注释

二 8086寻址方式

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

⒈ 立即寻址

直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。

例:MOV AL,50H

⒉ 寄存器寻址

存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。

例:MOV AL,BL

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

⒊ 存储器寻址

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

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

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

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

② 寄存器间接寻址

操作数所在的存储单元的偏移地址放在指令给出的寄存器中。可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。

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

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

③ 基址寻址

操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之和,段寄存器约定同寄存器间接寻址,允许段超越。

例:MOV AX,[BX+3AH] ;AX←DS:[BX+3AH]

MOV [BP+4EB3H],AX;SS:[BP+4EB3H]←AX

④ 变址寻址

操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄存器约定在DS中,允许段超越。

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

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

⑤ 基址变址寻址

操作数的有效地址是指令给定的位移量和一个基址寄存器(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亦如此。

⑥ 串寻址

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

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

MOVSW ;ES:[DI] ←DS:[SI],SI←SI 2,DI←DI 2

⑦ 端口寻址

操作数在外设端口中。

● 直接端口寻址:指令中直接给出的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

⑧ 隐含寻址

指令中没有给出操作数,但却隐含在固定对象中。 教 案 用 纸 第三章

吉 林 化 工 学 院 第 3 页 例:AAA ;隐含对AL操作,

三 数据传送指令

⒈ 通用数据传送指令

① 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(查表指令) 4 指令功能:AL←DS:[BX+AL];

标志寄存器:不影响;

用途:用于查表,表首地址的偏移地址在BX中,表长度可达256字节。

⒉ 地址传送指令

用来传送操作数的地址。

① LEA reg16,src 取偏移地址指令

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

标志寄存器:不影响;

操作数:目的操作数是16位通用寄存器,源操作数是存储器操作数。

② LDS reg16,src 和LES reg16,src 取地址指针指令

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

标志寄存器:不影响。

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

LDS SI,[3000H] ;DS=1234H,SI=5678H

LES DI,[3000H] ;ES=1234H,DI=5678H

⒊ 标志传送指令

专门用于对标志寄存器进行操作

① LAHF ;AH ←FL ,标志寄存器低8位送AH

② SAHF ;FL←AH,AH的内容送标志寄存器低8位

③ PUSHF ;标志寄存器内容压栈

④ POPF ;栈顶内容送标志寄存器

注意:SAHF和POPF指令将直接影响标志位,而其他传送均不会对标志位产生影响。

⒋ 输入/输出指令

用于主机与外设端口间的数据传送。

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中)。

标志寄存器:不影响。

四 算术运算指令

⒈ 加法指令

① ADD dst,src

指令功能:dst←(src)+(dst)

标志寄存器:影响AF、CF、PF、OF、ZF、SF

操作数:目的操作数:通用寄存器、存储器;

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

注意:两操作数必须类型一致;

两操作数不能同时为存储器操作数。

例:ADD AX,BX ;AX←AX+BX 教 案 用 纸 第三章

吉 林 化 工 学 院 第 5 页 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。

⒉ 减法指令

① 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;