8086指令系统(一)数据传送指令

一、数据传送指令

1.通用传送指令

  • 格式: MOV dest, src; dest←src
  • dest 可以是寄存器,存储器,累加器(acc),段寄存器
  • src 可以是立即数,存储器,寄存器,累加器,段寄存器
  • 传送字节还是字要看寄存器是8位还是16位的。如果没有寄存器寻址,则用byte ptr或word ptr指明。如:

    MOV BYTE PTR DS:[2056H], 23

2.堆栈操作指令

  • 格式
    • PUSH src ;进栈。 SP ←SP-2, (SS:SP) ←src
    • POP dest ;出栈。 dest ←(SS:SP), SP ←SP+2
    • PUSHF ;标志寄存器(Flags)进栈
    • POPF ;标志寄存器(Flags)出栈
  • src 寄存器,存储器,段寄存器
  • 操作数必须是16位的

3.交换指令

  • 格式 XCHG op1,op2 ;交换op1和op2的内容
  • 两操作数中必须有一个在寄存器中;
  • 操作数不能为段寄存器和立即数;
  • 源和目地操作数类型要一致

4.查表指令

  • 格式 XLAT ; AL <- (BX + AL)
  • 根据表项序号查出表中对应代码的内容
  • 执行时先将表的首地址(偏移地址)送到BX中,表项序号(即偏移量)存于AL中,执行XLAT后查出的内容放在AL中

5.输入输出指令

  • 格式:
    • IN acc, PORT ; acc←端口(地址为PORT)内容,PORT取值0~255。
    • IN acc, DX ; acc←端口(地址在DX中)内容。
    • OUT PORT, acc ; 端口(地址为PORT)内容← acc
    • OUT DX, acc ; 端口(地址在DX中)内容← acc
  • 只限于用累加器AL或AX来传送信息

6.地址传送指令

  • 格式

    • LEA reg, mem ; 将指定存储器的16位偏移地址送指定寄存器
    • LDS reg, mem32 ; DS:reg←(从mem32开始的4个内存字节)
    • LES reg, mem32 ; ES:reg←(从mem32开始的4个字节)
  • 源操作数必须是一个内存操作数, reg必须是一个16位的通用寄存器

    例:
    MOV AX, 3000H
    MOV DS, AX
    MOV SI, 2000H
    LEA BX, [SI+10H] ; 执行LEA指令后, ( BX) =2010H
    LDS DI, [SI+10H] ; 执行LDS指令后,( DI) =1234H, (DS)=5678H
    LEA BX, BUFFER ;BUFFER=5FE0H
    MOV BX, OFFSET BUFFER ;(BX) =5FE0H
    在这里插入图片描述

7.标志传送指令

  • 格式
    • LAHF ! 读标志指令。 LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位
    • SAHF ! 设置标志指令。 SAHF的功能与LAHF的功能正好相反

注意:数据传送指令中, 除SAHF和POPF这两条指令外, 其余所有指令均不影响标志位

猜你喜欢

转载自blog.csdn.net/qq_45975757/article/details/108943794