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