汇编:mov指令

网友投稿 1835 2022-11-11

汇编:mov指令

汇编:mov指令

mov是汇编中的传送指令。

mov 位宽 目的操作数,源操作数

在mov传送指令中的目的操作数或源操作数,只要涉及内存地址的都是逻辑地址,汇编程序中的每一条指令地址都是一个相对于代码段头部的偏移地址,这个地址叫做汇编地址。当程序加载到内存后就会有一个真实的起始地址,这个地址会给CS段寄存器。CPU执行指令就是会按CS:IP去寻找指令,此时你会发现IP偏移地址跟汇编地址是一样的,因为它们都是相对于程序起始位置的偏移。

位宽:目的操作数和源操作数的位宽要一致。否则程序会有问题。

mov byte [0x00],'2'

这里的位宽是一个字节,位宽可以是一个字节,单字(2个字节),双字(4个字节),四字(8个字节)。有些mov的传送指令没有指定位宽,因为有些位宽是显而易且一致的。如通用寄存器之间的传送,就可以不指定位宽。但要切忌要保证两个寄存器的位宽一致。

目的操作数必需是一个容器,如内存单元、寄存器。 源操作数可以是一个立即数,也可以是一个容器。

容器有内存单元、通用寄存器(AX、BX、CX、DX等)、段寄存器(CS、DS) 立即数就是指令中指定的长度为16位的2的补码,如0xb800

立即数只能用作源操作数,也就是它只能传给容器,如内存单元目的操作数,通用寄存器。但是,不能传给段寄存器,原因也很简单,段寄存可是记录记录代码段或数据段的起始地址,岂能随便修改。立即数不能作为目的操作数。段寄存器虽然不能直接用立即数来设置,但是可以通过通用寄存器或内存单元业间接设置,同时段寄存器中的内容也可以传送到这两个地方。段寄存器之间不能互相传递,即​​mov cs,ds​​是错的,且这样设置也是没有意义的,因为两个都是记录某个段的起始位置的,不可能在一块,且它们都有专门的用途。通用寄存器除了不能传递给立即数,它可向内存单元和寄存器传值。通用寄存器之间可以互相传,它还可接受段寄存器和内存单元的内容。内存单元可以接受来自立即数、通用寄存器、段寄存器的内容,但是内存单元虽然是容器,但是mov传送指令不能够将一个内存单元的内容传送到另一个内存单元。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:计算机层次结构
下一篇:Bash脚本-GNU/Linux 系统提供的变量$
相关文章

 发表评论

暂时没有评论,来抢沙发吧~