HNU计算机系统·汇编进阶

知识回顾:

        寻址:EA = I_{mm}(R_{1},R_{2},S) = I_{mm} + R_{1} + R_{2}*S

        其中,比例因子S,只能是1,2,4,8中的数,这是因为在LEA的独立电路中使用移位寄存器


上节课的补充:

mov部分:

mov value , %eax 
mov $value , %eax

        第一条指令,把value的值赋值给寄存器eax

        第二条指令,把立即数(value的地址)赋值给寄存器eax

如下图所示      


lea指令

        lea(load effective address),LEA指令的功能是取偏移地址, 指令形式是从存储器读数据到寄存器, 效果是将存储器的有效地址写入到目的操作数。只是取地址而不是取地址中的数据

        lea 指令是mov 指令的变形,lea 指令形式看上去是从存储器读数据到寄存器,但实际并没有引用存储器,而是将有效地址写入目的操作数(必须是寄存器)

类似于C语言中的&

leal S,D 表示 D <- &S

有与其等效的mov指令

mov $S , D

作用:

  • 地址计算/地址传送
  • 执行简单的算术操作

地址计算/地址传送练习

        若寄存器%edx 的值为x,那么

leal 7(%edx,%edx,4),%eax

        表示:寄存器%eax的值为5x+7

leal 8(%edi), %eax

        表示:%eax+8 -> %eax

movl 8(%edi), %eax

         表示:%edi+8  -> %eax

演示:1012.s

执行简单的算术操作

        对于下面的程序

int scale(int x,int y,int z)
{int t=8*x+2*y+5*z;return t;
}

         反汇编代码如下,令%esi=x,%edi=y,%edx=z,%eax=t

scaleleal (%edx,%edi,4) %eaxleal (%eax,%edi,2) %eaxleal (%eax,%esi,8) %eaxret

注意:

        比例因子只能是1,2,4,8,在LEA的独立电路中用移位寄存器可以简单高效地实现此类计算!


新知识

函数的栈帧

        每一个函数或过程在执行时,都需要在内存中分配一个空间来保存运行时数据,这个空间由于是采用栈的方式进行操作,所以也称为栈帧

        栈是向下增长的。上面大,下面小。存取地址从大向小的存。如图所示

       栈底的位置存储在寄存器%ebp中,栈顶的位置存储在寄存器%esp中

        esp指向的位置存储的什么不知道,因为不知道之前栈中存储的是什么数据,但是我们可以通过命令查看当中的数据

        栈是向“下”增长的,或者说是向地址0x0处增加的,因此%esp中的值小于或等于%ebp中的值。

        如图所示

注意: 

        栈帧是内存中一段连续的内存空间,被调用者的栈帧紧挨着调用者的栈帧

        每个函数,在同一时刻只会有一个活跃栈帧

        栈顶是朝着低地址方向(栈是向着零地址方向增长)如图所示


栈操作

栈有两个基本的操作:

  • 入栈:将一个新的元素放到栈顶。push
  • 出栈:从栈顶取出一个元素。pop

        栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。

        栈的操作规则:后进先出

        栈顶指针:保存在%esp寄存器中,当栈为空的时候,%esp指向最高地址空间的下一位

入栈:

        push操作只有目的操作数,没有源操作数。在每个程序所分配的内存中,划分出一段连续的区域,作为栈空间。示例1013.s

        push申请对应的源寄存器的数据长度,esp减小相应字节数(即%esp-n)因为存储的数据按照小端法存储,低位数据在栈顶位置

例一如图所示:

        先将0x8888 8888压入栈中,再压入%ebx(对应的为pushl,4个内存单元),再压入%bx(对应两个内存单元),在压入0x4321(value),最后压入value的地址

例二在执行push ax指令时,主要做了一下2件事

  1. 先将SP=SP–2。
  2. 将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶

注意:

        push    $value   把value的首地址放到栈里
        pushw $value   只把低两位地址放到栈里 

出栈

        pop后数据依然在原来位置但是是无效的

        pop使用方法与push类似

如图所示:


逻辑算术指令

指令集如图所示

跳转指令

        寄存器eip 存放下一条要执行指令的地址

无条件跳转:jmp        

        jmp指令。条件执行通常涉及将控制转移到不跟随当前正在执行的指令的指令的地址。 控制权的转移可以是向前的,以执行一组新的指令,也可以是向后的,以重新执行相同的步骤。更多请看教材128页

