静玲 發表於 2020-1-19 11:50:20

详解汇编语言MOV指令

<p>在汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的)。</p>
<p><span style="color: #ff0000"><strong>32位指令集<br />
</strong></span></p>
<p><span style="color: #ff0000"><strong>1、一般传送指令 </strong></span></p>
<p>MOV指令:</p>
<p>格式:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV目的--&gt;除CS、IP以外的寄存器或存储器</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 源--&gt;寄存器、存储器、立即数</p>
<p>ex :</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp; ECX ,EDX ;&nbsp;&nbsp; EDX-&gt;ECX</p>
<p>&nbsp;ECX =00000034H</p>
<p>&nbsp;&nbsp;EDX =00000052H</p>
<p>指令执行结果: ECX = 00000052H, EDX不变,标志寄存器也不变。</p>
<p>MOVSX、MOVZX指令:</p>
<p>格式:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV目的--&gt;寄存器或存储器</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 源--&gt;寄存器、存储器</p>
<p>MOVSX:按符号扩展传送数据指令,将源操作数的内容---传送--&gt;目标操作数。目的操作数左边空缺的为用源操作数的符号进行填充。可对有符号的数进行扩展,以便运算。<br />
</p>
<p>MOVZX:按零扩展传送数据指令,将源操作数的内容---传送--&gt;目标操作数。目的操作数左边空缺用0填充。可对无符号的数进行扩展,以便运算。</p>
<p>ex:</p>
<p>&nbsp;MOV&nbsp;&nbsp;&nbsp; BL, 80H; 80H-&gt;BL</p>
<p>&nbsp;MOVSX AX,&nbsp;&nbsp; BL&nbsp; ; 80H用符号扩展为FF0H-&gt;AX</p>
<p>&nbsp;MOVZX AX,&nbsp;&nbsp; BL&nbsp; ; 80H用零扩展为0080H-&gt;AX&nbsp;</p>
<p>&nbsp;标志寄存器状态不变。</p>
<p>XCHG指令 :</p>
<p>格式:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XCHG目的、源--&gt;两个操作数,其中一个操作数可为通用寄存器,另一个操作数可为通用寄存器或存储器,两个操作数的长度必须一致。</p>
<p>ex:</p>
<p>&nbsp;XCHG&nbsp;BH,BL&nbsp;&nbsp;;BH和BL进行字节交换</p>
<p>&nbsp;XCHG&nbsp;SI, DI&nbsp;&nbsp;;SI和DI进行字节交换</p>
<p>&nbsp;XCHG&nbsp;EBX,ECX&nbsp;&nbsp;;EBX和ECX进行双字节交换&nbsp;</p>
<p>&nbsp;XCHG&nbsp;AL,MEM_BYTE&nbsp; ;寄存器和内存进行字节交换</p>
<p>&nbsp;XCHG&nbsp;MEM_WORD, AX&nbsp; ;寄存器和内存进行字节交换&nbsp;</p>
<p>&nbsp;XCHG&nbsp;ESI,MEM_DWORD ;寄存器和内存进行双字节交换</p>
<p>&nbsp;标志寄存器状态不变。<br />
</p>
<p><span style="color: #ff0000"><strong>&nbsp;下面看下小编遇到的问题:汇编语言MOV指令</strong></span></p>
<p>&nbsp;MOV AX,BX<br />
MOV AH,BX<br />
MOV DX,AL</p>
<p>第二句都错误,,那么第三句呢(8位数据放到16位REG里),,</p>
<p>若正确,放高8位还是低8位呢??? 高8位都补0???</p>
<p><strong>解决:</strong></p>
<p>在汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的)。其特点是不破坏源地址单元的内容。&nbsp;</p>
<p>例如:&nbsp;</p>
<p>1、MOVAX,2000H;将16位数据2000H传送到AX寄存器。</p>
<p>2、MOVAL,20H;将8位数据20H传送到AL寄存器。</p>
<p>3、MOVAX,BX;将BX寄存器的16位数据传送到AX寄存器。</p>
<p>4、MOVAL,[2000H];将2000H单元的内容传送到AL寄存器。</p>
<p style="text-align: center"><img alt="" src="https://img.jbzj.com/file_images/article/202001/2020119114904385.png?2020019114922" /></p>
<p><strong>扩展资料:</strong></p>
<p>汇编语言特点:</p>
<p>1、机器相关性</p>
<p>这是一种面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。因为是机器指令的符号化表示,故不同的机器就有不同的汇编语言。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。</p>
<p>2、高速度和高效率</p>
<p>汇编语言保持了机器语言的优点,具有直接和简捷的特点,可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等,且占用内存少,执行速度快,是高效的程序设计语言。</p>
<p><span style="color: #ff0000"><strong>总结</strong></span></p>
<p>以上所述是小编给大家介绍的汇编语言MOV指令,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对琼殿技术社区网站的支持!<br />
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>常用的汇编指令与技巧(收藏)</li><li>汇编语言中mov和lea指令的区别详解</li><li>汇编语言lea指令使用方法解析</li><li>详解汇编语言 dup伪指令</li><li>汇编语言中cmp指令用法笔记与总结</li><li>汇编语言mov指令及基本用法</li><li>汇编语言乘指令 MUL、IMUL的具体使用</li><li>详解汇编语言各种指令的解释与用法</li><li>汇编语言指令大全 X86和X87汇编指令大全(带注释)</li><li>汇编语言中move指令的使用</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: 详解汇编语言MOV指令