当前位置:首页 » 电脑资讯 » 编译文件为什么要分段

编译文件为什么要分段

发布时间: 2022-01-26 08:41:39

A. 8086/8088系统中,存储器为什么要分段,一个段的最大和最小各为多少字节

8086/8088系统中,存储器分段的主要目的是便于存储器的管理,使得可以用16位寄存器来寻址20位的内存空间。一个段最大为64KB,最小为16B。

存储器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。

由于存储器的个数和容量都有限,不可能把所有中间结果都存储在存储器中,所以,要对存储器进行适当的调度。根据指令的要求,管理安排适当的寄存器,避免操作数过多的传送操作。

8086/8088CPU可直接寻址1MB的存储器空间,直接寻址需要20位地址码,而所有内部寄存器都是16位的,只能直接寻址6KB,因此采用分段技术来解决。将1MB的存储空间分成若干逻辑段,每段最长64KB,最短16B。这些逻辑段在整个存储空间中可浮动。

(1)编译文件为什么要分段扩展阅读:

8086/8088CPU内部设置了4个16位段寄存器,它们分别是代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS、附加段寄存器ES、由它们给出相应逻辑段的首地址,称为“段基址”。段基址与段内偏移地址组合形成20位物理地址,段内偏移地址可以存放在寄存器中,也可以存放在存储器中。

程序较小时,代码段、数据段、堆栈段可放在一个段内,即包含在64KB之内,而当程序或数据量较大时,超过了64KB,那么可以定义多个代码段或数据段、堆栈段、附加段。

B. 请问Java中为什么把源文件和编译生成的类文件分开,这样做的好处是什么

java编写的是解释型程序而成c/c++编写的是编译型程序 c/c++编译的程序可以直接被操作系统直接运行 java编写的程序必须通过java虚拟机才能在操作系统运行 .class是java虚拟机能够识别的一种格式 要说好处 那就不好说了 只能说是编译型程序和解释型程序哪个好 而不能说.class文件有什么好处,这是个人学习软件的心得 ,希望能帮到你

C. 编译过程中,源程序为什么要通过中间代码生成目标程序

  1. 便于进行与机器无关的优化工作

  2. 使编译程序改变目标机容易,便于移植

  3. 使编译程序的结构在逻辑上更为简单明确

D. 为什么在编写程序时,把程序写在同一个文件编译成功,但是程序分开写就会出现错误

原因是多方面的。
例如,头文件,全局量,函数原型声明,大家都要用到,放在某一个文件里,别的文件就找不到了。
如果分开的文件里,有互相包含的头文件,你也许要加宏,避免矛盾。

一般来说,分开的文件,可以先编译,不链接,全编译完,再链接 obj 文件。

E. 汇编问题:文件分段每个段64k ,岂不是可执行程序编译出来最小64 k

每个段的最大值是64k,一个字节也可以占用一个段。

F. 论述编译过程的分段情况

问题1:BDD:通过目标文件归档程序(VC++中是lib.exe)和其它方式(例如由dll文件生成lib文件)得到的产物。问题2:AB问题3:不一定。首先,一个完整的程序的全编译过程可以仅依赖于现有的库文件,且不在这个程序的编译过程生成库文件。其次,库文件的格式不一定是lib和dll文件。至于手动生成lib和dll,这个和使用的工具相关。例如VC++的命令行可以用编译程序cl.exe编译源文件为目标文件,用归档程序lib.exe连接obj和lib文件生成静态库,用链接程序link.exe链接目标文件和资源文件生成exe和dll。====[原创回答团]

G. 汇编语言中为什么要定义段定义段有什么用请形象简明 解析~~谢谢

我补充一下:
这个也是和文件结构挂钩的
比如com文件就不分段,也可以说只有一个段,因为com文件规定这种可执行文件只能有一个段
楼主有兴趣可以看看DOS里面的EXE文件的文件结构

高级语言编译出来的程序其实也是分段的,因为现在在windows中通用的PE可执行文件也是分段的,但一般高级语言会屏蔽这些东西,只有汇编语言才能清晰的看到
事实上汇编语言也屏蔽了一些文件结构上的东西

