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

计算机底层入门 05 汇编学习环境通用寄存器内存

2.3 汇编学习环境


我们通过上一章笔记,得知 计算机好像 只会通过位运算 进行 数字的加法。

而机器语言的魅力就是 位运算,解析规则。它们也都是通过 电路 来进行实现的。这就是 计算机最底层的本质了!!!

  • 汇编语言

所谓的汇编语言,不就是 通过助记符,来替代我们的 二进制嘛。只是为了 简化 我们的操作。而被发明出来的。
在这里插入图片描述
32 位 和 64位 的本质架构区别不大,只是寻址能力得到了增强。

在这里插入图片描述
目前 学习汇编 其实不需要什么 IDE 去写代码写程序了。而是 直接 下载 反汇编 工具 就可以。比如 OD、CE、x64dbg 这些。当然 搭配 VC++6.0 食用更佳。


2.4 通用寄存器(可以存储任何的值)

存储数据的过程:CPU --> 内存 --> 硬盘

32 位 CPU :8 16 32

64 位 CPU :8 16 32 64

现在的 操作系统其实都是向下兼容的!也就是说 32 位 的软件有很多很多呀。但是 都可以 运行在 64 位的系统上。

  • 32位的通用寄存器 只有 8个
    在这里插入图片描述

存值的范围只有:0 ~ FFFF FFFF

计算机如果向寄存器里存值,怎么存 ?

答:mov指令 直接 就能 存。

mov 目标地址,存储的数值
mov 目标地址,被传输的地址
mov 目标寄存器,存储的数值
mov 目标寄存器,被传输的寄存器

不同的寄存器(存储的数据宽度也不同)

32位16位8位
EAXAXAL(AX的低八位)
EBXBXBL (BX的低八位)
ECXCXCL (CX的低八位)
EDXDXDL (DX的低八位)
ESPSPAH(AX的高八位)
EBPBPBH (BX的高八位)
ESISICH(CX的高八位)
EDIDIDH (DX的高八位)

ESP:通常存储栈顶的地址
EBP:通常存储栈底的地址
EIP:通常存储的是 调用的 CALL 的地址。(跳转地址)


2.4 内存

寄存器是很小的,不够用。所以说,我们的数据怎么存储呢?就诞生了一个东西,叫做 内存

我们规定每个应用程序进程 其实 都可以 使用 4GB 的内存空间。(也被我们称为 虚拟内存)但实际上我们并不能用那么多的内存空间。所以相当于 空头支票。

内存地址:其实就是 为我们的每一块内存 起的一个名字。方便我们找到它。

寻址能力:就是能够 找到多大 范围的 地址。x86(32位) 能够找到 0x FFFF FFFF 的地址。 这其实 不算 庞大。

在这里插入图片描述
32 位 内存地址的数量是 FFFF FFFF + 1 = 4,294,967,297 个地址。

一个地址 对应着 一个 八位的 二进制串。也就是说 一个地址 相当于 一个字节。

所以理论上 能存 4,294,967,297 /1024 /1024 /1024 = 4GB

所以我们才说,32位 理论上 4GB 就是它的极限。

  • x64 位寻址能力 和 极限

x64 位寻址能力:0 - 0xFFFF FFFF FFFF FFFF
1,152,921,504,606,846,976 * 16 个内存地址。

x64 的 极限:17,179,869,184 GB

在这里插入图片描述
其实指针是什么呢?就是用来存储 内存地址的 类型变量。或指向内存地址的东西。是方便我们 操作 内存地址和其值的。

当你学会了 这个 底层,你会发现 指针 很容易!

比如说:我们存储的数据一般情况下,没有特别小的数据类型,可以小到 一个字节的。当然 JAVA有个 Byte 类型。如果 超过了 一个字节的类型,它在 内存中 怎么存储呢?


根据连续的内存空间,进行存储。因为 我们说 一个内存地址只对应一个 字节的 内存空间。那么4字节的 类型数据,我们就需要用到 4个 连续的内存空间 来进行 存储。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最标准mov代码:mov dword ptr ds:[内存地址]

byte、word、dword:数据宽度

ptr:相当于 Type类型

  1. CS (Code Segment) 代码段

  2. DS (Data Segment) 数据段

  3. ES (Extra Segment) 附加段

  4. SS (Stack Segment) 栈段

  5. FS:(Flag segment) 标志段寄存器

  6. GS:(Global segment) 全局段寄存器

http://www.xdnf.cn/news/16047.html

相关文章:

  • 【菜狗处理脏数据】对很多个不同时间序列数据的文件聚类—20250722
  • PyTorch常用工具
  • c++day05(ASCII)
  • 【RK3576】【Android14】MIC开发调试
  • ES--为什么没有完全删除?
  • 【科研绘图系列】R语言绘制柱状堆积图
  • 程序是如何生成的-以c语言为例
  • 阶段1--Linux中的文件服务器(FTP、NAS、SSH)
  • 从零构建实时通信引擎:Freeswitch源码编译与深度优化指南
  • Socket套接字
  • 【React-Three-Fiber实践】放弃Shader!用顶点颜色实现高性能3D可视化
  • 项目复盘核心要点
  • ndarray的创建(小白五分钟从入门到精通)
  • 引擎动画系统设计
  • Google Gemini 体验
  • AI一周事件(2025年7月15日-7月21日)
  • C语言符号可见性控制与工程实践——深入理解 __attribute__((visibility)) 和 -fvisibility=hidden
  • repmgr+vip实现对业务透明的高可用切换
  • 【金融机器学习】第四章:风险-收益权衡——Bryan Kelly, 修大成(中文翻译)
  • 92套毕业相册PPT模版
  • 【vscode】vscode中python虚拟环境的创建
  • SpringBoot与Vue实战:高效开发秘籍
  • 基于LangGraph的Open Deep Research架构全解析:从多Agent协作到企业级落地
  • 精密全波整流电路(二)
  • 大疆视觉算法面试30问全景精解
  • 企业工商信息查询API详细文档对接流程-JavaScript营业执照真伪解析
  • Word Press富文本控件的保存
  • Matlab学习笔记:矩阵基础
  • 《Uniapp-Vue 3-TS 实战开发》自定义预约时间段组件
  • 学习python中离线安装pip及下载package的方法