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

本文详细介绍了8086CPU中的数据转送指令,包括通用的MOV指令,堆栈操作的PUSH和POP指令,以及地址传送的LEA、LDS/LES指令。MOV指令允许字或字节操作,但不适用于段寄存器。PUSH/POP指令用于堆栈操作,遵循先进后出原则,而LEA指令则用于获取内存地址。LDS/LES指令用于远地址传送,将32位内存中的数据分别送入通用寄存器和段寄存器。最后提到了输入/输出数据传送指令IN和OUT,用于与外设端口交换数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

通用的数据转送指令MOV

堆栈操作指令PUSH/POP

地址传送指令LEA、LDS/LES

LDS/LES为远地址传送指令

输入/输出数据传送指令


通用的数据转送指令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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值