举例说明常用的传输类汇编指令的使用
1、MOV指令
本指令将一个源操作数送到目的操作数中,即OPRD1<–OPRD2。
举例:
MOV 寄存器,数据 比如:MOV AX,8
MOV 寄存器,寄存器 比如:MOV AX,BX
MOV 寄存器,内存单元 比如:MOV AX,[0]
MOV 内存单元,寄存器 比如: MOV [0],AX
MOV 段寄存器,寄存器 比如: MOV DS,AX
图示举例:(汇编金手指)
2、PUSH指令
实现压入操作的指令是PUSH指令
单个汇编语言举例:
PUSH AX
PUSH 寄存器:将寄存器中的数据放入栈中
PUSH DX
PUSH 段寄存器:将一个段寄存器中的数据入栈
PUSH [BX+ 0068H]
PUSH 内存单元:将一个内存单元处的字入栈
汇编程序指令:
MOV AX,1000H
MOV SS,ax
MOV SP,2
MOV AX,6866H
push ax
3、POP指令
实现弹出操作的指令是POP指令
单个汇编语言的举例:
POP AX
POP 寄存器:将栈中的数据放入寄存其中
POP DX
POP 段寄存器:出栈,用一个段寄存器接受出栈的数据
POP [2] pop [IDATA]
POP 内存空间:出栈,用一个内存字单元接受出栈的数据
汇编程序的举例:
MOV AX,1000H
MOV SS,AX
MOV SP,2
MOV AX,6866H
PUSH AX
4、XCHG指令
将两个操作数相互交换位置,该指令把源操作数OPRD2与目的操数OPRD1交换
单个汇编语言举例:
XCHG AX,BX
将寄存器ax中的内容和bx中的内容进行交换
XCHG CL,CH
将CX寄存器中的高位内容和低位内容进行交换
XCHG AX,[SI]
将内存地址偏移量为SI寄存器中内容的数据与AX寄存器中的内容进行交换
XCHG BX,[BP+SI]
将内存地址偏移量为SI寄存器中数据加上BP寄存器中数据的内存单元中存放的地址与ax寄存器中的内容进行交换
汇编金手指举例:
5、LEA指令
将源操作数给出的有效地址传送到指定的的寄存器中
格式: LEA OPRD1,OPRD2
OPRD1 为目的操作数,可为任意一个16位的通用寄存器。
OPRD2 为源操作数,可为变量名、标号或地址表达式。
单个汇编语言举例:
LEA BX,IDATA
这个汇编指令表示的是将变量IDATA的地址送至BX
LEA DX,[BX+SI]
这个汇编指令表示的是将偏移地址为[BX+SI]的内存的地址送给寄存器DX
汇编金手指举例:
6、LDS指令或者LES指令
从存储器取出32位地址的指令
格式: LDS OPRD1,OPRD2
LES OPRD1,OPRD2
OPRD1 为任意一个16位的寄存器。
OPRD2 为32位的存储器地址。
单个汇编语言举例:
LDS DI,[BX]
LES DI,[BX]
指令的功能是把BX所指的32位地址指针的段地址送入DS,偏移地址送入DI
这两个指令的功能是一致的
7、IN指令
输入指令
单个汇编指令举例:
IN AL,86H (AL)<–(n)
将86H端口地址的内容送到AL中
IN AX,68H (AX)<–(n+1),(n)
将端口地址为68H和69H的内容送到AX中
IN AL,DX (AL)<–[(DX)]
由DX内容作端口地址的内容送至AL中
IN AX,DX (AX)<–[(DX)+1],[(DX)]
由DX以及DX+1内容作端口地址的内容送至AX中
8、OUT指令
输出指令
单个汇编指令举例:
OUT 36H,BX
表示的是37H,36H<–(BX)
OUT DX,AL
表示的是[(DX)]<–(AL)
OUT DX,AX
表示的是[(DX)+1],[(DX)]<–(AX)
9、LAHF、SAHF、PUSHF、POPF指令
LAHF指令
取FLAG标志寄存器低8位至AH寄存器
SAHF指令
将AH存至FLAG低8位
PUSHF指令
本指令可以把标志寄存器的内容保存到堆栈中去
POP指令
本指令的功能与PUSHF相反