32位汇编语言中lea指令!

据说lea指令是取得源操作数的有效地址,这个有效地址是什么意思?是运行时内存编号吗?假设有个变量data DWORD 100H 那么执行 lea eax,data在编译时 转换成什么语句?如何做到的呀?

由编译器计算出data变量的地址,然后替换掉指令中出现data变量标识。
lea指令的源操作数就是一个变量标号,所以就是将变量的地址取出来,放到目的操作数中
=====================================================================
比如:
.data
hInstance dd ?
.code
lea eax,hInstance
======================================================================
编译后:
0040102D |. 8D05 00304000 lea eax, dword ptr [403000]
意思就是将[]中的值放入eax中,[]中出现的就是hInstance的内存地址追问

我想问就是这个403000 在编译时期就能确定的吗?既然是偏移值为何这么大?

追答

标号地址会经过转换直接放在指令码中,这个是由编译器在编译的时候算出来。

追问

嗯我知道是算出来的,但是为何这个值如此大?我的程序毕竟只有几行大小。

追答

操作系统将一个exe文件复制到内存,都会给一个基地址,又叫模块句柄,一般都是400000,这是操作系统分配的,和8086不一样,这里面的内容很多,你看一下汇编的保护模式编程和windows程序设计就明白了

追问

哦,原来是有默认行为的啊,谢谢你的解答。但是这样的话,难道每个asm程序在编译时都分配了0x0040 0000基地址?这样的话操作系统怎么能同时运行两个ASM程序哇。。。

追答

80386还要对存放在存储器中的代码及数据的共享和保护提供支持。任务甲和任务乙并存,任务甲和任务乙必须隔离,以免相互影响。但它们又可能要共享部分代码和数据。所以,80386既要支持任务隔离,又要支持可共享代码和数据的共享,还要支持特权保护。
==========================================================
你看了保护模式就明白了,你可以留邮箱,资料我给你发过去

追问

实在万分感谢,让我明白不少东西 515930957@qq.com 含泪跪求资料,望不吝赐教!

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-04
LEA指令的功能是取偏移地址,例如LEA AX,[1000H],作用是将源操作数[1000H]的偏移地址1000H送至AX;
MOV指令的功能是传送数据,例如MOV AX,[1000H],作用是将1000H作为偏移地址,寻址找到内存单元,将该内存单元中的数据送至AX。
第2个回答  2012-03-09
我觉得说的不对。offset是由编译器计算的。而lea是程序运行时计算的。

汇编语言lea是什么意思
LEA就是目标地址传送指令: 将一个近地址指针写入到指定的寄存器。指令的功能是将源操作数、即存储单元的有效地址传送到目的操作数。LEA有两个操作数,分别为:1、左边是目的操作数,表示操作结果保存在此,该指令目的操作数只能是8个通用寄存器之一;2、右边的是源操作数,该指令的源操作数只能是一个...

32位汇编语言中lea指令!
编译后:0040102D |. 8D05 00304000 lea eax, dword ptr [403000]意思就是将[]中的值放入eax中,[]中出现的就是hInstance的内存地址

汇编语言lea是什么意思
汇编语言中的LEA,全称是Load Effective Address,即有效地址加载指令。它的核心功能是将存储单元的地址信息从源操作数传递到目的操作数,实质上是实现数据地址的转移,而非数据本身。LEA指令有两个关键组成部分:首先,目标操作数,即指令执行后结果存放的位置,这通常指的是CPU的8个通用寄存器之一,因为LEA...

汇编语言lea是什么意思?
汇编语言中的LEA指令的含义是加载有效地址。接下来详细解释LEA指令的相关内容:汇编语言是一种低级编程语言,用于直接与计算机硬件交互。在汇编语言中,LEA是一个重要的指令。LEA指令的基本作用 LEA指令的主要功能是将有效地址加载到指定的寄存器中。在计算机系统中,内存地址是非常重要的概念,它用于定位存储...

lea是什么意思,汇编里的
LEA是一条用于加载有效地址的指令。在汇编语言中,有效地址通常指的是操作数的内存地址或者偏移量。这条指令的功能是将一个有效地址值传送到指定的寄存器中。例如,它可以把一个内存变量的地址值加载到某个寄存器里。这条指令常常用于设置其他指令的间接操作数。所谓的间接操作数就是该操作数的值是存储在...

汇编语言lea是什么意思
在汇编语言中,LEA是一种指令,用于加载有效地址。详细解释:1. 基本含义:LEA指令用于将一个有效地址加载到指定的寄存器中。在汇编程序中,间接寻址是一种常用的内存访问方式,它允许程序通过寄存器间接访问内存中的值。LEA指令允许程序员快速计算和操作这些间接地址。2. 指令格式:LEA指令的标准格式是 `...

lea指令什么意思
LEA指令的意思 LEA指令是一种汇编语言指令,其全称为“Load Effective Address”。详细解释如下:1. 基本定义 LEA指令是一种用于加载有效地址的指令。在汇编语言中,它用于将一个有效地址加载到寄存器中。有效地址可以是一个内存地址或者是一个偏移量。这条指令在计算机执行时,会将操作数所指向的内存地址...

汇编语言中LEA指令和MOV指令的区别是什么?
MOV指令的功能是传送数据,例如MOVAX,[1000H],作用是将1000H作为偏移地址,寻址找到内存单元,将该内存单元中的数据送至AX;LEA指令的功能是取偏移地址,例如LEAAX,[1000H],作用是将源操作数[1000H]的偏移地址1000H送至AX。理解时,可直接将[]去掉,等同于MOVAX,1000H。再如:LEABX,[AX],...

汇编lea指令有啥用
LEA指令的具体功能如下:一、LEA指令的基本含义 LEA指令是一种将有效地址值加载到寄存器中的指令。在计算机汇编语言中,LEA指令用于将操作数的有效地址直接传送到目标寄存器中。有效地址通常是一个操作数的偏移量或者间接地址,例如在数组操作或者复杂内存访问中常见。通过LEA指令,程序员可以直接得到所需数据...

汇编lea指令有啥用
汇编语言中的lea指令并非如一些人所认为的多余,它在特定情况下发挥着不可或缺的作用。当源操作数较为简单,比如直接指向存储器地址时,mov指令确实能满足需求,如"lea esi, [Buffer]",可以被"mov esi, offset Buffer"所替代。然而,当源操作数涉及到复杂的地址计算时,mov指令就显得力不从心,这时...

相似回答