汇编语言mov指令及基本用法

 更新时间:2020年01月19日 11:56:15   转载 作者:weixin_42757111  
在汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的)。这篇文章给大家介绍汇编语言mov指令及基本用法,感兴趣的朋友一起看看吧

在汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的)。其特点是不破坏源地址单元的内容。

例如:

MOV AX,2000H;将16位数据2000H传送到AX寄存器
MOV AL,20H;将8位数据20H传送到AL寄存器
MOV AX,BX;将BX寄存器的16位数据传送到AX寄存器
MOV AL,[2000H];将2000H单元的内容传送到AL寄存器

需要注意的是:

(1)两个存储单元之间不能直接传送数据,即:MOV指令只允许一个操作数在存储器中。MOV [SI],[2000H];这是错误的
(2)MOV指令中立即数不能直接传送给段寄存器(CS、DS、SS、ES)和IP;段寄存器之间不能直接传送。MOV IP,2000 H ;这是错误的
(3)CS和IP不能作为目的操作数。MOV CS,AX ;这是错误的
(4)MOV指令中立即数不能作目标操作数。MOV 2000H,[SI] ;这是错误的

MOV指令可以在CPU内或CPU和存储器之间传送字或字节,它传送的信息可以从寄存器到寄存器,立即数到寄存器,立即数到存储单元,从存储单元到寄存器,从寄存器到存储单元,从寄存器或存储单元到除CS外的段寄存器(注意立即数不能直接送段寄存器),从段寄存器到寄存器或存储单元。

但是注意

*(1) MOV指令中的源操作数绝对不能是立即数和代码段CS寄存器;
(2) MOV指令中绝对不允许在两个存储单元之间直接传送数据;
(3) MOV指令中绝对不允许在两个段寄存器之间直接传送数据;
(4) MOV指令不会影响标志位*

例:MOV AX,DATA_SEG

MOV DS,AX

注意:段寄存器(段地址)必须通过寄存器如AX寄存器进行立即数的初始化。

例: MOV AL,‘E'

把立即数(字符E的ASC码)送到AL寄存器。
例: MOV BX,OFFSET TABLE
将TABLE的偏移地址(而不是内容)送到BX寄存器中。其中OFFSET为属性操作符,表示的是将其后的符号地址的值(不是内容)作为操作数。
例 MOV AX,Y[BP][SI]
把地址为16d×(SS)十(BP)十(SI)十位移量Y的存储单元的内容送给AX寄存器

PS:下面看下汇编中的mov指令的基本使用

mov S ,D 是将D传送到S ,还是S传送到D中去呢?

在王爽的《汇编》中说: mov ax , 18 是将 18传送到寄存器ax中。

但是我用gcc反汇编如下函数

 int test()
{
  return 2;
}

得到的汇编代码却是

 _add:
LFB7:
  .cfi_startproc
  movl  $2, %eax  ;//将eax内容复制到2中???显然不对啊
  ret
  .cfi_endproc

总结

以上所述是小编给大家介绍的汇编语言mov指令及基本用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • 汇编语言指令mov、add、sub、jmp详解

    汇编语言指令mov、add、sub、jmp详解

    这篇文章主要介绍了汇编语言指令mov、add、sub、jmp详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 详解如何在Mac上用汇编语言写HelloWorld

    详解如何在Mac上用汇编语言写HelloWorld

    这篇文章主要介绍了详解如何在Mac上用汇编语言写HelloWorld,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • C 表达式中的汇编指令

    C 表达式中的汇编指令

    这篇文章主要介绍了C 表达式中的汇编指令,需要的朋友可以参考下
    2020-01-01
  • 用汇编语言实现从1加到100的方法(1+2+...+100)

    用汇编语言实现从1加到100的方法(1+2+...+100)

    这篇文章主要介绍了用汇编语言实现从1加到100的方法(1+2+...+100),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Windows10下利用DOSBOX和MASM32搭建汇编语言开发环境

    Windows10下利用DOSBOX和MASM32搭建汇编语言开发环境

    这篇文章主要介绍了Windows10下利用DOSBOX和MASM32搭建汇编语言开发环境,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 汇编语言有关在屏幕区显示字符的四种方法(推荐)

    汇编语言有关在屏幕区显示字符的四种方法(推荐)

    这篇文章主要介绍了汇编语言有关在屏幕区显示字符的四种方法(推荐),每种方法给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 汇编环境搭建之如何快速安装和配置DOSBox

    汇编环境搭建之如何快速安装和配置DOSBox

    这篇文章主要介绍了汇编环境搭建之如何快速安装和配置DOSBox,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 汇编语言中的segment

    汇编语言中的segment

    segment是段的意思,是段定义伪指令,一个正常的应用程序被由若干个 segment组成,接下来通过本文给大家介绍汇编语言中的segment,需要的朋友可以参考下
    2020-01-01
  • 汇编语言:比较指令、跳转指令、JCC的使用

    汇编语言:比较指令、跳转指令、JCC的使用

    这篇文章主要介绍了汇编语言:比较指令、跳转指令、JCC的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 使用汇编语言实现if else 循环函数调用的具体方法

    使用汇编语言实现if else 循环函数调用的具体方法

    这篇文章主要介绍了使用汇编语言实现if else 循环函数调用的具体方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01

最新评论