8086CPU指令系统(2)

2019-04-23 09:00

§2 指令系统

目前在微机上常见的汇编语言是MASM(Macro Assembler Language 宏汇编语言),因此我们以8086/8088 MASM为主要介绍内容,也涉及一些MASM 5.0,MASM 6.0等版本内容。

OPR SRC

指令助记符 源操作数

DEST 目的操作数

? 零操作数在指令中隐含指明了操作数所处的地方。 一、 传送类指令

1.数据传送指令(MOVE)

⑴格式:MOV DEST ,SRC (不区分大小写) ⑵功能:

可以进行字节数据传递,也可以进行字数据传送。但SRC和DEST的长度必须一致,不能一个是字节数据,而另一个是字数据。 ⑶举例:

①CPU通用寄存器之间传递

MOV CL,AL;

8bit

MOV SI,AX; 16bit

②通用寄存器与段寄存器之间传递。

MOV DS, AX;

AX中16位→DS

MOV AX, ES; ES→AX

③通用寄存器与存储单元之间

MOV AL,[BX]; DS数据段(BX)所指存储单元内容→AL MOV [DI],AX; AX中16位数据→DS:(DI) (DI)+1 MOV [2000H], CX; CX中16位→DS:(2000H) (2001H)

④段寄存器和存储单元之间

MOV DS,[2000H]; DS:[2000H] [2001H]→DS MOV [BX][SI],CS;

CS→DS:[BX]+(SI) (BX)+(SI)+1

⑤立即数到通用寄存器。

MOV SP,2000H; 2000H→SP

⑥立即数到存储单元。

MOV WORD PTR[SI], 4501H; 4501H→DS:(SI) (SI)+1 *PTR汇编操作符与WORD一起表示字操作,因为4501H类型不确定。BYTE PTR限定字节。 ⑷说明:

MOV指令数据传送方向如下图所示:

立即数 存储器 CS 段寄存器DS ES SS 通用寄存器 AX BX CX DX BP SP SI DI ①除源操作数SRC是立即数的情况外,MOV指令中DST和SRC必须要用到一个寄存器,不允许用MOV在两个存储单元之间传送数据。若需要时,可借助一通用寄存器为桥梁,即:

MOV AL,[SI] MOV [DI],AL

②不能用CS和IP作目的操作数,即这两个数的内容不能随便改变。 ③不允许在段寄存器之间直接传送数据。 ④不允许用立即数作目的操作数。

⑤不能向段寄存器送立即数,因此,对段寄存器初始化赋值时,要通过通用寄存器。

MOV AX,DATA MOV DS,AX

2.交换指令(Exchange) ⑴格式:

XCHG DST,SRC ⑵功能:

源操作数和目的操作数两者的内容相互交换。

⑶举例;

XCHG BX,[BP] [SI]

设指令执行前:(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=4154H,

SRC物理地址=2F000+0200+0046=2F246 则:

(BX)=4154,(2F246H)=6F30H

⑷说明:

①两个操作数必须有一个在寄存器中。即可以在寄存器之间或寄存器与存储器之间交换信息。

②不允许使用段寄存器。

③允许字或字节操作,且不影响标志位。 3.堆栈操作指令(PUSH/POP)

堆栈是以“后进先出”的原则暂存一批需要保护的数据或地址的一个特定存储区。

堆栈段段地址由SS提供,偏移地址由SP提供,SP始终指向栈顶。堆栈操作有压栈(PUSH)和出栈(POP)两种,均以字为单位。

? 压栈过程:例PUSH AX ① SP←SP-1 ② (SP)←AH ③ SP←SP-1 ④ (SP)←AL

? 出栈过程:例POP BX ① BL←(SP) ② SP←SP+1 ③ BH←(SP) ④ SP←SP+1 4.标志位传送指令。

对标志位寄存器进行操作有4条指令,都是零操作数。 ⑴取标志寄存器指令(Load register AH from Flag) 格式:LAHF

功能:把标志寄存器的低8位传送给AH寄存器,即把SF,ZF,AF,PF

和CF标志位分别送至AH的第7、6、4、2、0位,AH的第5、3、1位是任意的,指令对标志寄存器的各位无影响。

⑵存储标志寄存器(store register AH into Flag) 格式:SAHF

功能:把寄存器AH中的第7、6、4、2、0位的内容送至FR的SF、ZF、AF、PF、CF标志位,而FR的OF、DF、IF、TF各位不受影响。 ⑶标志位进栈(Push Flag) 格式:PUSHF

功能:将FR压入堆栈。该指令首先把堆栈指针SP减2,然后将16位标志寄存的全部内容送入SP指向的堆栈顶部字单元中。FR中各标志位本身不受影响。

进栈步骤:SP←SP-1;(SP)←(FR)H

SP←SP-1;(SP)←(FR)L

※堆栈采用“后进先出”原则。 ⑷标志位出栈(POP Flag) 格式:POPF

功能:将堆栈顶部的内容弹入标志寄存器。该指令首先根据SP找到堆栈顶部,并将堆栈顶部的一个字的内容送入FR,然后SP加2。FR中各标志位的状态,由从堆栈中弹出内容的相应位决定。

出栈步骤:(FR)L←(SP);SP←SP+1

(FR)H←(SP);SP←SP+1;

? PSHF和POPF一般用在子程序和中断处理程序的首尾,起保存和恢复

主程序标志的作用。

? FR中CF、DF、IF有专门指令进行修改,其余标志位都没有指令对它

们直接进行设置或修改。若要修改这些位,可首先用LAHF把含SF的FR低8位送入AH,对AH相应位进行修改,然后用SAHF送回FR。 ? 对TF位修改可先用PSHF将FR压入堆栈,在堆栈中设置TF,然后用

POPF返回。 5.地址传送指令。

该指令传送的是存储单元的地址,而不是它的内容。 ⑴装入有效地址(Load effective address):

①格式: LEA DST, SRC

②功能:将源操作数的有效地址(即偏移量EA)送到指定的寄存器。 ③举例:

LEA BX,0F62H [BX][SI]

若指令执行前:(BX)=0400H, (SI)=003CH 则指令执行后:(BX)=0400+003C+0F62=139EH

④说明:目的操作数一定是16位的通用寄存器;此指令对FR各位无影响。 ▲存放一个存储单元逻辑地址的地址指针需要4个byte,其中高16位(两个高字节)用来存放基址,低16位(两个低字节)用来存放偏移量。 ⑵LDS(Load DS with Pointer)指针送寄存器和DS: ①格式: LDS DST,SRC

②功能:把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。该指令常指定SI寄存器。

③举例:

LDS SI ,[10H]

若指令执行前:(DS)=C000H,(C0010H)=0180H,(C0012H)=2000H, 则指令执行后:(SI)=0180H,(DS)=2000H ⑶LES(Load ES With Pointer)指针送寄存器和ES ①格式: LES DST,SRC

②功能:把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中。该指令常指定DI。 二、 算术运算类指令。 1.加法指令(Addition)

⑴格式: ADD DEST ,SRC

⑵功能: 目的操作数和源操作数相加,它们的和存放在目的操作数中,源操作数内容不变,即,DST←(DST)+(SRC) ⑶说明:

? DST:通用寄存器,存储器 ? SRC:通用寄存器,存储器,立即数 ? FR:影响CF、DF、AF、ZF、SF、OF


8086CPU指令系统(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:科林专题(电视广告专题片) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: