buf db 'loading ....'
lea bp,buf
会出现这样的错误:invalid combination of opcode and operands
Google一通,如下几个帖子有帮助:
1.官网的LEA解释:http://home.myfairpoint.net/fbkotler/nasmdocc.html#section-A.4.135
简单地说,nasm中简化了很多masm中的很多指令,比如说获取有效地址:mov ax,offset buffer等价于nasm中的mov ax,buffer,在nasm源程序中,几乎都是标号,标号就是地址;所以,在nasm中lea的正确语法为:lea ax,[buffer]
2. http://www.wming.com/a/articles/devlanguage/asm/2010/1229/74571.html
3.http://forum.nasm.us/index.php?topic=435.0
问题:
LEA指令不是取地址的吗?为什么最后ECX=0x30,可以用来存储立即数?
那这样为什么不直接用mov ecx,0x30呢?
这样用LEA指令有什么含义?
答案:
1. mov ecx,[eax+0x30]表示先运算eax+0x30得到一个结果,以这个结果为地址找一个ecx长度的内存数赋给ecx
2. lea ecx,[eax+0x30]表示先运算eax+0x30得到一个结果,把这个结果(mov时地址)赋给ecx ,效果为ecx=eax+0x30 (这里eax参与了运算却没有改变值)
如果没有LEA指令,那么:
mov ecx,0x30
add ecx,eax
从指令长度和执行速度来看.lea ecx,[eax+0x30]要好.
分享到:
相关推荐
MOV指令是汇编语言中最基础也是最常用的指令之一,用于将一个操作数的值移动到另一个操作数中。其基本格式为`MOV dst, src`,其中`dst`(目的地)和`src`(来源)是操作数。关键规则包括: - 目的操作数可以是通用...
Lea—护理机器人是一款集成了智能技术和人性化设计的护理机器人产品,它的主要目的是为了提高老年人或需要护理的人的生活质量,提供更安全、健康的护理解决方案。从提供的文档内容中,我们可以了解到Lea护理机器人...
接下来是`lea`(Load Effective Address)指令,它的主要功能是计算并加载一个内存地址到寄存器,而不是像其他指令那样加载实际的数据。`lea`通常用于高效地处理数组或结构体,因为它可以快速获取内存地址而无需额外...
REP指令用于重复执行一个字符串操作,REPE指令用于重复执行一个字符串操作直到相等,REPZ指令用于重复执行一个字符串操作直到零标志,REPNE指令用于重复执行一个字符串操作直到不相等,REPC指令用于重复执行一个字符...
本汇编指令大全共分为四个部分:数据传输指令、输入输出端口传送指令、目的地址传送指令和标志传送指令。 数据传输指令用于在存贮器和寄存器、寄存器和输入输出端口之间传送数据。常用的数据传输指令包括MOV、MOVSX...
数据传输指令是汇编语言中最基本的指令之一,它们用于将数据从一个位置传输到另一个位置。常见的数据传输指令包括 MOV、PUSH、POP、XCHG 等。 1. MOV 指令 MOV 指令是汇编语言中最基本的数据传输指令,它可以将...
LEA、LDS、LES 标志传送指令 LAHF、SAHF、PUSHF、POPF 查表转换指令 XLAT 算术 运算 指令 二进制加法指令 ADD、ADC 加1指令INC 二进制减法指令 SUB、SBB指令、CMP、DEC、...
MOV指令可以传送数据从一个位置到另一个位置,但除标志寄存器传送指令外,均不影响标志位。MOV指令的常见形式包括MOV存储单元,立即数、MOV寄存器,立即数、MOV存储单元,寄存器、MOV寄存器,存储单元等。 LEA指令是另...
- `MOVSB` —— 移动一个字节。 - `MOVSW` —— 移动一个字。 - `MOVSD` —— 移动一个双字。 - `CMPSB`, `CMPSW` —— 比较字符串。 - `SCASB`, `SCASW` —— 搜索字符串。 - `LODSB`, `LODSW` —— 加载字符串。 -...
例如,我们使用MOV [SI],BX指令来将十六进制数存储到RESULT的第一个位置。 本设计使用汇编语言实现了十六进制四则运算的加减乘除运算。该设计能够在DOS系统下运行,并提供了一个交互式的菜单界面供用户选择运算。 ...
MOV 指令把一个字节或字的操作数从源地址 src 传送至目的地址 dest。MOVSX 指令将带符号的数据从源地址传送至目的地址,而 MOVZX 指令将无符号的数据从源地址传送至目的地址。 PUSH 和 POP 指令用于进栈出栈操作,...
- **XLAT**:字节查表转换指令,通常用于查找一个字节长度数组中的元素,其中BX指向该数组的起始地址,AL提供索引值,最终将找到的值存储在AL中。 ##### 2. 输入输出端口传送指令 - **IN**:从指定的I/O端口读取...
本文档提供了8086汇编指令的速查手册,涵盖了数据传输指令、输入输出端口传送指令、目的地址传送指令、标志传送指令和算术运算指令等多个方面。 数据传输指令: 1. MOV指令:传送字或字节。 2. MOVSX指令:先符号...
* MOV:双操作数指令,两个操作数中必须有一个是寄存器。 * MOVSX:先符号扩展,再传送。 * MOVZX:先零扩展,再传送。 * PUSH:把字压入堆栈。 * POP:把字弹出堆栈。 * PUSHA:把 AX,CX,DX,BX,SP,BP,SI,DI 依次压...
- **LEA**:加载有效地址,将一个内存地址加载到寄存器中,但不会执行任何数据读取操作。 - **LDS/LFS/LGS/LSS**:分别用于加载不同段寄存器中的偏移地址。 #### 4. 标志位操作指令 这些指令用于控制处理器的状态...
- MOV:将数据从一个位置移动到另一个位置。 - MOVSX:符号扩展后传送数据。 - MOVZX:零扩展后传送数据。 - PUSH:将数据压入堆栈。 - POP:从堆栈中弹出数据。 - PUSHA:将16位通用寄存器压入堆栈。 - POPA:从...
9. **多线程**:通过超线程(Hyper-Threading)技术,一个物理核心可以同时处理两个线程,这需要特定的指令来管理和协调。 10. **虚拟化**:VT-x(Intel Virtualization Technology)提供硬件支持,使得在一个物理...
LEA、LDS和LES指令则用于将内存地址加载到寄存器,方便对内存进行间接访问。 算数运算指令如ADD、ADC、SUB和SBB用于执行基本的加法和减法操作,同时更新处理器的状态标志,如进位标志C、借位标志P、辅助进位标志A、...
数据传送指令用于将数据从一个位置移动到另一个位置,主要包括以下几种: 1. **MOV指令**:用于将源操作数的数据复制到目的操作数。 - 格式:`MOV DEST, SRC` - 功能:`DEST ⇦ (SRC)` - 注意事项: - 立即数不...