Categories: 汇编 | Tags: | Views: 734

 

先说一下8086/8088的指令系统

可分为六个功能组:

(1)数据传送 (2)算术运算 (3)逻辑运算

(4)串操作 (5)程序控制 (6)处理器控制

指令语句可由四部分组成,一般格式:

[标号:] 指令助记符 [操作数1 [,操作数2]] [;注释]

数据传送指令

1. 传送指令

MOV DST,SRC

源操作数(SRC)可以是累加器,寄存器,存储单元以及立即数

目的操作数(DST)可以是累加器,寄存器,和存储单元。

传送不改变源操作数

(1)CPU内部寄存器之间的数据传送,如

MOV AH,AL

MOV DL,DH

MOV BP,SP

MOV AX,CS

SRC和DST不能同时是段寄存器

DST不能是CS

SRC和DST都不能是IP

(2)立即数送至通用寄存器或存储单元,如

MOV AL 3

MOV SL,-5

MOV VARB,-1

MOV VARW,3456H

MOV [SI],6543H

立即数不能直接送段寄存器

立即数永远不能作为目的操作数

(3)寄存器与存储器间的数据传送,如

MOV AX,VARW

MOV BH,[DI]

MOV DL,ES:[SI+3]

MOV VARB,DL

MOV DS:[BP],DL

MOV VARW,DS

MOV ES,VARW

注意:

源操作数和目的操作数的类型要一致(8位送8位,16位送16位)

除串操作指令外,源操作数和目的操作数不能同时是存储器操作数(要在两个存储单元间传送数据,可以利用通用寄存器过渡,也可用于段寄存器间的数据传送)

 

2. 交换指令

XCHG OPRD1,OPRD2

OPRD1和OPRD2或以是通用寄存器和存储单元,但不包括CS,也不能同时是存储单元,还不能有立即数。

 

3. 地址传送指令

(1)有效地址传送指令LEA

LEA REG,OPRD

把OPRD的有效地址传送到寄存器REG

操作数OPRD必须是存储器操作数

操作数REG必须是一个16位的通用寄存器

(2)LDS

LDS REG,OPRD

执行的操作:

(REG)<- (SRC)

(DS)<- (SRC+2)

OPRD必须是32位的存储器操作数

REG可以是一个16位的通用寄存器,通常是变址寄存器(SI,DI)或指针寄存器(SP,BP)

即把OPRD地址对应的双字的高字送DS,低字送REG。

(3)LES

LES REG,OPRD

执行的操作:

(REG)<- (SRC)

(ES)<- (SRC+2)

要求同上。

 

4.堆栈操作指令

堆栈是一段内在区域,栈底的地址较大,栈顶的地址较小。

堆栈的段值在SS中,SP始终指向栈顶

工作方式:后进先出

堆栈的存取必须以字为单位(16位)

(1)进栈指令

PUSH SRC

执行的操作: (SP)<- (SP)-2

SRC可以是通用寄存器和段寄存器,也可以是字存储单元。

(2)出栈指令

POP DST

执行的操作:(SP)<- (SP)+2

从栈顶弹出一个字到DST

DST可以是通用寄存器和段寄存器(CS除外!),也可以是字存储单元

POP和PUSH可以使用除立即数以外的其他寻址方式

 

5. 标志操作指令

(1)标志传送指令

LAHF

把FLAG的低8位(CP(0),PF(2),AF(4),ZF(6),SF(7)),传送到寄存器AH的指定位。

SAHF

与LAHF相反,把AH的指定位传送给FLAG的低8位。

PUSHF

把FLAG压栈

POPF

把栈顶的字传送到FLAG

(2)标志位操作指令

CLC

清进位标志:CF=0

STC

置进位标志:CF=1

CMC

进位标志取反:CF=NOT CF

CLD

清方向标志:DF=0

STD

置方向标志:DF=1

CLI

清中断允许标志:IF=0

STI

置中断允许标志:IF=1

这篇文章来自 迷途知返(PWWANG.COM), 转载请注明出处。 版权说明

No comments yet.
;) :| :x :twisted: :roll: :oops: :o :mrgreen: :lol: :idea: :evil: :cry: :arrow: :P :D :?: :? :) :( :!: 8O 8)

你可以使用@somebody:开头, 来邮件通知somebody你回复了他的留言(用户名区分大小写).