《80x86汇编语言程序设计教程》习题2.45和2.46
来源:互联网 发布:5s是否支持4g网络 编辑:程序博客网 时间:2024/05/01 13:41
问:TC或BC的编译模式与存储器分段管理有什么关系?
问:TC或BC中使用的长指针的实质是什么?
在微模式下程序中的数据及代码均放在同一段内,即它们不超过 64KB。在微模式下代码段、堆栈段和数据段的段地址均相同,即CS=DS=SS=ES。
在小模式下,程序中的代码放在64KB的代码段内,数据放在64KB的数据段内。在小模式下,栈段、附加数据段和数据段均指向同一地址,它们合三为一,即DS=SS=ES,指针都是near,一般程序均采用小模式编译。
在中模式下,所有数据放在64KB的数据段内,因而数据段内使用near,代码量可以大于64KB(允许达到1MB),因而可以在不同的代码段内,代码段使用(far远程指针)。来自不同源文件的码模块放在不同的码段内。
C语言编译模式—紧凑模式(Compact)
在紧凑模式下,数据量超过64KB时,可放在多个数据段中,数据段内的指针是(far)。代码量不超过64KB,在一个段内,因而代码段内指针为近程的(near)。但在该模式下,静态数据仍不能超过64KB,堆用far指针来存取。代码、静态数据、堆栈、堆各有自己的段。堆只有远堆,没有近堆。
C语言编译模式—大模式(Large)
大模式下,代码及数据均采用far指针,且都可达到1MB。静态数据、堆栈、堆同紧凑模式,代码同中模式。静态数据仍跟紧凑模式一样,不能超过64KB。
C语言编译模式—巨模式(Huge)
巨模式下,代码段及数据段均用far指针,代码分布在不同的代码段内,数据也分布在不同的数据段内,它们来自不同的源程序,大堆栈只有一个。而且静态数据大小允许超过64KB。
紧凑模式、大模式、巨模式数据区大小均允许超过64KB,即可以用数据far指针对不同数据段内的数据进行存取,它们同称为大数据存储模式。但有一点不同:紧凑模式和大模式按 C 的规定,其静态数据,即如数组、结构或其他类型的数据被定义为静态类型时,其数据量不能超过64KB,而只有巨模式才允许超过64KB。在大数据存储模式下,堆和栈分别在不同段内,多以动态数据和局部变量的形式存放,这样就不受64KB大小的限制,栈的增长不会影响堆的空间。
无论采用哪一种编译模式,C源程序编译生成的代码和数据量都不能超过64KB,对于超过的源程序,可以视代码或数据多少将其分解成两个或多个程序分别编译。大代码量程序要选用大代码编译模式(中模式、大模式和巨模式),大数据量程序应选用大数据编译模式(紧凑模式、大模式和巨模式),这样编译生成的.obj 文件将会带给连接程序信息,将代码和数据安排在不同段内。这样生成的.exe 文件在加载时将告诉 DOS 该程序应如何装入代码段和数据段,如何初始化寄存器。这样,就可确定在不同编译模式下开辟数据区的大小,即大于64KB,或不超过64KB。
在tiny、small模式下,所有的函数定义、全局变量定义和指针变量的定义,如果没有显示的加上far、near、huge等关键字,都默认为使用了near关键字;在medium模式下,函数定义默认使用了far关键字,变量定义默认使用了near关键字;在compact模式下函数定义模式使用了near关键字,变量定义默认使用了far关键字;large模式下函数定义和变量定义模认使用了far关键字;huge模式下函数定义模认使用了far关键字,变量定义默认使用了huge关键字。
早期16位计算机将内存中某段开始,寻址范围为2^16地址范围之内的指针叫做短指针,寻址范围超过前述范围的叫做长指针——因为寻址长指针需要更改段寄存器的内容,做法上和短指针有一些差别。
后来32为计算机使用“flat”内存模型,2^32地址范围(也就是4GB范围内的内存地址)内做寻址都不用修改段寄存器,就没有人再说长、短指针了。
- 《80x86汇编语言程序设计教程》习题2.45和2.46
- 80X86汇编语言程序设计教程(杨季文)习题答案一
- 80X86汇编语言程序设计教程(杨季文)习题答案二
- 80X86汇编语言程序设计教程(杨季文)习题答案三
- 80X86汇编语言程序设计教程(杨季文)习题答案四
- 80X86汇编语言程序设计教程(杨季文)习题答案一
- 80X86汇编语言程序设计教程 杨季文等编著 清华大学出版社
- 《80x86汇编语言程序设计教程》P212--STRSTR子程序
- 80X86 汇编语言程序设计(杨季文)习题答案 习题3-21
- 80X86 汇编语言程序设计(杨季文)习题答案 习题3-22
- 80X86 汇编语言程序设计(杨季文)习题答案 习题3-23
- 80x86汇编语言程序设计P50
- 《80x86汇编语言程序设计》学习笔记(1)
- 杨季文 80x86汇编语言程序设计 实例一
- 杨季文 80x86汇编语言程序设计 实例三
- 杨季文 80x86汇编语言程序设计 实例二
- 杨季文 80x86汇编语言程序设计 实例四
- 杨季文 80x86汇编语言程序设计 实例五
- 设计模式(二十二) 策略模式
- method Swizzling实践
- Java进阶之内存模型&并发编程
- GC日志分析
- leetcode:46. Permutations 排列
- 《80x86汇编语言程序设计教程》习题2.45和2.46
- LeetCode141. Linked List Cycle
- 在一个千万级的数据库查寻中,如何提高查询效率?
- Win系统svchost进程流量偷跑,如何永久杜绝?
- android:configChanges="keyboardHidden|orientation" 无效
- R语言ggplot2饼状图
- 文章标题:Android常见控件ImageView的使用方法
- ViewPager实现自动轮播效果
- 安卓Android自定义控件之自定义时钟