汇编语言快速回顾(以x86_64为例)

news2024/11/25 23:01:41

GAS (GNU Assembler) 是一款基于 Linux 的汇编器,主要供 GNU 项目使用,用于对 Linux 内核及其他软件进行进行汇编。
MASM (Microsoft Macro Assembler) 是微软操作系统的专属汇编器,于 1981 年随 Visual Studio 一起发布。

大学本科教育中有两门课可能涉及汇编语言的讲解,一门是《微机原理与接口技术》,一门是《计算机组成原理与汇编》,但它们讲解的往往是16位或32位指令集架构,分别以 Intel 8086 芯片和 80386 芯片为代表。随着64位系统的广泛应用,目前的主流架构转向了 x86_64,同时基于 Linux 系统的汇编环境与微软的汇编环境也不完全相同,因此有必要在大学课程基础上做一定扩展。

参考书籍:汇编程序设计与计算机体系结构:软件工程师教程

一、64位的寄存器

xx位 指的是 CPU 的通用寄存器(General Purpose Register)的数据宽度为 xx 位比特。

Note: 尽管当前的 x86_64 处理器是64位的,但只用到了低48位,因此理论上可以寻址 264 比特的地址空间,实际上只支持 248 比特。

64位32位64位32位
通用寄存器RAXEAX段寄存器/CS
RBXEBX/DS
RCXECX/ES
RDXEDX/SS
RSIESI/FS
RDIEDI/GS
RBPEBP指令指针寄存器RIPEIP
RSPESP标志寄存器RFLAGSEFLAGS
R8~R15///

由上表可以看出共有四类寄存器:通用寄存器(64位有16个,32位有8个),段寄存器(64位没有段寄存器),指令指针寄存器和标志寄存器。汇编程序操作的一般都是通用寄存器。从16位发展到32位,再到64位,各个体系都做到向前兼容。因此在64位架构下,依然可以操作如 EAX 这样的32位寄存器,它对应的是 RAX 寄存器的低32位。当使用小位数寄存器的名义操作大位数寄存器时,实际上操作的是大位数寄存器中与小位数相对应那部分寄存器。
例如,以 AX 的名义操作 EAX,实际上操作的就是 EAX 的低16位,因此会破坏原本 EAX 中的部分数据。

在这里插入图片描述

1.1 部分寄存器有特殊用途

  • rax/eax 通常是累加寄存器,一般数据不要保存在这类寄存器中。调用函数时的返回值应保存在 rax/eax 中。
  • rcx/ecx 在循环过程中记录循环计数器的值,因此在循环内部不应使用这类寄存器保存一般数据。
  • rbp/ebp 栈帧中的帧指针,用于指向栈中的数据。
  • rsp/esp 栈帧中的栈指针,通常指向活动栈帧的顶部。
  • rip/eip 是指令指针寄存器,指向接下来应获取、解码并执行的指令的内存地址,不应手动修改
  • rdi/edi 和 rsi/esi 是索引寄存器,用于字符串操作
  • rflags/eflags 是状态与控制寄存器,与 LAHF 以及 SAHF 指令配合使用,除此以外不可直接修改该寄存器。

rflags 中可用的只有低32位,因此 x86 与 x86_64 共用一套状态标志。

1.2 标志位和 LAHF、SAHF 指令

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小学生python游戏编程arcade----精灵调用图片的两种类

小学生python游戏编程arcade----精灵调用图片的两种类前言精灵调用图片的两种类1、第一种类的定义1.1 以文件名及缩放比例做初始参数1.2 利用变换图片的颜色更换角色的使用1.3 代码分析转换文件来不及调用,时间问题???&#xff1f…

【数据结构初阶】链式二叉树接口实现+痛苦的OJ题

递归心决:(xdm好好感悟) 1.确定递归的结束条件 2.确定递归的单层逻辑 3.确定递归的参数和返回值 文章目录一、链式二叉树接口1.二叉树的结构体2.手动造一棵二叉树3.二叉树前、中、后序遍历(递归的神圣大门开启)4.二叉树的结点个数5.二叉树的叶子结点个数6.二叉树的…

【毕业设计】深度学习动物识别系统 - 图像识别 python OpenCV

文章目录0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络4 inception_v3网络5 最后0 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章&a…

Web前端大作业、基于HTML+CSS+JavaScript响应式个人相册博客网站

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

【DL with Pytorch】第 1 章 :深度学习与PyTorch简介

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

1.每天进步一点点------爬虫应用场景

14天学习训练营导师课程: 杨鑫《Python 自学编程基础》 杨鑫《 Python 网络爬虫基础》 杨鑫《 Scrapy 爬虫框架实战和项目管理》 杨老师推荐自学Python的网站 w3schools 传送门 geeksforgeeks 传送门 realpython 传送门 学习之前读一读 来看看爬虫合不合法 传送…

安洵杯 2022 复现

