详解汇编语言中中括号[]作用及lea和mov指令的区别

 更新时间:2020年01月19日 11:43:31   作者:Return Home 朝闻道  
这篇文章主要介绍了汇编语言中中括号[]作用及lea和mov指令的区别,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

汇编中中括号[]作用及lea和mov指令的区别

现在总结一下:其中牵扯到lea指令,mov指令,[]

一.lea指令:

对于寄存器来说:第二个操作数是寄存器必须要加[],不然报错,这里lea就是取[寄存器]的值,如:

mov eax,2
lea ebx,[eax];执行后ebx=2
mov ebx,eax;等同于上句
lea ebx,eax;编译器报错: error A2070: invalid instruction operands

对于变量来说加不加[]都是一样的效果,都是取变量的地址,相当于指针

如:

num dword 2
lea ebx,num
lea eax,[num]; eax为num的地址,如eax=4206598,随程序不同不同,这时ebx==eax

二.mov指令:

对于变量来说

num dword 2
mov eax,2
mov ebx,num
mov ecx,[num];执行完ebx==ecx==2

对寄存器

mov ebx,eax;ebx==2

mov ecx,[eax];可能会报错,因为这里翻译成汇编是mov ecx,DS:[eax]

总的说来加不加中括号[]的区别就是:

lea对变量没有影响是取地址,对寄存器来说加[]时取值,第二操作数不加[]非法

mov对变量来说没有影响是取值,对寄存器来说是加[]时取地址,第二操作数不加[]是取值

还有一点这里顺便说下,看有的教程说mov指令不支持mov ebx,[eax+2*eax......什么乱七八糟的表达式]归根结底就是对于mov来说当第二个操作数是寄存器的时候如果加上[]就是寻址了....

ps:汇编中中括号的作用[]

在汇编中[]的作用不是单纯的c语言中指针类似,可以分为两种情况,对于变量来说[var]和var作用是一样的

但是对于寄存器来说就有区别了,[eax]是eax的地址(这里是c语言中的指针) 而不加中括号的eax就是c语言中的变量值了,理解有谬误之处望指正

.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
.data
buffer byte "%d",0
num dword 12 
.data?
lpszSize db 50 dup(?)
.CODE
START:
lea ebx,[num]
mov eax,[ebx]
mov eax,num
mov eax,[num]
invoke wsprintf,offset lpszSize,offset buffer,eax
invoke MessageBox,NULL, offset lpszSize, offset lpszSize,MB_OK
invoke ExitProcess,0
end START

总结

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

相关文章

  • 汇编基础教程段的定义应用详解

    汇编基础教程段的定义应用详解

    这篇文章主要为大家介绍了汇编基础教程段的基本定义与应用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 汇编语言中mov和lea指令的区别详解

    汇编语言中mov和lea指令的区别详解

    指令(instruction)是一种语句,它在程序汇编编译时变得可执行。本文给大家总结一下汇编语言中mov和lea指令的区别详解,感兴趣的朋友跟随小编一起看看吧
    2020-01-01
  • 最好懂的汇编语言教程,解释CPU如何执行代码

    最好懂的汇编语言教程,解释CPU如何执行代码

    这篇文章主要介绍了最好懂的汇编语言教程,解释CPU如何执行代码。计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就是低级语言,直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的运行步骤,就一定要学习汇编语言。
    2022-12-12
  • C 表达式中的汇编指令

    C 表达式中的汇编指令

    这篇文章主要介绍了C 表达式中的汇编指令,需要的朋友可以参考下
    2020-01-01
  • 一文掌握汇编语言 halt 命令

    一文掌握汇编语言 halt 命令

    汇编 halt 命令,是一条重复执行指定标号的循环命令。处理器暂停,直到出现中断或复位信号才继续,这篇文章主要介绍了汇编语言 halt 命令,需要的朋友可以参考下
    2023-01-01
  • 详解汇编语言MOV指令

    详解汇编语言MOV指令

    在汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,这篇文章主要介绍了汇编语言MOV指令,需要的朋友可以参考下
    2020-01-01
  • 利用DOSBox运行汇编的详细步骤

    利用DOSBox运行汇编的详细步骤

    本文分步骤给大家介绍了利用DOSBox运行汇编,起初是利用VS2017进行配置,但后面运行好像有些问题,就想到用DOSBox,本文分步骤给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2022-03-03
  • 8086汇编开发环境搭建和Debug模式介绍(图文详解)

    8086汇编开发环境搭建和Debug模式介绍(图文详解)

    这篇文章主要介绍了8086汇编开发环境搭建和Debug模式介绍,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 用汇编语言实现从1加到100的方法(1+2+...+100)

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

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

    汇编语言 masm5与debug命令使用方法小结

    本文总结了汇编程序的基本框架及规范、masm5工具的基本使用方法、debug命令的基本使用方法
    2023-08-08

最新评论