1 数据传送指令【微机原理】

简介: 1 数据传送指令【微机原理】

前言

80x86指令寻址方式【微机原理】

数据传送指令

如表



1.通用数据传送指令

1)数据传送指令 MOV(MOVement)

指令格式及操作:
MOV dst,src

在MOV指令中,源操作数可以是存储器、寄存器、段寄存器和立即数;目的操作数可以是存储器、寄存器(不能是IP)、段寄存器(不能为CS)。
必须注意,不能用一条MOV指令实现一下传送:

①存储单元之间传送

②立即数至段寄存器之间的传送
③段寄存器之间的传送

需要说明一点,对于代码段寄存器CS和指令指针寄存器IP,通常无需用户利用传送指令改变其中内容。但是CS可以作为源操作数。

举例 1

  • 源程序
    mov.asm
data segment
  x db 1,2,3,4,5,6,7,8,9,10
data ends
code segment
  assume cs:code,ds:data
start:
  ;mov ds,data  ; 1 error A2056: Immediate mode illegal
  mov ax,data
  mov ds,ax
  ;mov al,278     ; 2 error A2050: Value out of range
  ;mov ax,bl      ; 3 warning A4031: Operand types must match
  lea bx,x
  ;mov [bx],[bx+2]  ;4 error A2052:Improper operand type
  mov al,[bx+2]
  mov [bx],al
  ;mov [bx],10h ;5 error A2035: Operand must have size
  mov [bx],byte ptr 10h
  mov al,10h
  mov [bx],al
  mov ah,4ch
  int 21h
code ends
  end start
  • 分析
1 不能用一条MOV指令实现:
②立即数至段寄存器之间的传送,
可以修改为下两行语句
操作之后:实现ds(=075A) <- data(=076A)
2 立即数超出上限
3 操作数类型不匹配 word <- byte
4.不能用一条MOV指令实现:
①存储单元之间传送
可以修改为下两行语句
操作之后:实现[bx](=1) <- [bx+2](=3)
5.操作数必须有类型 word / byte
可以修改为下一行语句
或者修改为后两行行语句
操作之后:实现[bx](=3) <- (al=)10

举例 2


2)堆栈操作指令

(1)压入堆栈指令 PUSH(PUSH word onto stack)

指令格式及操作:

PUSH src

(2)弹出堆栈指令 POP (POP word off stack)

指令格式及操作:

POP dst
3)数据交换指令 XCHG (eXCanGE)

指令格式及操作:

XCHG dst,src

4)字节转换指令 XLAT (transLATe)

指令格式及操作:

XLAT src_table

2.输入/输出指令

1)输入指令 IN (INput byte or word)

(1) 直接寻址的输入指令

指令格式及操作:

IN acc,port
(2)间接寻址的输入指令

指令格式及操作:

IN acc,DX

2)输出指令 OUT (OUTput byte or word)

(1) 直接寻址的输出指令

指令格式及操作:
OUT acc,port

(2)间接寻址的输出指令

指令格式及操作:

OUT acc,DX

3.目标地址传送指令

1)取有效地址指令 LEA(Load Effective Address)

指令格式及操作:

LEA reg16,mem
LEA指今将一个近地址指针写入到指定的寄存器。指令中的目的操作数必须是一个16位通用寄存器,源操作数必须是一个存储器操作数,指令的执行结果是把源操作数的有效地址,即16位偏移地址传送到目标寄存器。例如:

LEA BX, BUFFER  ;(BX)-OFFSETBUFFER
LEA AX, [BP][DI]  ;(AX)-(BP)+(DI)
LEA DX, BETA[BX][SI]; (DX)-(BX)+(SI)+BETA

注意LEA指令与MOV指令的区别,比较下面两条指令:

EA BX, BUFFER
MOV BX, BUFFER

前者将存储器变量BUFFER的偏移地址送到BX,而后者将存储器变量BUFFER的内容(两个字节)传送到BX。

当然也可以用MOV指令来得到存储器的偏移地址,例如以下两条指令的效果相同:

LEA BX, BUFFER
MOV BX, OFFSET BUFFER

其中,OFFSET BUFFER表示存储器变量BUFFER的偏移地址。

2)地址指针装入DS指令 LDS (Load pointer into DS)

指令格式及操作:

LDS reg16,mem32

2)地址指针装入ES指令 LDS (Load pointer into ES)

指令格式及操作:

LES reg16,mem32

4.标志传送指令

1)取标志指令 LAHF(Load AH from Flags)

指令格式及操作:

LAHF

2)置标志指令 SAHF(Store AH intoFlags)

指令格式及操作:

SAHF


3)标志压入堆栈指令 PUSHF(PUSH Flags onto stack)

指令格式及操作:

PUSHF

4)标志弹出堆栈指令 POPF(POP Flags off stack)

指令格式及操作:

POPF

相关文章
80x86指令寻址方式【微机原理】
80x86指令寻址方式【微机原理】
182 0
|
2月前
|
编解码 IDE 开发工具
基于ESP8266的动态机械钟
基于ESP8266的动态机械钟
44 2
|
7月前
|
存储 移动开发
80C51单片机----数据传送类指令
80C51单片机----数据传送类指令
248 2
6 处理器控制指令【微机原理】
6 处理器控制指令【微机原理】
57 0
3 位操作指令【微机原理】
3 位操作指令【微机原理】
44 0
|
存储 芯片
【微机原理笔记】第 6 章 - 输入输出和中断技术
【微机原理笔记】第 6 章 - 输入输出和中断技术
372 0
|
存储 JavaScript
微机原理与接口技术之指令
微机原理与接口技术之指令
|
C语言 Perl
西门子S7-1200的MODBUS通信如何组态,通信装载指令、主站设置指令、从站设置指令各参数的含义是什么
本篇我们来学习西门子S7-1200的MODBUS通信如何组态,通信装载指令、主站设置指令、从站设置指令各参数的含义是什么。
西门子S7-1200的MODBUS通信如何组态,通信装载指令、主站设置指令、从站设置指令各参数的含义是什么
|
C语言 Perl
西门子S7-1200的MODBUS通信装载指令、主站设置指令、从站设置指令各参数的含义是什么?
本篇我们来介绍西门子S7-1200的MODBUS通信装载指令、主站设置指令、从站设置指令各参数的含义是什么。
西门子S7-1200的MODBUS通信装载指令、主站设置指令、从站设置指令各参数的含义是什么?