汇编: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传送指令不能够将⼀个内存单元的内容传送到另⼀个内存单元。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论