什么是MOV指令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是MOV指令相关的知识,希望对你有一定的参考价值。

什么是MOV指令

MOV即QuickTime影片格式,它是Apple公司开发的一种音频、视频文件格式,用于存储常用数字媒体类型。当选择QuickTime(*.mov)作为“保存类型”时,动画将保存为mov文件。

MOV格式文件是以轨道(track)的形式组织起来的。一个MOV格式文件结构中可以包含很多轨道。轨道的数目限制有一些经验值,这些值会因为计算机的能力越来越强大而发生改变,然而MOV格式文件本身并没有预定义的轨道数目限制。

扩展资料:

QuickTime因具有跨平台、存储空间要求小等技术特点,而采用了有损压缩方式的MOV格式文件,画面效果较AVI格式要稍微好一些。到目前为止,它共有 4 个版本,其中以 4.0 版本的压缩率最好。

这种编码支持16位图像深度的帧内压缩和帧间压缩,帧率每秒10帧以上。这种格式有些非编软件也可以对它实行处理,其中包括ADOBE公司的专业级多媒体视频处理软件AFTEREFFECTS和PREMIERE。

参考资料来源:百度百科-MOV

参考技术A MOV是汇编指令。
MOV 传送字或字节.
MOVSX 先符号扩展,再传送.
MOVZX 先零扩展,再传送.
PUSH 把字压入堆栈.
POP 把字弹出堆栈.
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
BSWAP 交换32位寄存器里字节的顺序
XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)
CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )
XADD 先交换再累加.( 结果在第一个操作数里 )
XLAT 字节查表转换.
参考技术B 虽然这个问题有点喜剧,但我还是给你最详细的解答:
解:mov指令是汇编里使用最频繁的指令,它相当于高级语言中的赋值语句。
指令格式如下: mov reg/mem,reg/mem/Imm
该指令的功能是:把源操作数(第二操作数)的值传给目的操作数(第一操作数)。指令执行后,目的操作数的值被改变,而源操作数的值不变。本回答被提问者和网友采纳
参考技术C 数据传送指令

为啥 nasm 在寄存器之间组装 MOV 指令时使用 0x89?

【中文标题】为啥 nasm 在寄存器之间组装 MOV 指令时使用 0x89?【英文标题】:Why does nasm use 0x89 when it assembles a MOV instruction between registers?为什么 nasm 在寄存器之间组装 MOV 指令时使用 0x89? 【发布时间】:2013-10-19 15:20:07 【问题描述】:

为什么 NASM 在两个寄存器之间组装 MOV 指令时使用 0x89 操作码 (137)?

这是一个使用 NASM 组装的代码示例:

55      push ebp
89E5    mov ebp, esp
83EC04  sub esp, byte +0x4
31C0    xor eax, eax
C9      leave
C3      ret

我想要这样的东西:

55      push ebp
8BEC    mov ebp, esp
83EC04  sub esp, byte +0x4
33C0    xor eax, eax
C9      leave
C3      ret

我想要 0x8B 的原因是:如果你查看 MOV 指令的二进制表示,它在 NASM 中看起来像这样:

Opcode     Mod   Reg   R/M
10001001   11    100   101 (89 E5)

其中令人困惑的部分是 reg 操作数是第二个。

NASM 语法是这样的:0x89 11 source_reg destination_reg MOV指令为mov destination_reg, source_reg

【问题讨论】:

为什么不呢? 8B 也好不到哪里去。 0x89有什么问题吗? 0x89mov r/m32,r32mov ebp, esp 适合这种格式,那为什么 NASM 会使用其他一些操作码? 【参考方案1】:

两个操作码相同。这就是 x86 的冗余。汇编器可以选择任何它喜欢的东西

x86 架构的典型指令有两个操作码。其中第一个有一个寄存器作为第一个操作数,一个寄存器或内存位置作为第二个操作数(在操作码参考中缩写为"reg, reg/mem32",在操作码表中缩写为"Gv, Ev")。第二个操作码的操作数是相反的(缩写为"reg/mem32, reg""Ev, Gv")。这是有道理的:处理器必须知道它是复制到内存还是从内存中复制。但是当两个操作数都是寄存器时,编码就变得多余了:

                  ; mod reg r/m
03C3 add eax, ebx ;  11 000 011
01D8 add eax, ebx ;  11 011 000

像这样的 reg/reg 样式远不止这些。见here

不同的汇编器发出不同的操作码,所以这种技术可以用于identify the assembler

一些汇编器允许您选择编码。例如,如果您将.s 附加到末尾,GAS 可以发出其他编码

10 de   adcb   %bl,%dh
12 f3   adcb.s %bl,%dh

What is the ".s" suffix in x86 instructions?

【讨论】:

以上是关于什么是MOV指令的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言MOV指令

无后缀的汇编mov指令

请教各位高手,MOV SP,OFFSET TOP与LEA SP,TOP这两条指令都是一个意思,其中MOV指令为啥要加OFFSET?

MOV AX,ES:[BX] 指令中,源操作数字段的寻址方式是啥?

mov指令用法

x86 简单 mov 指令