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

相关文章
|
28天前
|
自然语言处理 物联网 Shell
从 50 步到 4 步:LightX2V 如何把视频生成拉进20 秒时代?
LightX2V 是一款轻量级视频生成框架,通过4步蒸馏技术,将传统需50步的扩散模型压缩至仅4步,推理速度提升20倍,生成质量依旧保持影院级水准。支持文生视频与图生视频,兼容LoRA、量化等部署方案,助力AIGC高效落地。
249 0
从 50 步到 4 步:LightX2V 如何把视频生成拉进20 秒时代?
|
1月前
|
人工智能 架构师 开发者
破局2025:定义AI数字艺术新生态的十大关键人物
当AI艺术迈入生态竞争时代,十位创作者正重塑未来。他们超越技术炫技,以生态构建、商业创新与跨界影响力开辟新疆域。从乾元AIGC的多维赋能,到林响的数字乡建,再到织梦人的互动叙事,他们定义规则,连接技术与人文,成为AI艺术时代的建筑师与引路人。
|
1月前
|
人工智能 API 开发者
企业级大模型市场,阿里通义份额第一
国际市场调研机构沙利文(Frost&Sullivan)发布了最新的《中国GenAI市场洞察:企业级⼤模型调⽤全景研究,2025》报告——2025年上半年,中国企业级市场大模型的日均总消耗量为10.2万亿Tokens,其中,阿里通义占比17.7%位列第一,成为目前中国企业选择最多的大模型。
|
存储 关系型数据库 Java
红黑树,B+树,B树的原理
红黑树(Red-Black Tree)、B树(B-Tree)和 B+树(B+ Tree)都是自平衡的树结构,用于高效地进行查找、插入和删除操作。它们在数据库和文件系统等应用中有广泛的应用。
593 2
|
消息中间件 存储 Java
RabbitMQ 在微服务架构中的高级应用
【8月更文第28天】在微服务架构中,服务之间需要通过轻量级的通信机制进行交互。其中一种流行的解决方案是使用消息队列,如 RabbitMQ,来实现异步通信和解耦。本文将探讨如何利用 RabbitMQ 作为服务间通信的核心组件,并构建高效的事件驱动架构。
552 2
|
机器学习/深度学习 算法 大数据
基于深度学习的图像识别技术:原理与实践
基于深度学习的图像识别技术:原理与实践
1040 4
|
编解码 IDE KVM
Happy coding,明基RD280U使用分享
最近尝试了明基的专业编程显示器 `RD280U`,28寸4K分辨率,3:2屏幕比例,适合编程。支持硬件级防蓝光、抗反射面板,接口丰富,支持KVM。自动亮度调节、编码模式和软件辅助功能,使其在编程体验上表现出色。如果你对专业编程显示器有需求,这无疑是一个不错的选择。
516 12
|
机器学习/深度学习 自然语言处理 算法
原作者带队,LSTM卷土重来之Vision-LSTM出世
【6月更文挑战第14天】Vision-LSTM (ViL) 研究复兴了LSTM在计算机视觉领域的应用,通过xLSTM模型解决了处理大规模图像数据的效率问题。ViL模型采用堆叠的xLSTM块,从不同方向处理图像,增强上下文理解和空间结构捕获,从而在图像分类、目标检测等任务上展现出与Transformer相当甚至更好的性能。尽管存在梯度问题、模型复杂性和潜在替代风险,ViL模型的竞争力和较低的计算复杂度使其在实践中颇具吸引力。[论文链接](https://arxiv.org/abs/2406.04303)
284 2
|
缓存 JavaScript API
Vue3— computed的实现原理
【9月更文挑战第5天】Vue3— computed的实现原理
423 10
|
人工智能 编译器 C语言
C语言:指针详解【图解 + 练习】
C语言:指针详解【图解 + 练习】