大家好,欢迎来到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
对CF
、DF
、IF
标志位进行复位和置位操作。
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