当前位置: 首页 > news >正文

32位汇编——通用寄存器

通用寄存器

什么是寄存器呢?

计算机在三个地方可以存储数据,第一个是把数据存到CPU中,第二个把数据存到内存中,第三个把数据存到硬盘上。

那这个所谓的寄存器,就是CPU中用来存储数据的地方。那这个寄存器有多大呢?那取决于你CPU的位数,比如说如果你是一个32位的CPU。那它这个CPU里边能够提供的这个容器就会有三种类型。分别是8位的,16位的和32位的。那如果这个CPU呢?是64位的CPU,那它能提供的这种容器,也就是说能提供的这种寄存器就会有四种类型。分别是8位的,16位的,32位的和64位的。那么,大家可能感兴趣,想知道自己当前的CPU是32位的还是64位的,其实你都可以不用查了。因为只要你从零五年以后买的机器,几乎都是64位的,

大家现在不太可能用那么老的机器了。那这就意味着我们当前的计算机其实都是支持64位的。

为什么要学32位的汇编?

那么现在CPU 64位已经普及了,为什么还要学32位的CPU,还要学32位的汇编呢?其实大家可能对这个硬件的发展历史不是特别的了解,因为我们现在用的这个32、64位的CPU都是从32位的CPU拓展过来的,也就是说从32位到64位,它并没有整体结构上的变化,只是在原来的基础上增加了一些新的寄存器,汇编指令都是一样的

那么也就是说,如果没有32位的汇编的底子,想直接学64位的汇编的话,学起来是非常吃力的。那换句话说,如果你掌握了32位的汇编,想看64位的汇编,可以直接看懂。只是查一查资料,了解一下新增的那些寄存器而已。所以呢,这也是为什么我们无论是学CPU,还是学操作系统,还是学应用程序,都是要先学32位的。

还有一点,虽然现在我们的CPU和操作系统都支持64位了,但是现在我们运行的程序大多数仍然是32位的程序。这也就意味着,我们不可能彻底把32位抛弃,直接进入64位的这个时代。所以呢,我们的汇编还是要从32位开始学。

寄存器是什么呢?接下来主要给大家介绍介绍8个通用寄存器。大家知道32位的CPU,它能提供的寄存器就会有三种类型,分别是8位、16位、32位的,那我给大家介绍的就是32位的寄存器,而且是通用寄存器。

为什么叫通用寄存器呢?

因为在32位的CPU里边呢,它的寄存器有很多种。其它的寄存器都有自己特殊的用途,比如说eip寄存器,它的宽度也是32位,但是这个寄存器里边存储的值是CPU下一次要执行的指令的地址,不能用作其他用途。所以它不能叫通用寄存器。那么我给大家介绍的寄存器是你想存什么就存什么,你需要它存什么它就存什么,所以呢,称为通用寄存器。

通用寄存器一共有8个,分别是eax、ecx、edx、ebx、esp、edp、esi、edi。这8个通用寄存器都是32位的,那这就意味着我们向这些寄存器里边的任何一个存储数据,不能超过32个0和1,如果超过的话,多余的部分就会被丢弃。

如何使用32位的通用寄存器?

mov指令

汇编是什么?汇编简单点说,其实大家可以理解成就是寄存器跟寄存器或者寄存器跟内存之间数据的来回流动,汇编要做的事情就是这个,那也就是说,如果你想学好汇编,你只要记住几个关键词就可以了。寄存器、内存、指令

我们就围绕这三点就可以把汇编学好,而且我个人感觉汇编是所有语言里边最简单的语言。因为它很好理解,很好做实验。

那我们简单介绍一下mov指令,mov指令,move指令是用来移动数据的。

mov指令的作用:

  1. 把一个立即数(就是一个普通的数)存到寄存器里。
  2. 把其他寄存器的值存到另外的寄存器

在ollyICE里演示一下mov指令的用法

首先我们打开ollyICE动态调试软件,可以看到如下界面:

将HelloWorld.exe拖入窗口后,可以看到如下界面:

比如说我要向eax这个寄存器里边存储一个数,那就可以写mov eax,1。然后逗号后边跟一个值。

比如说我还想往ecx这个寄存器里边也存一个值2,写mov ecx,2