语法:

        JMP 指令提供了一个标签名称,其中控制流立即转移。

jmp   label

程序:1014.s提供相应测试代码

        如图标记处,这里的05,是将指下一条指令(mov $5, %eax)的地址(即当前PC所存地址)
再加上05,就能得到跳转目的地<exit>的地址

                                    0x804805c+5=0x8048061= exit

条件跳转:jg

        如果条件跳转中满足某个指定条件,则控制流转移到目标指令。 根据条件和数据,有许多条件跳转指令。条件跳转按照%eflags中的值来判断是否该跳转。        


可以参考另一篇博客:Linux汇编入门大杂烩上!-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/276178.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day34:安全开发-JavaEE应用反射机制攻击链类对象成员变量方法构造方法

目录 Java-反射-Class对象类获取 Java-反射-Field成员变量类获取 Java-反射-Method成员方法类获取 Java-反射-Constructor构造方法类获取 Java-反射-不安全命令执行&反序列化链构造 思维导图 Java知识点 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;…

Hadoop伪分布式配置--没有DataNode或NameNode

一、原因分析 重复格式化NameNode 二、解决方法 1、输入格式化NameNode命令&#xff0c;找到data和name存放位置 ./bin/hdfs namenode -format 2、删除data或name&#xff08;没有哪个删哪个&#xff09; sudo rm -rf data 3、重新格式化NameNode 4、重新启动即可。

Linux搭建我的世界(MC)整合包服务器,All the Mods 9(ATM9)整合包开服教程

Linux使用MCSM面板搭建我的世界(Minecraft)整合包服务器&#xff0c;MC开服教程&#xff0c;All the Mods 9(ATM9)整合包搭建服务器的教程。 本教程使用Docker来运行mc服&#xff0c;可以方便切换不同Java版本&#xff0c;方便安装多个mc服版本。 视频教程&#xff1a;https:…

MySQL 数据库 下载地址 国内阿里云站点

mysql安装包下载_开源镜像站-阿里云 以 MySQL 5.7 为例 mysql-MySQL-5.7安装包下载_开源镜像站-阿里云

2024年AI辅助研发:技术革新引领研发新纪元

文章目录 &#x1f4d1;前言一、AI辅助研发的技术进展二、行业应用案例三、面临的挑战与机遇四、未来趋势预测全篇总结 &#x1f4d1;前言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已逐渐成为推动社会进步的重要力量。特别是在研发领域&#xff0c;A…

AIGC: 2 语音转换新纪元-Whisper技术在全球客服领域的创新运用

背景 现实世界&#xff0c;人跟人的沟通相当一部分是语音沟通&#xff0c;比如打电话&#xff0c;聊天中发送语音消息。 而在程序的世界&#xff0c;大部分以处理字符串为主。 所以&#xff0c;把语音转换成文字就成为了编程世界非常普遍的需求。 Whisper 是由 OpenAI 开发…

【Java基础】IO流(二)字符集知识

目录 字符集知识 1、GBK字符集 2、Unicode字符集&#xff08;万国码&#xff09; 3、乱码 4、Java中编码和解码的方法 字符集知识 字符&#xff08;Character&#xff09;&#xff1a;在计算机和电信技术中&#xff0c;一个字符是一个单位的字形、类字形单位或符号的基本信…

手写Mybatis自动填充插件

目录 一、Mybatis插件简介&#x1f959;二、工程创建及前期准备工作&#x1f96b;实现代码配置文件 三、插件核心代码实现&#x1f357;四、测试&#x1f953; 一、Mybatis插件简介&#x1f959; Mybatis插件运行原理及自定义插件_简述mybatis的插件运行原理,以及如何编写一个…

macOS Ventura 13.6.5 (22G621) Boot ISO 原版可引导镜像下载

macOS Ventura 13.6.5 (22G621) Boot ISO 原版可引导镜像下载 3 月 8 日凌晨&#xff0c;macOS Sonoma 14.4 发布&#xff0c;同时带来了 macOS Ventru 13.6.5 和 macOS Monterey 12.7.4 安全更新。 macOS Ventura 13.6 及更新版本&#xff0c;如无特殊说明皆为安全更新&…

