assembly - 什么管理 RAM?

标签 assembly operating-system memory-management ram

当汇编程序在没有操作系统的机器上编译和运行时,如何选择 RAM 中的起始地址,以便正确分配用数据指令声明的变量?

最佳答案

如前所述,CPU 期望启动程序所在的地址通常是硬连线的。在某些非常特定的 CPU 等情况下,它可能是可编程的,但在 x86 的情况下,它是 FFFF0,或者 - 更准确地说 - FFFFFFF0,因此比 CPU 的最高物理地址低 16 个字节。主板通常将这些地址映射到 ROM,其中包含(很可能)跳转到 BIOS 代码,然后启动计算机。

当涉及到操作系统本身时,他们选择在哪里加载程序,然后他们进行实际加载,并将执行转移给它。例如,在 DOS 的情况下,简单的小应用程序(那些作为 COM 文件分发的应用程序)在地址 100 加载,然后命令提示符执行跳转到该地址,有效地开始执行在该地址加载的代码。对于使用虚拟内存的更先进的系统,问题当然更复杂。

关于assembly - 什么管理 RAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132371/

相关文章:

linux - 在用户空间用 C 加载 ELF 文件

windows - Windows 上的 GNU 汇编器 : WriteFile returns ERROR_INVALID_HANDLE

ios - 核心数据 : Memory not released after manually faulting managed objects

c - 内存泄漏链表

linux - 作为对在 Fedora linux 中加载程序的响应,killed 是什么意思?

assembly - 为什么内存部分命名法以 '.' 为前缀

operating-system - 带测试和集合的有界等待互斥

java - 我们如何从 SWING 应用程序打印文档

java - Java是如何实现锁的

C 程序吃掉了我所有的 RAM+SWAP 资源