本文和后文中讲的都是32位机,也就是i386的系统

计算机语言(机器语言)可以通过0和1生成机器指令,将指令输入到cpu 来执行,通过机器指令计算机可以实现各种各样的功能,而机器语言又分为操作码和操作数,假如:

int a = 1;

生成的机器码为(下面是随便输的):

101010(操作码) 10101010101011011111(操作数)

其中就包含了操作码和操作数,在内存当中每一个基础执行单元为8位,1byte(字节)等于8bit(位),而int a 是四字节,所以在内存当中开辟空间的时候会在内存中开辟4byte的空间,而在开辟内存的过程中,必须指定内存的地址,此时就引出的高地址和低地址的概念。

高地址和低地址

可以简单的认为,可以把主存看成一本空白的作业本,内存地址就相当于主存的页码,你现在要在笔记本上记录一些内容,他的页码排序是

第一页 : 0x0000001
第二页 : 0x0000002
...
最后一页: 0x0000092

1 如果你选择`从前向后记录`(用完第一页,用第二页,类推)这就是先使用低地址,后使用高地址.

0x0000001 -> 0x0000002-> ... -> 0x0000092

业内有这样表述:动态分配内存时堆空间向高地址增长,说的就是这种情况.
这个向高地址增长就是先使用低地址,后使用高地址的意思.

2 如果你选择`从后往前记录`(先用笔记本的最后一页,用完后使用倒数第二页,类推) 这就是先使用高地址,后使用低地址

0x0000092 -> ... ->0x0000002 -> 0x0000001

业内表述:`0xbfac 5000-0xbfad a000`是栈空间,其中高地址的部分保存着进程的环境变量和命令行参数,低地址的部分保存函数栈帧,**栈空间是向低地址增长的**.
这个向低地址增长就是先使用高地址,后使用低地址的意思.

栈底(栈基址)和栈顶

通过上面的高地址和低地址我们明白,在内存中是以类似于数组的方式存储数据,而0x0000092之类的数值代表了数据在内存中的位置,也就是我们的内存地址(类似于下标),我们如果要找到指定的数据,就必须在CPU当中存储栈底和栈顶的地址,这时就牵扯到了CPU的寄存器

SP寄存器(stack pointer) 和BP寄存器(base pointer)

SP寄存器存储了栈顶的地址,而BP寄存器则存储了栈底的地址初始状态下内存中不存在数据,栈顶和栈底指向了同一个位置(就像数组第一个下标是0,最后一个下标也是零,第一个下标相当于栈顶,最后一个下标相当于栈底),当我们需要在内存中开辟一个空间的时候,通过sp寄存器的位置减去要开辟的内存空间,如果写成汇编代码则可以如下表示:

例如:上面的int a 为四字节,所以要在内存中开辟四字节的空间,所以SP 寄存器的减去4个字节,则相当于在内存中开辟了4字节的内存空间

sub 4,sp

sub在英文中代表了减,我们就可以看出在内存中减去了四个字节,而在内存中存放数据的时候是存在指定的顺序的,这里就引出了一个关键知识点:字节序。

字节序

字节序分为大端序和小端序,我们的内存也存在高低之分,越往右是低,越往左是高,低位置叫做小端序,高位置叫做大端序,而大端序和小端序则是代表了内存的两种排序规则。

大端序(英:big-endian)或称大尾序,数据以8bit为单位:

地址增长方向  →

0x0A 0x0B 0x0C 0x0D

小端序(英:little-endian)或称小尾序数据以8bit为单位:

0x0D 0x0C 0x0B 0x0A

Inter 64 位和AI 32 位的处理器使用的都是小端序

Inter 寄存器的变迁

在1978年Inter 处理器为16位,SP 寄存器和BP寄存器的名称并没有变化,在之后处理变为了32位后,SP寄存器和BP寄存器则被称为ESP 寄存器和EBP寄存器,也就是扩展的SP和BP寄存器,而64位将E改为了R叫做RBP和RSP寄存器。

高八位和低八位

以EBP寄存器为例:一个EBP由两个BP组成,而我们的数据越往右越低,所以EBP寄存器中往左的16位为高16位,往右的16位为低16为。AX 寄存器为通用寄存器,为16位寄存器,变成32位,被称为EAX,变成64位被称为RAX,一个16位可以表示成两个八位,往左的8位为高八位,往右的8位为高八位,将AX中的X替换为H 和 L,AH代表高八位,AL代表低八位,X 在这里代表了未知数。

再来看汇编

因为本文研究的是32位机,所以寄存器的名称为ESP和EBP,那此时int a = 1;我们在内存中开辟一块空间,使用汇编语言可以这样写:

sub 4,esp
mov 1,-4(ebp)

mov 1,-4(ebp)表示将数值1 移动到-4的ebp位置。

