8086CPU指令系统--汇编语言数据转送指令(MOV,PUSH/POP,LEA)

人盡茶涼 提交于 2019-12-25 22:50:07

通用的数据转送指令MOV:

指令格式:MOV dest,src     ;dest←src

功能:将源操作数的内容送至目的操作数。MOV指令对各标志位无影响。在MOV指令中,两个操作数可以是字,也可以是字节,但两者必须登长。

注意:

  1. 段寄存器CS只能做源操作数,不能做目的操作数
  2. 源操作数和目的操作数不能同时为存储单元操作数
  3. 立即数不能直接传送给段寄存器,且不同段寄存器之间不能进行传送
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

功能:对堆栈的信息进行存取,不影响标志位,常用于子程序的调用和返回过程中保存程序中的某些信息

注意:

  1. 堆栈的使用要遵循LIFO的准则
  2. 堆栈中的操作数均为自操作数,不能为字节操作数
  3. PUSH指令可以使用CS寄存器,但POP指令不允许使用CS寄存器
  4. 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用向从外设端口发送数据

注意:

  1. 当端口地址小于256(即地址00H~FFH),应采用直接寻址方式
  2. 当端口地址等于 或大于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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!