springboot学习(八十六) springboot使用graalvm编译native程序

一、windows环境下 1.下载graalvm的jdk https://injdk.cn/ 下载windows版本 配置java环境变量&#xff0c;配置过程略 2.下载visual Studio Build Tools 下载地址&#xff1a;https://aka.ms/vs/17/release/vs_BuildTools.exe 安装后选择组件&#xff1a; 其中windows S…

ChatGPT-Next-Web SSRF漏洞+XSS漏洞复现(CVE-2023-49785)

0x01 产品简介 ChatGPT-Next-Web 是一种基于 OpenAI 的 GPT-3.5 、GPT-4.0语言模型的产品。它是设计用于 Web 环境中的聊天机器人,旨在为用户提供自然语言交互和智能对话的能力。 0x02 漏洞概述 2024年3月,互联网上披露CVE-2023-49785 ChatGPT-Next-Web SSRF/XSS 漏洞,未经…

信号与系统学习笔记——信号的分类

目录 一、确定与随机 二、连续与离散 三、周期与非周期 判断是否为周期函数 离散信号的周期 结论 四、能量与功率 定义 结论 五、因果与反因果 六、阶跃函数 定义 性质 七、冲激函数 定义 重要关系 作用 一、确定与随机 确定信号&#xff1a;可以确定时间函数…

Arcgis新建位置分配求解最佳商店位置

背景 借用Arcgis帮助文档中的说明:在本练习中,您将为连锁零售店选择可以获得最大业务量的商店位置。主要目标是要将商店定位在人口集中地区附近,因为这种区域对商店的需求量较大。设立这一目标的前提是假设人们往往更多光顾附近的商店,而对于距离较远的商店则较少光顾。您…

【Redis】Redis常用命令之Hash

1.hset&#xff1a;设置hash中指定的字段&#xff08;field&#xff09;的值&#xff08;value&#xff09;。 HSET key field value [field value ...]时间复杂度&#xff1a;插⼊⼀组field为O(1),插⼊N组field为O(N)。 返回值&#xff1a;添加的字段的个数。 2.hget&#xf…

MySQL删除数据 文件大小不变的原因以及处理空洞问题

数据删除流程 InnoDB 里的数据都是用 B 树的结构组织的。 假设&#xff0c;我们要删掉 R4 这个记录&#xff0c;InnoDB 引擎只会把 R4 这个记录标记为删除。如果之后要再插入一个 ID 在 300 和 600 之间的记录时&#xff0c;可能会复用这个位置。但是&#xff0c;磁盘文件的大…

Elastic Agent 的安装及使用

概述 Elastic Agent是Elastic Stack中的一个全新组件&#xff0c;旨在简化和统一监控和集成管理流程。它是一个轻量级的代理&#xff0c;可以部署到各种不同类型的主机和容器中&#xff0c;用于收集系统指标、日志和事件数据&#xff0c;并将其发送到Elasticsearch进行存储和分…

Python网络基础爬虫-python基本语法

文章目录 逻辑语句if,else,elifforwhile异常处理 函数与类defpassclass 逻辑语句 熟悉C/C语言的人们可能很希望Python提供switch语句&#xff0c;但Python中并没有这个关键词&#xff0c;也没有这个语句结构。但是可以通过if-elif-elif-…这样的结构代替&#xff0c;或者使用字…

挑战OpenAI的新模型免费上线,40%计算量性能逼近GPT-4

据介绍,Inflection-2.5 将强大的 LLM 能力与 Inflection 标志性的「同理心微调」结合在一起,兼具高情商与高智商,可联网获取事实信息,其性能可与 GPT-4、Gemini 等领先大模型相媲美。 本周四,美国 AI 创业公司 Inflection AI 正式发布新一代大语言模型 Inflection-2.5。 …

福派斯猫粮的适口性有何特点?

亲爱的朋友们&#xff0c;今天我想和大家分享一下福派斯猫粮的适口性特点。作为一位养猫多年的铲屎官&#xff0c;我深知猫粮的适口性对于猫咪的健康和幸福是多么重要。那么&#xff0c;福派斯猫粮在这方面究竟有何独到之处呢&#xff1f; 1️⃣ 首先&#xff0c;福派斯猫粮的口…

分类预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据分类预测

分类预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据分类预测 目录 分类预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GSWOA-KELM分类&#xff0…