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

scale
    leal (%edx,%edi,4) %eax
    leal (%eax,%edi,2) %eax
    leal (%eax,%esi,8) %eax
    ret

注意:

        比例因子只能是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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python数据分析-5

1.时间序列 2.pandas重采样 重采样&#xff1a;指的是将时间序列从一个频率转化为另一个频率进行处理的过程&#xff0c;将高频率数据转化为低频率数据为降采样&#xff0c;低频率转 化为高频率为升采样。 统计出911数据中不同月份电话次数的变化情况&#xff1a…

Mysql---库表操作

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.Mysql数据库简介 MySQL是一种关系型数据库管理系统&#xff0c;是最流行的开源数据库之一。它是由瑞典MySQL AB公司开发的&#xff0c;后来被Sun Microsystems收购&#xff0c;之后又被Oracl…

vue iview 级联选择器遇到的坑

我们PC项目用到的前端技术栈是vue+iview,最近有个需求,要做个级联选择器,并且是懒加载动态加载后端返回的数据。效果如下: 如下图所示,在我们封装的公共组件form-box.vue里有我们级联选择器: 代码如下: <!--级联选择器--><template v-else-if="item.type…

传统机器学习 基于TF_IDF的文本聚类实现

简介 使用sklearn基于TF_IDF算法&#xff0c;实现把文本变成向量。再使用sklearn的kmeans聚类算法进行文本聚类。 个人观点&#xff1a;这是比较古老的技术了&#xff0c;文本转向量的效果不如如今的 text2vec 文本转向量好。 而且sklearn 不支持GPU加速&#xff0c;处理大量…

Spring Boot整合STOMP实现实时通信

目录 引言 代码实现 配置类WebSocketMessageBrokerConfig DTO 工具类 Controller common.html stomp-broadcast.html 运行效果 完整代码地址 引言 STOMP&#xff08;Simple Text Oriented Messaging Protocol&#xff09;作为一种简单文本导向的消息传递协议&#xf…

物联网技术助力智慧城市转型升级:智能、高效、可持续

目录 一、物联网技术概述及其在智慧城市中的应用 二、物联网技术助力智慧城市转型升级的路径 1、提升城市基础设施智能化水平 2、推动公共服务智能化升级 3、促进城市治理现代化 三、物联网技术助力智慧城市转型升级的成效与展望 1、成效显著 2、展望未来 四、物联网技…

数据分析-Pandas多维数据平行坐标可视化

数据分析-Pandas多维数据平行坐标可视化 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表…

【javaWeb】在webapp中手动发布一个应用

标题 &#x1f432;一、为什么要在webapp中手动发布一个应用&#x1f389;二、手动发布步骤1.下载Tomcat2.解压并安装3.在webapps中创建文档 ✨三、总结 &#x1f432;一、为什么要在webapp中手动发布一个应用 好处解释灵活性手动发布应用程序可以根据自己的需求进行自定义配置…

【大模型系列】图片生成(DDPM/VAE/StableDiffusion/ControlNet/LoRA)

文章目录 1 DDPM(UC Berkeley, 2020)1.1 如何使用DDPM生成图片1.2 如何训练网络1.3 模型原理 2 VAE:Auto-Encoding Variational Bayes(2022&#xff0c;Kingma)2.1 如何利用VAE进行图像增广2.2 如何训练VAE网络2.3 VAE原理2.3.1 Auto-Encoder2.3.2 VAE编码器2.3.3 VAE解码器 3 …

编程示例:约瑟夫环问题

编程示例&#xff1a;约瑟夫环问题 &#xff11;约瑟夫环的故事 在浩瀚的计算机语言中&#xff0c;总有一些算法——虽然码量很少&#xff0c; 但却能完美又巧妙地解决那些复杂的问题。接下来&#xff0c; 我们要介绍的“约瑟夫环”问题就是一个很好的例子。 这个问题来源于犹…

基于uniapp的旅游景点入园预约系统 微信小程序0220o

技术要求&#xff1a; a) 操作系统&#xff1a;Windows、Linux等&#xff1b; b) 开发工具&#xff1a;Android Studio、pycharm等&#xff1b; c) 数据库&#xff1a;Oracle、MySQL等&#xff1b; d) 开发语言&#xff1a;python&#xff1b; e) 技术框架&#xff1a;采用MVC模…

GPT实战系列-如何让LangChain的Agent选择工具

GPT实战系列-如何让LangChain的Agent选择工具 LangChain GPT实战系列-LangChain如何构建基通义千问的多工具链 GPT实战系列-构建多参数的自定义LangChain工具 GPT实战系列-通过Basetool构建自定义LangChain工具方法 GPT实战系列-一种构建LangChain自定义Tool工具的简单方法…

PHP中的反序列化漏洞

PHP中的反序列化漏洞 目录 PHP 中的序列化与反序列化 概述 序列化 基本类型的序列化 对象的序列化 反序列化 示例序列化与反序列化 反序列化漏洞 - PHP 中的魔术方法 - Typecho_v1.0 中的反序列化漏洞 POP链的构造思路 pop链案例 反序列化逃逸 字符串逃逸&#xff…

Mac-自动操作 实现双击即可执行shell脚本

背景 在Mac上运行shell脚本&#xff0c;总是需要开启终端窗口执行&#xff0c;比较麻烦 方案 使用Mac上自带的“自动操作”程序&#xff0c;将shell脚本打包成可运行程序(.app后缀)&#xff0c;实现双击打开即可执行shell脚本 实现细节 找到Mac上 应用程序中的 自动操作&am…

HTML案例-1.标签练习

效果 源码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head&g…

三维高斯是什么

最近3DGS的爆火&#xff0c;引发了一众对三维高斯表达场景的研究。这里的三维高斯是什么&#xff1f;本文用简答的描述和简单实验来呈现三维高斯的数学意义。本文没有公式推导&#xff0c;主打一个意会。 我们高中都学过高斯分布&#xff0c;即一个钟形曲线。它的特点是有一个…

数字逻辑-时序逻辑电路二——沐雨先生

一、实验目的 &#xff08;1&#xff09;熟悉计数器的逻辑功能及特性。 &#xff08;2&#xff09;掌握计数器的应用。 &#xff08;3&#xff09;掌握时序逻辑电路的分析和设计方法。 二、实验仪器及材料 三、实验原理 1、集成4位计数器74LS161&#xff08;74LS160&#…

RSA加密与解密(Java实现)

RSA加密算法是一种非对称加密算法&#xff0c;它使用一对密钥来进行加密和解密操作。 基本原理 加密过程&#xff1a; 密钥生成&#xff1a;首先需要生成一对密钥&#xff0c;这对密钥包括一个公钥和一个私钥。公钥是公开的&#xff0c;可以分发给任何人&#xff0c;而私钥必须…

导入fetch_california_housing 加州房价数据集报错解决(HTTPError: HTTP Error 403: Forbidden)

报错 HTTPError Traceback (most recent call last) Cell In[3], line 52 from sklearn.datasets import fetch_california_housing3 from sklearn.model_selection import train_test_split ----> 5 X, Y fetch_california_housing(retu…

如何看待Figure公司与Open AI合作的最新机器人成果Figure 01?

想象一下&#xff0c;如果有一天&#xff0c;你走进办公室&#xff0c;迎面而来的不是熟悉的同事&#xff0c;而是一位名叫Figure 01的机器人新朋友。它不仅可以帮你倒咖啡&#xff0c;还能跟你聊天&#xff0c;甚至在你加班时给予精神上的支持。听起来是不是像科幻小说的情节&…