.MODEL用于表示所编写程序的代码 数据的大小
语法:.MODEL 内存模式(memorymodel)
下面这个表格提供了 内存模式 可以选择的模式种类
模式 | 说明 | 代码 | 数据 | 数组 |
SMALL | 可以在里面存储一个代码段 可以在里面存储一个数据段 | O | O | X |
MEDIUM | 可以存储多个代码段 可以存储一个数据段 | ↑ | O | X |
COMPACT | 可以存储一个代码段 可以存储多个数据段 | O | ↑ | X |
LARGE | 一个存储多个数据段和代码段 不超过64K字节的数组 | ↑ | ↑ | O64KB |
HUGE | 一个存储多个数据段和代码段 超过64K以上的字节数组 | ↑ | ↑ | ↑64KB |
前面的文章提到了许多关于段的概念。那么,段是什么?
内存并没有分段,段的划分是来自于CPU的,将若干个地址连续的内存单元看做是一个段。
- 一个程序必须有:代码段,堆栈段,数据段;
- 程序运行的时候,需要把程序加载到内存中,然后运行代码,并且运行过程中会保存一些数据到内存中
- 运行的代码放在代码段;程序的一些数据如已初始化并且不为0的全局变量会存放在数据段;堆栈段存放一些堆栈信息,临时变量等。
数据段:将一组内存单元定义为一个数据段;数据段是专门存储数据的内存空间。通常是指用来存放程序中已初始化且不为0的全局变量的一块内存区域。数据段属于静态内存分配。
使用.DATA来表示 ——下面是例子
.DATA BYT DB 10 WRD DW ? MSG DB 'HELLO',0DH,0AH, '$' LF EQU 0AH
堆栈段:通常是指采用堆栈方式工作的一段内存区域。在采用段式内存管理方式进行程序内存分配的架构中,堆栈段用来存放局部变量和函数返回地址。函数调用,中断返回都需要栈的支持
用法:.STACK大小(size)
例子:
.STACK 100H ;定义堆栈段,大小为100H(256byte)
代码段:通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许程序自修改(self-modifying code)。 在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
必须包含MAIN
用法:.CODE 名字(name)
1 条评论
[…] 汇编(7)内存模式 .MODEL/数据段/堆栈段/代码段 […]