数据传送指令

数据传送指令数据传送指令 数据传送指令

大家好,欢迎来到IT知识分享网。

文章目录

  • MOV
  • XCHG
  • PUSH和POP
  • IN和OUT
  • XLAT
  • LEA LDS LES
    • LEA
    • LDS
    • LES
  • LAHF SAHF
  • PUSHF POPF
  • CLC STC CMC CLD STD CLI STI
  • 总结

MOV

MOV dst, src ; dst <-- src 
  • 可以进行8位或16位数据的传送
  • 源操作数可为立即数、寄存器、存储器操作数
  • 目的操作数不可为立即数,CS、IP寄存器
  • 两操作数必有一个寄存器,不允许mem←mem,mem←#im
  • 两操作数不能同为段寄存器,不允许seg←seg
  • 不允许seg←立即数,不能将立即数赋到段寄存器中
  • 源操作数与目的操作数类型要一致(位数相同)
    在这里插入图片描述

XCHG

两个寄存器寄存器与存储单元之间(字或字节)的交换

XCHG OPR1, OPR2 ; OPR1 <--> OPR2 
  • 两操作数中必须有一个在寄存器中,不能同时为存储器操作数
  • 操作数不能为段寄存器和立即数
  • 源和目地操作数类型要一致(位数相同)。

PUSH和POP

具体堆栈操作请移步

  • PUSH指令
    PUSH r(寄存器)
    PUSH mem(存储单元)
    PUSH seg(段寄存器)


  • POP指令
    POP r(寄存器)
    POP mem(存储单元)
    POP seg(段寄存器)


  • 堆栈操作总是按字进行,不允许对字节操作
  • 不能从栈顶弹出一个字给CS寄存器,但是可以给IP寄存器
  • 堆栈指针为SS:SP,SP永远指向栈顶
  • SP自动进行增减量(-2,+2)
  • 有一个操作数是隐含的,该操作数就是(SP)指示的栈顶存储单元
  • 进行堆栈操作时,遵循“先进后出”原则

IN和OUT

XLAT

查表转换指令,换码指令

假设以BX为偏移地址的内存中有一个表,那么AL就是表的索引,XLAT根据表的索引替换AL的值

在这里插入图片描述
这个指令没有参数,或者参数是BX的表地址

XLAT XLAT TABLE 

LEA LDS LES

  • 有效地址送寄存器:LEA(Load effect address)
  • 指针送寄存器和DS的指令:LDS
  • 指针送寄存器和ES的指令:LES
  • 要求源操作数必须是一个存储器操作数,寻址方式可以是24中任何一种
  • 目的操作数r必须是一个16位的通用寄存器,而不能使用段寄存器

LEA

将存储器操作数的有效地址(EA)送至指定的16位通用寄存器

LEA r,src; r = src的EA 

就是将src的EA算出来,赋给r
r = &src

LDS

LDS r, src ; r = src地址中的值 DS= (src+2)地址中的值 

r = *&src
DS = *(&src+2)
一次改变两个寄存器的值(SI和DS)低地址的2字节分给SI,高地址的两字节分给DS
在这里插入图片描述


LES

LES,同上,但DS改为ES

LAHF SAHF

PUSHF POPF

  • 标志寄存器的入栈指令:PUSHF
  • 标志寄存器的出栈指令:POPF

CLC STC CMC CLD STD CLI STI

CFDFIF标志位进行复位和置位操作。

CLC ; CF = 0 STC ; CF = 1 CMC ; CF =~CF CLD ; DF = 0 STD ; DF = 1 CLI ; IF = 0 STI ; IF = 1 

总结

  • 除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。
  • 除XCHG之外,都是单向的数据传输

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136800.html

(0)
上一篇 2025-06-25 11:00
下一篇 2025-06-25 11:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信