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

计算机底层入门 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.dtcms.com/a/293466.html

相关文章:

  • MDC(Mapped Diagnostic Context) 的核心介绍与使用教程
  • LINUX 722 逻辑卷快照
  • (Arxiv-2025)HiDream-I1:一种高效图像生成基础模型,采用稀疏扩散Transformer
  • 在PyCharm中复现LaneNet车道线检测模型
  • JavaScript 01 JavaScript 是什么
  • 医疗系统伪代码
  • Ctenos7最小化安装 可以ping通
  • MySQL InnoDB存储引擎深度解析:从原理到优化
  • 【JavaSE】JDBC和连接池学习笔记
  • k8s:利用helm离线部署consul v1.21.2
  • 【Altium Designer2025】电子设计自动化(EDA)软件——Altium Designer25版保姆级下载安装详细图文教程(附安装包)
  • @PostConstruct 注解
  • Python进阶第三方库之Numpy
  • Docker-compose:服务编排
  • M3088NL是一款网络滤波器/变压器支持100M和1000M网络环境,适用于高速网络传输场景M3088
  • 单片机的几种GPIO输入输出模型详解
  • JavaWeb学习打卡11(cookie(甜点)详解)
  • iView Table组件二次封装
  • RAG实战指南 Day 21:检索前处理与查询重写技术
  • 数据库隔离级别
  • SQL语句中锁的使用与优化
  • 正则表达式:文本处理的强大工具
  • 傲软录屏 专业高清录屏软件 ApowerREC Pro 下载与保姆级安装教程!!
  • 3.5 模块化编程实践
  • 路径平滑优化算法--Polynomial Spiral(多项式螺旋法)
  • JavaScript 02 数据类型和运算符数组对象
  • JavaScript 03 严格检查模式Strict字符串类型详解
  • 【金融机器学习】第四章:风险-收益权衡——Bryan Kelly, 修大成(中文翻译)
  • Linux Bridge Cost
  • Qt多语言支持初步探索