H. C语言,为什么fscanf这一句在编译可过,但运行后显示此处分段错误

你前面判断漏了一个=号
if (fp == NULL)

I. 编译程序为什么有分前端和后端

随着大家对浏览器页面的视觉和交互要求越来越高,“套模板”的方式渐渐无法满足要求,这个所谓的表示层慢慢地迁移到浏览器当中去了,一大批像Angular, ReactJS之类的框架崛起,前后端分离。

后端的工程师只负责提供接口和数据,专注于业务逻辑的实现,前端取到数据后在浏览器中展示,各司其职,这种分工能够更好地节省时间,使产品的质量更好。

(9)编译文件为什么要分段扩展阅读:

GCC编译的前端将不同的高级编程语言经过词法分析、语法分析转化为与前端语言无关的统一的中间表示。有了与前端无关的中间表示,GCC的前端将不同的高级编程语言转换成这种中间表示,这就是GCC处理器支持多种编程语言的根本原因。

前端编译的主要作用,是将编写的 .java 文件 编译成 .class 文件,也就是我们常说的字节码文件;字节码 文件,里面包含了我们编写的 .java 代码中的运行逻辑,参数 以及 这些参数在内存中的分配。

J. 8086系统中的存储器为什么要采用分段结构有什么好处

8086CPU中的寄存器都是16位的,16位的地址只能访问64KB的内存。086系统中的物理地址是由20根地址总线形成的,要做到对20位地址空间进行访问,就需要两部分地址,在8086系统中,就是由段基址和偏移地址两部分构成。

这两个地址都是16位的,将这两个地址采用相加的方式组成20位地址去访问存储器。在8086系统的地址形成中,当段地址确定后,该段的寻址范围就已经确定,其容量不大于64KB。同时,通过修改段寄存器内容,可达到逻辑段在整个1MB存储空间中浮动。

各个逻辑段之间可以紧密相连,可以中间有间隔,也可以相互重叠(部分重叠,甚至完全重叠)。采用段基址和偏移地址方式组成物理地址的优点是:满足对8086系统的1MB存储空间的访问,同时在大部分指令中只要提供16位的偏移地址即可。

(10)编译文件为什么要分段扩展阅读

把段的起始单元的物理地址除以16的结果称为段地址,它为16位,写成十六进制是4位:XXXXH。显然,段地址决定了段在lMB空间中的位置。段内各存储单元相对段的起始单元都有一个距离,称为段内偏移量。

在对内存进行操作时,段地址先确定下来,然后给出不同的段内偏移量,就可以实现段内的寻址。段地址也是可以改变的,即段在1MB空间中的位置是可变的,因而可实现1MB的全范围寻址。

由于采用了分段结构,因此可以把每一个存储单元看成是具有两种类型的地址:物理地址和逻辑地址。物理地址就是实际地址,它具有20位的地址值,它惟一地标识1MB存储空间的某一存储单元。CPU与存储器之间的信息交换都是使用这个物理地址。

逻辑地址是编程时所使用的地址,它由段地址和段内偏移量组成。逻辑地址和物理地址的关系为:物理地址=段地址16+段内偏移量。由逻辑地址形成物理地址是由总线接口部件中的电路实现的。

热点内容
为什么眼睛会突然出现黑眼圈 发布:2024-09-20 00:22:21 浏览:229
为什么说系统软件不可卸载 发布:2024-09-20 00:03:33 浏览:338
为什么只是晚上有星星 发布:2024-09-19 23:42:27 浏览:608
苹果手机为什么没有触控ID与密码 发布:2024-09-19 23:19:07 浏览:557
为什么顺德的车牌跟佛山不一样 发布:2024-09-19 23:18:23 浏览:438
甲母质痣颜色为什么变浅 发布:2024-09-19 22:54:16 浏览:487
为什么学生手机都用vivo 发布:2024-09-19 22:48:03 浏览:946
为什么黑猪养着养着颜色就变淡了 发布:2024-09-19 22:46:59 浏览:930
海尔智家为什么这么多功能软件 发布:2024-09-19 22:42:14 浏览:675
为什么喝醉第二天情绪不好 发布:2024-09-19 22:27:26 浏览:103