汇编语言lea指令使用方法解析

这篇文章主要介绍了汇编语言lea指令使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

lea指令变种(按大小分类):

  • leaw #2个字节
  • leal #4个字节
  • leaq #8个字节

lea的用法:

leaq a(b, c, d), %rax

首先lea指令是mov指令的变种,据说,lea指令是x86体系结构中,是一条最古老但是从某个方面来讲又是最神奇的指令。

表面上看,它做的事情非常简单,根据括号里的源操作数来计算地址,然后把地址加载到目标寄存器中。

例如:leaq a(b, c, d), %rax 先计算地址a + b + c * d,然后把最终地址载到寄存器rax中。

最逗的是leaq不引用源操作数里的寄存器,只是单纯的计算。那这样的完全可以把它当作乘法指令使用。

例如:

rbx * 2

movq $8, %rbx
leaq (, %rbx, 2), %rax

rbx * 3

movq $8, %rbx
leaq (%rbx, %rbx, 2), %rax

rbx * 3 - 1

movq $8, %rbx
leaq -1(%rbx, %rbx, 2), %rax

什么时候用lea指令:

在打算用五六条指令来完成某个乘法运算之前,看看能否通过两三条lea指令来代替它。

注意事项:

d的取值范围是1,2,4,8(64位cpu)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 汇编语言编译环境搭建过程

    1. 将masm615文件夹拷贝在C或D盘或其他(文件路径不要有中文文件夹) 2. 运行DOSBox(网上下载) 3. DOSBox软件中输入命令mount C C:\masm615(假设masm615安装在C盘),回车输入C: 4. 测试程序test1.asm DATA SEGMENT BUFFER DB "1 STYLE ONE ", 0DH, 0AH DB "2 STYLE TWO ", 0DH, 0AH DB "3 EXIT ", 0DH

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

    1 工具准备 1)下载DOSBOX 工具介绍:DOSBox 是一个 DOS 模拟程序,由于它采用的是 SDL 库,所以可以很方便的移植到其他的平台.目前,DOSBox 已经支持在 Windows.Linux.Mac OS X.BeOS .palmOS.Android .webOS.os/2等系统中运行.不少DOS下的游戏都可以直接在该平台上运行. 工具官网:http://www.dosbox.com/ 项目主页:http://sourceforge.net/projects/dosbox/ 下载

  • 详解汇编语言RCL(带进位循环左移)和RCR(带进位循环右移)指令

    汇编语言是依赖于计算机的低级的程序设计语言. RCL(带进位循环左移)指令把每一位都向左移,进位标志位复制到 LSB,而 MSB 复制到进位标志位: 如果把进位标志位当作操作数最高位的附加位,那么 RCL 就成了循环左移操作.下面的例子中,CLC 指令清除进位标志位.第一条 RCL 指令将 BL 最高位移入进位标志位,其他位都向左移一位.第二条 RCL 指令将进位标志位移入最低位,其他位都向左移一位: clc                             ; CF = 0 mov bl

  • 汇编语言 and和or逻辑运算指令的实现

    本文介绍了汇编语言 and,or逻辑运算指令的实现,分享给大家 assume cs:code code segment ; 逻辑运算 按照二进制位运算 start: mov ax,0 mov al, 00001111B and al, 11110000B ; 00000000B mov ax,0 mov al, 00001111B or al, 11110000B ; 11111111B mov ax,4c00H int 21H code ends end start 通过and,or逻辑运算指

  • 常用的汇编指令与技巧(收藏)

    1.数据传送指令:mov move r1,r2 /*r1=r2*/ move r1,#4096 /*r1=4096*/ 2.大范围的地址读取指令:ldr ldr r1,=0x123456789 /*r1=0x123456789*/ ldr r1,=label /*获取绝对地址,即label的地址*/ label: -- 3.内存访问指令(当ldr后面没有=号时为内存读取指令) 读取指令:ldr ldr r1 ,[r2,#4] /*将内存地址为r2+4的数据读取到r1中,相当于C语言中的*操作*/

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

    指令(instruction)是一种语句,它在程序汇编编译时变得可执行.汇编器将指令翻译为机器语言字节,并且在运行时由 CPU 加载和执行. 一条指令有四个组成部分: 标号(可选) 指令助记符(必需) 操作数(通常是必需的) 注释(可选) 最近在学习汇编语言,过程中遇到很多问题,对此在以后的随笔会逐渐更新,这次谈谈mov,lea指令的区别   一,关于有没有加上[]的问题 1,对于mov指令来说: 有没有[]对于变量是无所谓的,其结果都是取值 如: num dw 2 mov bx,num mov

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

    掉头发掉的那些事: 本来之前是安装好了从老师那里复制过来DOSBox的,但是在挂载和编辑和调试哪里却被网上的各种方法搞得晕头转向,怎么弄也弄不好!咦?为什么我打不开edit??咦?为什么我生成不了.obj文件??咦???我想这也是很多汇编初学者同样会遇到的困扰吧~ 在被DOSBox折磨的痛不欲生之后,找遍网络终于在我大腿师兄哪里找到了一种正确快速安装和使用DOSBox的方法,这里与各位爱学习的小伙伴们分享一下,如果还有什么问题,欢迎各位小可爱们可以提出来我们一起讨论进步!!! 第一步  下载并安

  • 汇编语言学习心得

    汇编语言 汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址.在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令.特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植. CPU的组成 CPU是由运算器(信息处理).控制器(控制器件工作).寄存器(信息存储)等器件组成,他们之间通过总线相连

  • 汇编语言AAD,DAA,DAS用法解析

    这篇文章主要介绍了汇编语言AAD,DAA,DAS用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 AAD 为下面的除法做准备 ,把AL 和 AH 两个单BCD码组成一个十进制数 1.AAD(调整除) 5.2该指令是在作除法前用于调整寄存器AH和AL之值,它是把二个寄存器中单BCD码组成一个十进制数值,其调整规则如下: AL←AH*10+AL,AH←0 受影响的标志位:PF.SF和ZF(AF.CF和OF等都是无定义) MOV AX, 050

  • 汇编语言lea指令使用方法解析

    这篇文章主要介绍了汇编语言lea指令使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 lea指令变种(按大小分类): leaw #2个字节 leal #4个字节 leaq #8个字节 lea的用法: leaq a(b, c, d), %rax 首先lea指令是mov指令的变种,据说,lea指令是x86体系结构中,是一条最古老但是从某个方面来讲又是最神奇的指令. 表面上看,它做的事情非常简单,根据括号里的源操作数来计算地址,然后把地址加

  • 汇编语言 寄存器内存访问原理解析

    这篇文章主要介绍了汇编语言 寄存器内存访问原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在内存中字的存储 这段话的主要意思是:一个字=2B=16bit,CPU中是用两个内存单元储存一个字(假如获取0地址存放的字型数据,就是获取它的高位字节0+1位和低位字节0位的数据,数据由高地址位向低地址位读) 问题: (1)0地址单元中存放的字节型数据是多少? # 20H (2)0地址字单元中存放的字型数据是多少? # 4e20H (3)2地址字单

  • 详解汇编语言各种指令的解释与用法

    [数据传输指令] 一.通用数据传送指令 1.传送指令MOV(move) 指令的汇编格式:MOV DST,SRC 指令的基本功能:(DST)<-(SRC) 将原操作数(字节或字)传送到目的地址.指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令.指令的执行对标志位的影响:不影响标志位.指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器:目的操作数DST不能是CS,也不能用立即数方式. 2.进栈指令 PUSH(push onto the sta

  • AngularJS创建自定义指令的方法详解

    本文实例讲述了AngularJS创建自定义指令的方法.分享给大家供大家参考,具体如下: 这是一篇译文,来自angular开发者说明的指令.主要面向已经熟悉angular开发基础的开发者.这篇文档解释了什么情况下需要创建自己的指令,和如何去创建指令. 什么是指令 从一个高的层面来讲,指令是angular $compile服务的说明,当特定的标签(属性,元素名,或者注释) 出现在DOM中的时候,它让编译器附加指定的行为到DOM上. 这个过程是很简单的.angular内部有很用这样自带的指令,比如说n

  • 汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作(推荐)

    汇编语言 汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址.在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令.特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植. XOR 指令在两个操作数的对应位之间进行(按位)逻辑异或(XOR)操作,并将结果存放在目标操作数中: XOR dest

  • 汇编语言存储及寄存器原理解析

    这篇文章主要介绍了汇编语言存储及寄存器原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 字的存储 一个16位寄存器可以存放一个字(16位)或者一个字节(8位),当存放一个字节的时候只需要一个内存单元(内存单元是以字节为单位的,8位),而存放一个字需要两个内存单元,这样存放一个字就需要两个连续的内存单元,这个16位的字,高位存放在高地址,低位存放在低地址. 内存地址 内存数据 0 20H 1 4EH 2 12H 3 00H 对于字来说0就是

  • AngularJS自定义指令之复制指令实现方法

    本文实例讲述了AngularJS自定义指令之复制指令实现方法.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="bootstrap.min.c

  • Struts2修改上传文件大小限制方法解析

    首先struts上传最大大小由两个地方决定.  · struts.multipart.maxSize决定整个post的form最大是多大,所以这个限制是最初的.默认大小是接近2M,在struts的default.properties中定义.  · fileuploadInterceptor中可以定义maximumSize最大文件大小. 最初定义在struts.xml中定义了没有生效,后来发现在工程中的struts.properties中已经设置过,所以后来被覆盖了,更改struts.proper

随机推荐