16位汇编第五讲----8086指令集(1)

来源:互联网 发布:刮刮卡源码 编辑:程序博客网 时间:2024/05/16 14:36

0x00 数据传送指令

重点掌握指令:
MOV XCHG XLAT PUSH POP LEA

  • 通用数据传送指令
    1.传送指令MOV
    作用:把一个字或者直接的操作数从源地址传送到目的地址

这里写图片描述

MOV reg/mem,immMOV reg/mem/seg,regMOV reg/seg,memMOV reg/mem,seg

例子:

mov al,4                ;al<--4,字节传送mov cx,0ffh             ;cx<--00ffh,字传送mov si,200h             ;si<--0200h, 字传送mov byte ptr [si],0ah   ;byte ptr 说明是字节操作mov word ptr [si+2],0bh ;word ptr 说明是字操作mov ax,bx              ;ax<--,字传送mov ah,al               ;ah<--,字节操作mov ds,ax               ;ds<--ax,字传送mov [si],al             ;[si]<--al,字节传送mov al,[bx]mov dx,[bp]           ;dx<--ss:[bp]mov es,[si]          ;es<--ds:[si]

不存在存储器向存储器的传送指令

  • 非法传送种种
    1.两个操作数的类型不一致
    2.两个操作数不能都是存储器
    3.段寄存器的操作有一些限制

0x01 交换指令XCHG

XCHG reg,reg/mem;reg  reg/mem

寄存器与寄存器之间对换数据
寄存器与存储器之间对换数据
不能在存储器与存储器之间对换数据

0x02 换码指令XLAT

作用:将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL

XLATalds:[bx+al]

例子:

mov bx,100hmov al,03hxlat

0x03 堆栈的操作

PUSH r16/m16/seg;SP←SP-2;SS:[SP]←r16/m16/segPOP r16/m16/seg;r16/m16/seg←SS:[SP];SP←SP+2

0x04 标志寄存器传送指令

作用:标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作

低8位传送:LAHF和SAHF16位传送:PUSHF和POPF
  • LAHF

    LAHF指令将标志寄存器的低字节送寄存器AH
    SF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意

  • SAHF
    ;FLAGS的低字节←AH

    SAHF将AH寄存器内容送FLAGS的低字节
    用AH的第7/6/4/2/0位相应设置SF/ZF/AF/ PF/CF标志

  • PUSHF
    ;SP←SP-2
    ;SS:[SP]←FLAGS

    PUSHF指令将标志寄存器的内容压入堆栈,同时栈顶指针SP减2

  • POPF
    ;FLAGS←SS:[SP]
    ;SP←SP+2

    POPF指令将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2

0x05 地址传送指令

  • LEA
LEA r16,mem;r16←mem的有效地址EA

例子:

mov bx,0400hmov si,3chlea bx,[bx+si+0f62h];BX=0400h+003ch+0f62h=139EH
  • LDS r16,mem
    ;r16←mem,
    ;DS←mem+2

LDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器

  • LES r16,mem
    ;r16←mem,
    ;ES←mem+2

LES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器

0x06 输入输出指令

8086通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(Port)即I/O地址

  • 输入输出寻址方式

1.直接寻址:只用于寻址00H~FFH前256个端口,操作数i8表示端口号
2.间接寻址:可用于寻址全部64K个端口,DX寄存器的值就是端口号
对大于FFH的端口只能采用间接寻址方式

  • 输入指令IN
    作用:将外设数据传给CPU内部的AL/AX。
IN AL,i8;字节输入:AL←I/O端口(i8直接寻址)IN AL,DX;字节输入:AL←I/O端口(DX间接寻址)IN AX,i8;字输入:AX←I/O端口(i8直接寻址)IN AX,DX;字输入:AX←I/O端口(DX间接寻址)
  • 输出指令OUT
    作用:
OUT i8,AL;字节输出:I/O端口←AL(i8直接寻址)OUT DX,AL;字节输出:I/O端口←AL(DX间接寻址)OUT i8,AX;字输出:I/O端口←AX(i8直接寻址)OUT DX,AX;字输出:I/O端口←AX(DX间接寻址)
0 0
原创粉丝点击