babyphp 知识点&#xff1a;原生类的利用&#xff0c;session 反序列化<?php //something in flag.phpclass A {public $a;public $b;public function __wakeup(){$this->a "babyhacker";}public function __invoke(){if (isset($this->a) && $t…

[附源码]SSM计算机毕业设计文章管理系统查重PPTJAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java 多线程为啥要有ThreadLocal,怎么用,这篇讲全了!

前面我们学习的线程并发时的同步控制&#xff0c;是为了保证多个线程对共享数据争用时的正确性的。那如果一个操作本身不涉及对共享数据的使用&#xff0c;相反&#xff0c;只是希望变量只能由创建它的线程使用&#xff08;即线程隔离&#xff09;就需要到线程本地存储了。 Ja…

艾美捷曲妥珠单抗Trastuzumab化学性质和特异性说明

艾美捷曲妥珠单抗Trastuzumab是人源化IgG1κ单克隆抗体&#xff0c;其以高亲和力选择性结合人表皮生长因子受体2蛋白HER2的细胞外结构域。曲妥珠单抗通过重组DNA技术在哺乳动物细胞&#xff08;中国仓鼠卵巢&#xff09;中产生。 艾美捷曲妥珠单抗Trastuzumab化学性质&#xff…

[附源码]SSM计算机毕业设计鲜花销售管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Set 集合概述与使用

目录 一、概述 1.特点&#xff1a; 2.方法&#xff1a; 二、Set接口的使用 三、Set实现类 1.HashSet *** &#xff08;1&#xff09;简单应用&#xff1a; &#xff08;2&#xff09;存储方式 2.TreeSet &#xff08;1&#xff09;红黑树 &#xff08;2&#xff09…

文件被删除怎么办?恢复数据,电脑小白也能操作!

平时保存文件&#xff0c;我们都会用到电脑、硬盘、U盘。但有时候&#xff0c;不可避免会出现一些状况&#xff0c;比如数据误删&#xff0c;或者格式化。恢复数据应该如何操作&#xff1f;可能你会觉得自己&#xff1a;我是电脑小白&#xff0c;太复杂的操作我不会。别担心下面…

realme手机用什么蓝牙耳机好?2022公认音质最好的蓝牙耳机

作为日常通话、健身、听歌必不可少的设备&#xff0c;蓝牙耳机已经逐渐替代了有线耳机&#xff0c;成为了城市居民日常生活中最常用的收听设备。随着技术的发展&#xff0c;蓝牙耳机的性能也会越来越接近用户的需要&#xff0c;下面分享几款realme手机适用并且音质清晰的蓝牙耳…

mini_batch学习

概念 学习的指标 如何得到所有学习数据的损失函数的总和 一个一个计算&#xff1f;如果数据量大的话&#xff0c;费时费力 太难受了吧 从训练数据中获取小数据mini-batch 对每个小数据进行批量学习 首先读入mnist数据集 import numpy as np# 实现从训练数据中随机选择指定…

uni-app的三种操作数据库方法

目录 前端与后端&#xff08;云端&#xff09;分离实现数据库的操作 1.使用云函数来操作数据库 2.使用云对象来操作数据库 前端与后端&#xff08;云端&#xff09;结合实现客户端操作数据库 3.使用DB Schema结构规范实现客户端对数据库的操作 欢迎大家关注&#xff1a; …

Cinemachine各组件功能介绍

官方Github地址&#xff1a;https://github.com/Unity-Technologies/com.unity.cinemachine/tree/main/com.unity.cinemachine 文档在Documentation~文件夹下。 这里主要介绍各个组件的功能&#xff0c;具体参数设置查阅文档即可。 目录 Brain Camera CinemachineVirtualC…

yolov5训练coco数据集

文章目录参考链接一、coco数据集1. 简介2. 下载3.解压后的数据4. COCO数据集(.json)训练格式转换成YOLO格式(.txt)参考链接 为YOLOv5搭建COCO数据集训练、验证和测试环境 CoCo数据集下载 一、coco数据集 1. 简介 MS COCO的全称是Microsoft Common Objects in Context&#…

前端甘特图组件开发(一)

背景 工作中需要在网页上实现甘特图&#xff0c;以展示进度数据。通过网上调研相关项目&#xff0c;找到一款 dhtmlx-gantt 组件&#xff0c;在低程度上满足项目需求&#xff0c;但在部分定制功能&#xff08;如时间轴自定义、编辑弹窗样式风格等&#xff09;并不能完全满足项…

PyCharm+PyQT5之一环境搭建

TOCPyCharmPyQT之一环境搭建 今天搭建了PyCharmPyQT之一环境&#xff0c;看到好多论坛和书籍在搭建Python环境时仍然不使用虚拟环境管理&#xff0c;这对今后环境的移植和保存是非常麻烦的&#xff0c;大家可以按以下思路管理环境。 1.先安装python3.8.2&#xff08;我用的win7…