马士兵JVM 精讲笔记(一)相关推荐

  1. 马士兵JVM课程笔记

    马士兵JVM课程笔记 GC和GC Tuning GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? ...

  2. Java高并发编程 (马士兵老师视频)笔记(一)同步器

    本篇主要总结同步器的相关例子:包括synchronized.volatile.原子变量类(AtomicXxx).CountDownLatch.ReentrantLock和ThreadLocal.还涉及 ...

  3. 信安精品课:第5章物理与环境安全技术精讲笔记

    第5章物理与环境安全技术精讲笔记 一.本章知识框架 二.本章大纲要求 三.本章重要易考知识点清单 5.1 物理安全概念与要求 物理安全是网络安全的基础. 传统上的物理安全也称为实体安全,是指包括环境. ...

  4. 信安精品课:第4章网络安全体系与网络安全模型精讲笔记

    第4章网络安全体系与网络安全模型精讲笔记 一.本章知识框架 二.本章大纲要求 4.1 网络安全体系概述 •网络安全体系概念 •网络安全体系特征 •网络安全体系用途 4.2 网络安全体系相关安全模型 • ...

  5. 信安精品课:第3章密码学基本理论精讲笔记

    第3章 密码学基本理论精讲笔记 一.本章知识框架 二.本章大纲要求 3.1 密码学概况 ●密码学发展简况●密码学基本概念●密码安全性分析 3.2 密码体制分类 ●私钥密码体制●公钥密码体制●混合密码体 ...

  6. 信安精品课:第2章网络攻击原理与常用方法精讲笔记

    第2章网络攻击原理与常用方法精讲笔记 https://www.moondream.cn/?p=2098 一.本章知识框架 2.1 网络攻击概述 22 2.1.1 网络攻击概念 22 2.1.2 网络攻 ...

  7. 信安精品课:第1章网络信息安全概述精讲笔记

    第1章网络信息安全概述精讲笔记 https://www.moondream.cn/?p=2095 一.本章知识框架 二.本章大纲要求 1.网络信息安全概述 1.1 网络信息安全基本属性 ● 机密性 ● ...

  8. 马士兵hibernate(原始笔记)

    马士兵hibernate(原始笔记) 课程内容 1 HelloWorld a) Xml b) annotation 2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R ...

  9. 马士兵坦克大战学习笔记(一)

    java初学者对于马士兵坦克大战的个人学习笔记及代码问题总结(第一阶段), 1.系统自动初始化了Graphics g参数 2.设计原则:高内聚,低耦合: 一个模块中的各元素之间的紧密程度越高,内聚性越 ...

最新文章

  1. PHP 中华如何用命令连接数据库,选择MySQL数据库的命令以及PHP脚本下的操作方法...
  2. hdu1529 差分约束(好题)
  3. 【原创】如何优化一个网站使之提高访问速度--更新20120216
  4. DataProtection设置问题引起不同ASP.NET Core站点无法共享用户验证Cookie
  5. HTTP返回代码代表的含义(403,404,500,502,504)
  6. 拜山贴(COM+中的连接复用)
  7. JAVA线程池shutdown和shutdownNow的区别
  8. 使用radioGroup的时候,每个radioButton的状态选择器要使用 state_checked=属性,不能使用selected...
  9. c语言 16 16 字库,16位汉字显示屏的字库软件(点阵字库)
  10. SASS教程sass超详细教程
  11. 猿创征文 |【算法入门必刷】数据结构-栈(四)
  12. mt950报文解析_系列之五 | MT759报文升级内容解析
  13. PySpark 累加器使用及自定义累加器
  14. Linux TC 带宽管理队列规则
  15. 存储术语中的LUN概念
  16. signature=79628ed6ceb6a7f7dd3c2bec70171b45,Hvad kortene kan fortælle om kultur- og naturlandskabet
  17. 2d游戏循环滚动地图中的拼接缝隙问题
  18. springboot之Actuator
  19. 单链表的创建--从零开始
  20. Xmrig挖矿木马之暴力分析!

热门文章

  1. CA证书的签发流程详情
  2. win10降win7_软硬兼施Win7:8核笔记本/移动工作站出坑记
  3. 机器人学习笔记(一)
  4. pytorch下Numpy,Torch,Spicy,NetworkX及其他基本数据类型相关操作(持续更新)
  5. Xilinx-7Series-FPGA高速收发器使用学习—TX发送端介绍
  6. PNP三极管电路简单分析
  7. 手机录屏视频用ffmpeg进行视频截取以及旋转
  8. IDM trust Keycloak
  9. Snapchat发布不到2个月的故事搜索功能,又双叒被Instagram抄袭了
  10. tiny core linux网络连接,用Tiny Core Linux打造纯Firefox上网系统(概要)