那同样的道理,除了可以把立即数存到寄存器里以外,还可以把其他寄存器的值,存到另外的寄存器里,比如说我现在我可以这么写move eax,ebx,意思就是把寄存器ebx的值存到寄存器eax中。

这个位置,这意味当前这个程序中CPU将要执行位置(004011A0)了。那当我们想执行这行指令的时候呢,我们可以按一下快捷键F8。

mov eax,1执行完毕了,已经把1这个立即数写到这个寄存器eax里去了。

同样的道理,我再按一下F8,就把2这个值存到这个寄存器ecx里了。

同样的道理,我再按一下F8,就把寄存器ebx的值存到这个寄存器eax里了。

相关文章:

32位汇编——通用寄存器

通用寄存器 什么是寄存器呢? 计算机在三个地方可以存储数据,第一个是把数据存到CPU中,第二个把数据存到内存中,第三个把数据存到硬盘上。 那这个所谓的寄存器,就是CPU中用来存储数据的地方。那这个寄存器有多大呢&a…...

vue3项目中实现el-table分批渲染表格

开篇 因最近工作中遇到了无分页情景下页面因大数据量卡顿的问题&#xff0c;在分别考虑并尝试了懒加载、虚拟滚动、分批渲染等各个方法后&#xff0c;最后决定使用分批渲染来解决该问题。 代码实现 表格代码 <el-table :data"currTableData"borderstyle"wi…...

开源办公软件 ONLYOFFICE 深入探索

文章目录 引言1. ONLYOFFICE 创建的背景1. 1 ONLYOFFICE 项目启动1. 2 ONLYOFFICE 的发展历程 2. 核心功能介绍2. 1 桌面编辑器2. 1. 1 文档2. 1. 2 表格2. 1. 3 幻灯片 2. 2 协作空间2. 3 文档编辑器 - 本地部署版 3. 技术介绍4. 安装5. 优势与挑战6. 个人体验7. 强大但不止于…...

原生鸿蒙应用市场:开发者的新机遇与深度探索

文章目录 自动化检测前移&#xff1a;提升开发效率与质量的新利器数据服务&#xff1a;数据驱动的精细化运营助手测试服务&#xff1a;保障应用质量的关键环节应用加密&#xff1a;保护应用安全与权益的利器从开发到运营的全方位支持写在最后 2024年10月22日&#xff0c;华为在…...

MATLAB实现蝙蝠算法(BA)

MATLAB实现蝙蝠算法(BA) 1.算法介绍 蝙蝠算法&#xff08;简称BA&#xff09;是一种受微型蝙蝠回声定位机制启发的群体智能算法&#xff0c;由Xin-She Yang于2010年提出。这种算法模拟了微型蝙蝠通过向周围环境发出声音并监听回声来识别猎物、避开障碍物以及追踪巢穴的行为。…...

WPF使用Prism框架首页界面

1. 首先确保已经下载了NuGet包MaterialDesignThemes 2.我们通过包的项目URL可以跳转到Github上查看源码 3.找到首页所在的代码位置 4.将代码复制下来&#xff0c;删除掉自己不需要的东西&#xff0c;最终如下 <materialDesign:DialogHostDialogTheme"Inherit"Ide…...

Linux中的软硬链接文件详解

概述 在Linux文件系统中&#xff0c;软连接&#xff08;Symbolic Link&#xff09;和硬连接&#xff08;Hard Link&#xff09;是两种重要的文件链接方式。它们都可以创建指向相同文件内容的多个“链接”&#xff0c;但在实现方式和特性上有所不同。 1. 硬连接&#xff08;Ha…...

「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制

高级动画可以显著提升用户体验&#xff0c;为应用界面带来更流畅的视觉效果。本篇将深入介绍鸿蒙框架的高级动画&#xff0c;包括弹性动画、透明度渐变和旋转缩放组合动画等示例。 关键词 高级动画弹性缓动自动动画缓动曲线 一、Animation 组件的高级缓动曲线 缓动曲线&#…...

pgsql数据量大之后可能遇到的问题

