【汇编语言/底层开发】3、通过寄存器进行内存访问

简介: 上篇叙述了8086CPU的通用寄存器和代码寄存器的一些东西。仅仅这些是远远不够的,显而易见的一个原因是,如果CPU只是对自己内部的寄存器进行操作,不能同外部数据进行交互,那么将无法完成任何工作。

上篇叙述了8086CPU的通用寄存器和代码寄存器的一些东西。仅仅这些是远远不够的,显而易见的一个原因是,如果CPU只是对自己内部的寄存器进行操作,不能同外部数据进行交互,那么将无法完成任何工作。

数据段寄存器DS:

8086CPU中的DS寄存器专门用来存放准备访问的数据的段地址。[n]则表示一个偏移地址,这个偏移地址同DS中表示的段地址一起确定最终要访问的内存地址。

以下汇编语句表示从10000H地址中的数据读入寄存器AL中:

MOV BX, 1000
MOV DS, BX
MOV AL, [0]

需要注意的是,不能将段地址直接送入DS中,而需要先将段地址的值保存如通用寄存器,再通过通用寄存器传送到DS。

以下汇编语句表示向10000H中写入数据:

MOV BX, 1000
MOV DS, BX
MOV [0], AL

字的传送:

对于8086等16位CPU,只要在mov等指令中操作16为的寄存器就可以自动识别进行16位数据传送,其中高8位数据存入高地址,低8位数据存入低地址。


汇编指令:

mov、add和sub指令均为两个参数的操作指令。指令操作完成后,结果保存在前面一个操作数中。


栈的概念:

栈在数据结构中是最基本的概念之一,在这里简单描述一下即可:一种只有一个操作点的存储空间,最先存入该存储空间的最后退出,而最后进入的最先退出,即FILO(First In Last Out)规则。


8086中的栈:

提供了push和pop指令,分别用于入栈和出栈操作。栈的每一个操作单元都是2个字节的,16位的数据。sp的范围为0-FFFF,因此栈的最大容量为64k。

实现的方法则是使用了两个寄存器SS和SP,分别作为栈寄存器和段偏移寄存器。这两个寄存器分别用于存放栈顶的段地址和偏移地址。在任意时刻,SS:SP指向栈顶的元素(当栈是空的时候,指向栈底更下一字节的位置)。通常,作为栈的一段内存首先从高地址开始存放数据,由高地址存放至低地址。

执行push指令时,首先改变sp的值,然后向ss:sp传送数据;执行pop指令时,首先从ss:sp处读取数据,然后改变sp的值。

目录
相关文章
|
9月前
|
Linux Anolis 异构计算
关于远程直接内存访问技术 RDMA 的高性能架构设计介绍
本文介绍 RDMA 技术的基本原理及交流在工程上的设计思路。
|
23天前
|
缓存 Java Android开发
安卓应用开发中的内存优化策略
在移动应用开发领域,性能一直是衡量应用质量的重要指标之一。特别是对于安卓平台,由于设备的硬件配置多样化,内存管理成为开发者面临的重大挑战。本文将深入探讨针对安卓平台的内存优化技巧,包括内存泄漏的预防、合理使用数据结构和算法、以及高效的资源释放机制。通过这些方法,开发者可以显著提升应用的性能和用户体验。
|
30天前
|
监控 算法 Android开发
安卓应用开发中的内存优化策略
【2月更文挑战第30天】随着移动设备性能的不断提升,用户对应用程序的体验要求越来越高。在安卓应用开发中,内存管理是影响应用性能和用户体验的关键因素之一。本文将探讨针对安卓平台的内存优化技巧,包括避免内存泄漏、合理使用数据结构和算法、优化图片资源处理等策略,旨在帮助开发者提升应用性能和稳定性。
19 1
|
30天前
|
缓存 算法 编译器
C/C++编译器内存优化技术:内存优化关注程序对内存的访问和使用,以提高内存访问速度和减少内存占用。
C/C++编译器内存优化技术:内存优化关注程序对内存的访问和使用,以提高内存访问速度和减少内存占用。
36 0
|
5月前
|
测试技术 API
【OS Pintos】Project1 项目要求说明 | 进程中止信息 | 参数传递 | 用户内存访问 | 有关项目实现的建议
【OS Pintos】Project1 项目要求说明 | 进程中止信息 | 参数传递 | 用户内存访问 | 有关项目实现的建议
78 0
|
6月前
|
存储 缓存 算法框架/工具
从GPU的内存访问视角对比NHWC和NCHW
NHWC和NCHW是卷积神经网络(cnn)中广泛使用的数据格式。它们决定了多维数据,如图像、点云或特征图如何存储在内存中。
157 4
|
7月前
|
存储 Linux Apache
Apache IoTDB开发之内存工具
IoTDB中的内存分为三部分:写内存,读内存和保留内存。写内存用于数据写入分配。三者的比例可以在配置文件中设置。
127 0
|
3月前
|
存储 缓存 Linux
内存系列学习(六):ARM处理器存储访问一致性问题
内存系列学习(六):ARM处理器存储访问一致性问题
58 0
|
3月前
|
存储 程序员
【汇编】内存的读写与地址空间、寄存器及数据存储
【汇编】内存的读写与地址空间、寄存器及数据存储
143 1
【汇编】内存的读写与地址空间、寄存器及数据存储
|
4月前
|
存储 安全 数据安全/隐私保护
3.2 Windows驱动开发:内核CR3切换读写内存
CR3是一种控制寄存器,它是CPU中的一个专用寄存器,用于存储当前进程的页目录表的物理地址。在x86体系结构中,虚拟地址的翻译过程需要借助页表来完成。页表是由页目录表和页表组成的,页目录表存储了页表的物理地址,而页表存储了实际的物理页框地址。因此,页目录表的物理地址是虚拟地址翻译的关键之一。在操作系统中,每个进程都有自己的地址空间,地址空间中包含了进程的代码、数据和堆栈等信息。为了实现进程间的隔离和保护,操作系统会为每个进程分配独立的地址空间。在这个过程中,操作系统会将每个进程的页目录表的物理地址存储在它自己的CR3寄存器中。当进程切换时,操作系统会修改CR3寄存器的值,从而让CPU使用新的页
48 0
3.2 Windows驱动开发:内核CR3切换读写内存