数据转移是CPU一切操作的基础。比如计算乘法时必须将乘数转移到特定的寄存器中。同样计算后的乘积会保存在设计规定的寄存器中,欲保存乘积则需要将乘积从设计规定的寄存器中转移至其他位置(如,内存中)。本篇介绍最常用的数据转移指令的助记符--MOV
助记符 or 指令?
其他介绍汇编的文章中,通常会将MOV,ADD,SUB等助记符称为指令。但准确的说它们并不是真正的指令。并且一个助记符也不是只对应一个机器指令,一个助记符因操作数不同而对应不同的机器指令。因此我倾向于使用“助记符”这个词,而不是“指令”
汇编源码格式
由于汇编器担当着将汇编源代码翻译成机器指令的角色,所以汇编源码的格式由汇编器决定。也就是说针对不同的汇编器要使用不用的源码格式。不过不同编译器对源码格式的规定大同小异。接下来的一段时间我介绍的汇编源码格式适用于MASM汇编器。
MASM是微软提供的一款汇编器,在Windows上安装和使用它也非常简单。只要下载并安装最新的Visual Studio就可以了。我安装是Visual Studio 2019 community版本,该版本为免费版本只要注册一个开发者账号就可以使用了。
MASM规定一个机器指令的助记符及其操作数占一行。助记符最多有三个操作数,可以没有操作数
mnemonic [operand1][,operand2][,operand3]
通常operand1是目标操作数,即执行完后operand1的值会发生改变。operand2和operand3通常为源操作数,执行完后其值不发生改变。
MOV助记符
MOV对应一系列机器指令,这些机器指令的作用是将数据从一个位置复制(转移)到另一个位置。
MOV有两个操作数。执行完后操作数2的值会被复制给操作数1
MOV operand1,operand2
两个操作数的长度必须相同,即operand1是8bit,operand2也必须是8bit。
operand1可以是通用寄存器、段寄存器,内存地址。
operand2可以是立即数、通用寄存器、段寄存器,内存地址。
operand1和operand2不能同时是内存地址。
表中【WORD PTR】是指定内存操作的长度。前面说过同样是MOV助记符,操作数不同对应的机器指令指令不同。因此汇编器在翻译源代码时需要知道操作数的长度。操作数中有寄存器时,汇编器可以直接通过寄存器的长度推断出操作数的长度。操作数中没有寄存器时就必须使用【WORD PTR】来告诉汇编器操作数的长度。PRT是固定关键字,WORD(16bit)标明操作数长度,也可以是BYTE(8bit)、DWORD(32bit)、QWORD(64bit)等。
本页共19段,1262个字符,2905 Byte(字节)