8086指令学习笔记

一、8086CPU中的寄存器

8086CPU中有14个16位的寄存器,按用途分为4类

1.数据寄存器

AX AH AL 累加器 常用于运算
BX BH BL 基址寄存器 常用于地址索引
CX CH CL 计数(寄存)器 常用于计数
DX DH DL 数据寄存器 常用于数据传递

AX,AH,AL

AX是16位寄存器,AH是AX的高8位,AL是AX的低8位
AX是EAX的低16位

2.段寄存器组

CS 代码段寄存器
DS 数据段寄存器
SS 堆栈寄存器
ES 附加段寄存器

3.其他寄存器组

IP 指令指示器 指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;
IF 标志寄存器

4.指针和变址寄存器

SP 堆栈指示器 堆栈指针,与SS配合使用,可指向目前的堆栈位置
BP 基址指示器 基址指针寄存器,可用作SS的一个相对基址位置
SI 源变址寄存器 源变址寄存器可用来存放相对于DS段之源变址指针
DI 目的变址寄存器 目的变址寄存器,可用来存放相对于 ES 段之目的变址指针

二、8086的指令寻址方式

  • 立即寻址
  • 寄存器寻址
  • 直接寻址
  • 寄存器间接寻址
  • 寄存器相对寻址
  • 基址变址寻址
  • 基址变址相对寻址
  • 隐含寻址

三、8086的指令系统

数据传送指令

Ⅰ. 通用指令

1.MOV指令

数据传送由“源-> 目的地”

MOV AX, BX   	;寄存器寻址
MOV DL, AL   	;寄存器寻址
MOV AX, 02   	;源操作数用立即寻址
MOV SI, [BX] 	;源操作数寄存器间接寻址
MOV AL, 4[DI]	;源操作数寄存器相对寻址
MOV AX, [BX+2]	;源操作数寄存器相对寻址
MOV [BX][DI],DX	;目的操作数用基址加变址寻址

2.堆栈指令

入栈指令: PUSH
出栈指令:POP

3.字节或字交换指令:XCHG

寄存器之间或寄存器与存储器之间内容交换

xchg ax,cx

4.字节转换指令 XLAT

XLAT [转换表]

常用于查表

Ⅱ.I/O指令

1.八位数据的I/O指令

输入

IN AL, PORT ;输入 port表示某一个具体的I/O端口地址

输出

OUT PORT, AL

2.十六位数据的I/O指令

输入

IN AX, PORT

输出

OUT PORT, AX

Ⅲ.地址目标传送指令

  • LEA: 有效地址传送指令
  • LDS: 双字指针送寄存器和DS指令
  • LES: 双字指针送寄存器和ES指令

1.LEA

将源操作数的偏移地址送到目的操作数中

LEA CX,[2000H];执行结果CX=2000H
;若SI=1000H,BX=2000H
LEA DX,[SI+BX]; 执行结果为DX=3000H

2.LDS

传送一个32位的远地址指针,其中包括一个便宜地址和一个段地址,
前者送寄存器,后者送DS.

;设:DS=C000H,有关存储单元内容为
;(C0010H)=80H
;(C0011H)=01H
;(C0012H)=00H
;(C0013H)=20H
LDS SI,[0010H];执行后SI=0180H,DS=2000H

3.LES

传送一个32位的远地址指针,其中包括一个便宜地址和一个段地址,
前者送寄存器,后者送ES.

;设:DS=B000H,BX=080AH有关存储单元内容为
;(B080AH)=A2H
;(B080BH)=05H
;(B080CH)=00H
;(B080DH)=40H
LES DI,[BX];执行后DI=05A2H,ES=4000H

Ⅳ.标志传送指令

  • LAHF:标志送AH指令
  • SAHF: AH送标志寄存器指令
  • PUSHF:标志入栈指令
  • POPF:标志出栈指令

算术运算类指令

1.加法与减法指令

ADD DST,SRC; DST <- DST+SRC
ADC DST,SRC; DST <- DST+SRC+CF
SUB DST,SRC; DST <- DST-SRC
SBB DST,SRC; DST <- DST-SRC-CF
NEG DST    ; 0-DST,即取补

2.比较指令

CMP AX,BX;
; 比较后 ZF=1,则AX=BX
; ZF =0,则AX不等于BX

3.增量指令

INC DST; DST+1 -> DST
DEC DST; DST-1 -> DST

4.乘法与除法指令

IMUL SRC;符号数的乘法
		;字节运算时,ALXSRC->AX
		;字运算时,AX x SRC -> DX与AX
MUL SRC; 无符号数的乘法,其他同上
IDIV SRC;符号数除法
		;字节运算时:AX/SRC的商 -> AL; AX/SRC的余数-> AH
		;字运算时: DX/SRC的商 -> AX; DX/SRC的余数-> DX
DIV SRC; 符号数除法,其他同上

位操作指令

1.逻辑运算类指令

AND DST,SRC ; DST^SRC -> DST,清CF、OF
			;根据结果置SF、ZF、PF,标志AF不定
OR DST,SRT	;或, 标志位设置同上
XOR DST,SRT	;异或, 标志位设置同上
TEST DST,SRT;DST^SRC,仅设置标志位, 标志位设置同上
NOT DST		;取反, 不影响标志位

2.移位指令

SHR DST,CNT; 逻辑右移
SHL/SAL DST,CNT;逻辑/算数左移
SAR DST,CNT;算数右移

3.循环移位指令

ROR DST,CNT; 循环右移
ROL DST,CNT; 循环左移
RCR DST,CNT; 带进位循环右移
RCL DST,CNT; 带进位循环左移

串操作指令

  • 串传送
MOVSW	;字传送:SI+(-)2->SI,DI+(-)2->DI
MOVSB	;字节传送:SI+(-)1->SI,DI+(-)1->DI
  • 串比较
CMPSW ;字比较:SI+(-)2->SI,DI+(-)2->DI
CMPSB ;字节比较:SI+(-)1->SI,DI+(-)1->DI
  • 串扫描
SCASW ;字扫描: AX-(ES:DI),DI+(-)2->DI
SCASB ;字节扫描:AL-(ES:DI),DI+(-)1->DI
  • 串取出
LODSW ;字取出: (DS:SI) -> AX,SI+(-)2->SI
LODSB ;字节取出: (DS:SI) -> AL,SI+(-)1->SI
  • 串存储
STOSW ;字存储: AX -> (ES:DI),DI+(-)2->DI
STOSB ;字节存储: AL -> (ES:DI),DI+(-)1->DI

控制转移指令

1.无条件转移、电泳和返回指令

  • 无条件转移指令JMP
JMP OPRD ;OPRD时转移的目的地址
  • 调用和返回
    CALL 来电泳一个过程或子程序
CALL NEAR PTR OPRD;段内调用
CALL FAR PTR OPRD ;段间调用

2.条件转移指令

3.循环控制指令

标志处理和CPU控制

1.标志处理指令

指令助记符 功能 指令名称
STC CF <- 1 进位标志置1
CLC CF <- 0 进位标志置0
CMC CF <- 进位标志取反
STD DF <- 1 方向标志置1 (地址减量)
SLD DF <- 0 方向标志置0 (地址增量)
STI IF <- 1 中断允许标志置1 (开中断)
CLI IF <- 0 中断允许标志置0 (关中断)

2.外部同步指令

  • ESC指令
  • 等待指令WAIT
  • 封锁总线指令LOCK
posted @ 2020-02-13 20:46  少喝  阅读(695)  评论(0编辑  收藏  举报