【汇编语言/底层开发】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的值。

目录
相关文章
|
6天前
|
开发工具 Swift iOS开发
【Swift开发专栏】Swift中的内存泄漏检测与修复
【4月更文挑战第30天】本文探讨了Swift中的内存泄漏问题,尽管有ARC机制,但仍需关注内存管理。文章分为三部分:内存管理基础知识、检测方法和修复技巧。了解ARC原理和循环引用陷阱是防止内存泄漏的关键。检测方法包括使用Xcode内存调试器、LeakSanitizer和性能分析工具。修复技巧涉及打破循环引用、使用弱/无主引用及手动管理内存。理解这些对优化应用性能和稳定性至关重要。
|
6天前
|
Web App开发 缓存 前端开发
【Flutter前端技术开发专栏】Flutter中的性能优化与内存管理
【4月更文挑战第30天】本文探讨了Flutter应用的性能优化和内存管理。关键点包括:减少布局重绘(使用`const`构造函数和最小化依赖),选择合适的动画实现,懒加载和按需加载以提升性能。同时,强调了避免内存泄漏和优化内存使用,利用Flutter提供的性能分析工具。实践案例展示了如何优化ListView,包括使用`ListView.builder`和缓存策略。通过这些方法,开发者可以提升应用的响应性、流畅性和稳定性。
【Flutter前端技术开发专栏】Flutter中的性能优化与内存管理
|
4天前
|
存储 定位技术 开发工具
Android 开发前的设计,Android之内存泄漏调试学习与总结
Android 开发前的设计,Android之内存泄漏调试学习与总结
|
6天前
|
存储 缓存 Java
安卓应用开发中的内存优化策略
【5月更文挑战第14天】在移动应用的开发过程中,尤其是对于资源受限的安卓平台,内存管理与优化是提升性能和用户体验的关键。本文将探讨针对安卓应用开发的内存优化技巧,包括避免内存泄漏、合理使用数据结构和算法、以及利用安卓系统的垃圾回收机制。通过这些方法,开发人员可以有效减少应用对系统资源的占用,从而延长电池寿命并提高应用的稳定性。
|
6天前
|
存储 Java Android开发
安卓应用开发中的内存优化策略
【4月更文挑战第30天】在移动开发领域,尤其是安卓平台上,内存管理是影响应用性能和用户体验的关键因素。由于安卓设备的硬件资源有限,不合理的内存使用会导致应用响应缓慢、消耗过多电量甚至崩溃。本文将探讨针对安卓平台的内存优化技巧,旨在帮助开发者提高应用的性能和稳定性,从而提升用户满意度。我们将详细讨论内存泄漏的预防、合理的内存分配策略以及高效的内存回收方法。
|
6天前
|
Dart 前端开发 Java
【Flutter前端技术开发专栏】Flutter中的内存泄漏检测与解决
【4月更文挑战第30天】本文探讨了Flutter应用中的内存泄漏检测与解决方法。内存泄漏影响性能和用户体验,常见原因包括全局变量、不恰当的闭包使用等。开发者可借助`observatory`工具或`dart_inspector`插件监测内存使用。解决内存泄漏的策略包括避免长期持有的全局变量、正确管理闭包、及时清理资源、妥善处理Stream和RxDart订阅、正确 disposal 动画和控制器,以及管理原生插件资源。通过这些方法,开发者能有效防止内存泄漏,优化应用性能。
【Flutter前端技术开发专栏】Flutter中的内存泄漏检测与解决
|
6天前
|
Swift 开发者
【Swift开发专栏】Swift中的内存管理ARC机制
【4月更文挑战第30天】Swift的Automatic Reference Counting (ARC)自动管理内存,通过跟踪对象引用实现对象的释放。当引用计数为0时,系统回收内存。引用计数在变量赋值时增加,引用移除时减少。循环引用可能导致内存泄漏,Swift通过weak(可选)和unowned(非空)引用解决此问题,根据对象生命周期选择合适类型。理解ARC和正确处理循环引用是关键。
|
6天前
|
监控 Java Android开发
安卓应用开发中的内存优化策略
【4月更文挑战第29天】在面对安卓设备多样化的硬件配置时,合理管理应用内存成为提升用户体验的关键。本文深入探讨了安卓应用开发中常见的内存泄漏问题,并提出了一系列针对性的优化策略。通过分析内存分配机制、垃圾回收原理及内存监控工具的使用,揭示了高效内存管理的实践方法。文章旨在为开发者提供一套系统的内存优化解决方案,以实现更流畅、稳定的应用性能。
|
6天前
|
编解码 监控 Java
安卓应用开发中的内存优化策略
【4月更文挑战第13天】在面对安卓设备的多样化和资源限制时,高效的内存管理成为确保应用流畅运行的关键。本文将探讨针对安卓平台的内存优化技巧,从减少内存占用到提升垃圾回收效率,旨在帮助开发者构建更高效、响应更快的应用程序。
|
6天前
|
存储 Java Android开发
安卓应用开发中的内存优化策略
在移动应用开发过程中,特别是对于安卓系统,由于其碎片化和硬件配置的多样性,内存管理成为提升应用性能和用户体验的关键因素。本文将深入探讨安卓应用开发中常见的内存问题,并提出一系列实用的内存优化策略。这些策略不仅有助于减少应用崩溃的风险,还能显著提升应用的响应速度和流畅度。
20 2