汇编:mov指令
mov是汇编中的传送指令。mov 目的操作数,源操作数目的操作数必需是一个容器,如内存单元、寄存器源操作数可以是一个立即数,也可以是一个容器容器有内存单元、通用寄存器(AX、BX、CX、DX等)、段寄存器(CS、DS)立即数就是指令中指定的长度为16位的2的补码,如0xb800立即数只能用作源操作数,也就是它只能传给容器,如内存单元目的操作数,通用寄存器。但是,不能传给段寄存器,原因也很简单,段寄
·
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传送指令不能够将一个内存单元的内容传送到另一个内存单元。
更多推荐
已为社区贡献8条内容
所有评论(0)