通用的数据转送指令MOV:
指令格式:MOV dest,src ;dest←src
功能:将源操作数的内容送至目的操作数。MOV指令对各标志位无影响。在MOV指令中,两个操作数可以是字,也可以是字节,但两者必须登长。
注意:
- 段寄存器CS只能做源操作数,不能做目的操作数
- 源操作数和目的操作数不能同时为存储单元操作数
- 立即数不能直接传送给段寄存器,且不同段寄存器之间不能进行传送
MOV AX,BX ;将寄存器BX的数据传送给AX
MOV [3000H],DX ;将DX中的数据传送到存储器3000H单元
MOV [SI],DS ;将DS内容传送到SI所指示的单元
堆栈操作指令PUSH/POP
指令格式:PUSH src ;SP←(SP)-2,(SP)+1:(SP)←(src)
POP dest ;dest←[(SP)+1:(SP)],SP←(SP)+2
功能:对堆栈的信息进行存取,不影响标志位,常用于子程序的调用和返回过程中保存程序中的某些信息
注意:
- 堆栈的使用要遵循LIFO的准则
- 堆栈中的操作数均为自操作数,不能为字节操作数
- PUSH指令可以使用CS寄存器,但POP指令不允许使用CS寄存器
- 8086/8088CPU堆栈操作可以使用除立即寻址以外的任何寻址方式
PUSH AX ;若给定(SP)=00F8H,(SS)=2500H,
;执行之后(SP)=00F6H,(250F6H)=5120H
地址传送指令LEA、LDS/LES
指令格式:LEA reg16, mem16 ;reg16←EA[mem16]
功能:将当前段内的源操作数的有效地址EA传送到目的操作数,即将一个16位的近地址写入指定的16位通用寄存器中。
可用于表格处理、存取若干连续的基本变量的处理和串操作处理中,为寄存器建立地址指针。
例如:
LEA BX,BUFFER ;将变量BUFFER的偏移地址传送到BX
LDS/LES为远地址传送指令
指令格式:LDS reg16,mem32 ;reg16←EA[mem32],DS←[mem32]+2
LES reg16,mem32 ;reg16←EA[mem32],ES←[mem32]+2
功能:将源操作数所对应的的4字节内存单元中的第一个字送入指定的通用寄存器,而第二个字则送入段寄存器DS(或ES),即将一个32位远地址的偏移地址写入到指定的通用寄存器,而该指针的段基址寄存器送至段寄存器DS(或ES)。
输入/输出数据传送指令
指令格式: IN 累加器,port ;累加器←[port]
OUT port,累加器 ;port←(累加器)
功能:输入指令IN用于从外设端口接收数据,输出指令OUT用向从外设端口发送数据
注意:
- 当端口地址小于256(即地址00H~FFH),应采用直接寻址方式
- 当端口地址等于 或大于256(即地址0100H~FFFFH)时,采用间接寻址方式,即事先将端口地址放在DX寄存器中,然后再使用IO指令。
例如:
IN AX,20H ;从端口20H输入16位数到AX
OUT 28H,AL ;将8位数从AL输出到端口28H
MOV DX,3F3F ;将16位端口地址3F3H存入DX
IN AX,DX ;从端口3F3H输入16位数到AX
OUT DX,AX ;将16位数从AX输出到端口3F3H
来源:CSDN
作者:weixin_42572273
链接:https://blog.csdn.net/weixin_42572273/article/details/103704973