当 PostgreSQL 数据量增大时&#xff0c;可能会遇到以下问题&#xff1a; 查询性能下降&#xff1a;随着数据量的增加&#xff0c;查询可能会变得缓慢&#xff0c;尤其是在没有适当索引的情况下。大量的数据意味着更多的行需要被扫描和过滤&#xff0c;这会显著增加查询执行时间…...

Android 解决MTK相机前摄镜像问题

很莫名其妙的&#xff0c;前摄默认镜像&#xff0c;原来是为了前摄拍字体正确显示&#xff0c;比如自拍&#xff0c;前摄拍摄的人像虽左右镜像了&#xff0c;但如果后面有字牌显示&#xff0c;字体会显示正常而不是翻转。但现在需求是满足普遍的前摄原生代码不带镜像修改&#…...

在 Oracle 数据库中,SERVICE_NAME 和 SERVICE_NAMES 有什么区别?

在 Oracle 数据库中&#xff0c;SERVICE_NAME 和 SERVICE_NAMES 是两个相关的但略有不同的概念。它们都用于标识数据库服务&#xff0c;但使用场景和作用有所不同。下面详细解释这两个概念的区别&#xff1a; SERVICE_NAME 1. 定义&#xff1a; SERVICE_NAME 是一个单一的、…...

【Maven】——基础入门,插件安装、配置和简单使用,Maven如何设置国内源

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 引入&#xff1a; 一&#xff1a;Maven插件的安装 1&#xff1a;环境准备 2&#xff1a;创建项目 二…...

AIGC时代LaTeX排版的应用、技巧与未来展望

文章目录 一、LaTeX简介与基础设置二、常用特殊符号与公式排版三、图片与表格的插入与排版四、自动编号与交叉引用五、自定义命令与样式六、LaTeX在AIGC时代的应用与挑战七、LaTeX的未来展望《LaTeX 入门实战》内容简介作者简介目录前言/序言读者对象本书内容充分利用本书 在AI…...

二叉树的深搜

前言&#xff1a; 本章节更深入学习递归 计算布尔二叉树的值 思路&#xff1a; 1.函数头设计&#xff1a;dfs&#xff08;root&#xff09; 2.函数体&#xff1a;需要一个接收left 和 right 的值 并且根据root的值进行比较 3.递归出口&#xff1a;很明显 当为叶子节点的时候…...

JUC笔记之ReentrantLock

ReentrantLock 相对于synchronized它具备如下特点 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量(多个wait set,不同于synchronized的wait set,ReentrantLock的wait set在同一条件下notify才能唤醒WATING状态的线程) 与synchronized一样,都支持可重入 …...

【含文档】基于ssm+jsp的图书管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…...

pytorch知识蒸馏测试

import torch from torch import nn,optim import torch.utils import torch.utils.data import torch.utils.data.dataloader from torchvision import transforms,datasets...

mutable用法

mutable 关键字用于允许类的某个成员变量在 const 成员函数中被修改。通常&#xff0c;const 成员函数不能改变对象的任何成员变量&#xff0c;但将成员变量声明为 mutable 可以例外 class Hero { public:Hero():m_Hp(0), m_getHpCounter(0){}int getHp() const {m_getHpCounte…...

SQL语言基础

SQL(Struct Query Language)是结构化查询语言的简称&#xff0c;是一种在关系型数据库中定义和操纵数据的标准语言。 不要使用面向对象的思想学习SQL&#xff0c;因为它不是面向对象的语言目标 SQL语言简介(了解)从数据库数据检索数据(重点)子查询(重点)Oracle常用函数(掌握) …...

在USB电源测试中如何降低测试成本?-纳米软件

USB 电源模块在现代电子设备中广泛应用&#xff0c;其性能的稳定性和可靠性至关重要。然而&#xff0c;测试 USB 电源模块的成本可能会很高&#xff0c;这对于企业和研发机构来说是一个重要的问题。因此&#xff0c;寻找降低 USB 电源模块测试成本的方法具有重要的现实意义。 降…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示&#xff0c;全球市场规模预计在 2031 年达到 9848 万美元&#xff0c;2025 - 2031 年期间年复合增长率&#xff08;CAGR&#xff09;为 3.7%。在竞争格局上&#xff0c;市场集中度较高&#xff0c;2024 年全球前十强厂商占据约 74.0% 的市场…...