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指令的作用:
- 把一个立即数(就是一个普通的数)存到寄存器里。
- 把其他寄存器的值存到另外的寄存器
在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分批渲染表格
开篇 因最近工作中遇到了无分页情景下页面因大数据量卡顿的问题,在分别考虑并尝试了懒加载、虚拟滚动、分批渲染等各个方法后,最后决定使用分批渲染来解决该问题。 代码实现 表格代码 <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. 强大但不止于…...

原生鸿蒙应用市场:开发者的新机遇与深度探索
文章目录 自动化检测前移:提升开发效率与质量的新利器数据服务:数据驱动的精细化运营助手测试服务:保障应用质量的关键环节应用加密:保护应用安全与权益的利器从开发到运营的全方位支持写在最后 2024年10月22日,华为在…...

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

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

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

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

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

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

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

【Maven】——基础入门,插件安装、配置和简单使用,Maven如何设置国内源
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 引入: 一:Maven插件的安装 1:环境准备 2:创建项目 二…...

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

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

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 成员函数中被修改。通常,const 成员函数不能改变对象的任何成员变量,但将成员变量声明为 mutable 可以例外 class Hero { public:Hero():m_Hp(0), m_getHpCounter(0){}int getHp() const {m_getHpCounte…...

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

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

springboot - 定时任务
定时任务是企业级应用中的常见操作 定时任务是企业级开发中必不可少的组成部分,诸如长周期业务数据的计算,例如年度报表,诸如系统脏数据的处理,再比如系统性能监控报告,还有抢购类活动的商品上架,这些都离不…...

一篇文章理解CSS垂直布局方法
方法1:align-content: center 在 2024 年的 CSS 原生属性中允许使用 1 个 CSS 属性 align-content: center进行垂直居中。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewpo…...

SpringBoot day 1105
ok了家人们,今天继续学习spring boot,let‘s go 六.SpringBoot实现SSM整合 6.1 创建工程,导入静态资源 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</…...

MySQL 完整教程:从入门到精通
MySQL 完整教程:从入门到精通 MySQL 是一个广泛使用的关系型数据库管理系统,它使用结构化查询语言 (SQL) 来管理和操作数据。本文将详细介绍 MySQL 的基本概念、安装与配置、常用 SQL 语法、数据表的创建与管理、索引、视图、存储过程、触发器等高级特性…...

【贝叶斯公式】贝叶斯公式、贝叶斯定理、贝叶斯因子,似然比
一、是什么? 贝叶斯公式的本质在于它提供了一种在已有知识的基础上更新和调整我们对事件的信念的方式。具体来说,贝叶斯公式描述了后验概率(即在观察到某些证据后更新的概率)与先验概率(即在没有观察证据之前的概率&a…...

[libos源码学习 1] Liboc协程生产者消费者举例
文章目录 1. CoRoutineEnv_t结构体用于管理协程环境 3 Liboc协程生产者消费者例子4 Liboc协程生产者消费者, 为什么队列不需要上锁?5. 两个协程访问资源不需要加队列吗5. 参考 1. CoRoutineEnv_t结构体用于管理协程环境 struct stCoRoutineEnv_t { stCo…...

Python OpenCV 图像改变
更改图像数据 通过 改像素点 或者 切片的区域 import cv2 import numpy as np img cv2.imread("image.jpg") print(img[3,5]) # 显示某位置(行3列5)的像素值( 如 [53 34 29] 它是有三通道 B G R 组成) img[3,5] (0,0,255) # 更改该位置的像素…...

k8s按需创建 PV和创建与使用 PVC
在 Kubernetes 中,PersistentVolume(PV)和 PersistentVolumeClaim(PVC)用于管理存储资源。PV 是集群中的存储资源,而 PVC 是 Pod 请求 PV 的方式。按需创建 PV 通常使用 StorageClass 实现动态存储分配&…...

揭秘云计算 | 2、业务需求推动IT发展
揭秘云计算 | 1、云从哪里来?-CSDN博客https://blog.csdn.net/Ultipa/article/details/143430941?spm1001.2014.3001.5502 书接上文: 过去几十年间IT行业从大型主机过渡到客户端/服务器,再过渡到现如今的万物互联,IT可把控的资…...

【系统面试篇】进程与线程类(2)(笔记)——进程调度、中断、异常、用户态、核心态
目录 一、相关面试题 1. 进程的调度算法有哪些? 调度原则 (1)先来先服务调度算法 (2)最短作业优先调度算法 (3)高响应比优先调度算法 (4)时间片轮转调度算法 &am…...