汇编语言mov指令及基本用法
在汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的)。其特点是不破坏源地址单元的内容。
例如:
MOVAX,2000H;将16位数据2000H传送到AX寄存器
MOVAL,20H;将8位数据20H传送到AL寄存器
MOVAX,BX;将BX寄存器的16位数据传送到AX寄存器
MOVAL,[2000H];将2000H单元的内容传送到AL寄存器
需要注意的是:
(1)两个存储单元之间不能直接传送数据,即:MOV指令只允许一个操作数在存储器中。MOV[SI],[2000H];这是错误的
(2)MOV指令中立即数不能直接传送给段寄存器(CS、DS、SS、ES)和IP;段寄存器之间不能直接传送。MOVIP,2000H;这是错误的
(3)CS和IP不能作为目的操作数。MOVCS,AX;这是错误的
(4)MOV指令中立即数不能作目标操作数。MOV2000H,[SI];这是错误的
MOV指令可以在CPU内或CPU和存储器之间传送字或字节,它传送的信息可以从寄存器到寄存器,立即数到寄存器,立即数到存储单元,从存储单元到寄存器,从寄存器到存储单元,从寄存器或存储单元到除CS外的段寄存器(注意立即数不能直接送段寄存器),从段寄存器到寄存器或存储单元。
但是注意
*(1)MOV指令中的源操作数绝对不能是立即数和代码段CS寄存器;
(2)MOV指令中绝对不允许在两个存储单元之间直接传送数据;
(3)MOV指令中绝对不允许在两个段寄存器之间直接传送数据;
(4)MOV指令不会影响标志位*
例:MOVAX,DATA_SEG
MOVDS,AX
注意:段寄存器(段地址)必须通过寄存器如AX寄存器进行立即数的初始化。
例:MOVAL,‘E'
把立即数(字符E的ASC码)送到AL寄存器。
例:MOVBX,OFFSETTABLE
将TABLE的偏移地址(而不是内容)送到BX寄存器中。其中OFFSET为属性操作符,表示的是将其后的符号地址的值(不是内容)作为操作数。
例MOVAX,Y[BP][SI]
把地址为16d×(SS)十(BP)十(SI)十位移量Y的存储单元的内容送给AX寄存器
PS:下面看下汇编中的mov指令的基本使用
movS,D是将D传送到S,还是S传送到D中去呢?
在王爽的《汇编》中说:movax,18是将18传送到寄存器ax中。
但是我用gcc反汇编如下函数
inttest() { return2; }
得到的汇编代码却是
_add: LFB7: .cfi_startproc movl$2,%eax;//将eax内容复制到2中???显然不对啊 ret .cfi_endproc
总结
以上所述是小编给大家介绍的汇编语言mov指令及基本用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。