2016 - 2024

感恩一路有你

火箭附加段 汇编语言,请问变量定义在附加段和定义在数据段有什么区别啊?

浏览量:2726 时间:2021-03-11 22:32:42 作者:admin

汇编语言,请问变量定义在附加段和定义在数据段有什么区别啊?

在8086中,数据可以在任何地方定义,只要段寄存器的值在内存寻址之前是正确的

例如,如果数据是在代码段中定义的,则可以通过类为mov ax,CS:[BX]的方式进行寻址,或者CS的值可以提前发送到DS:

mov ax,CS

mov DS,ax

,则可以这样直接寻址:mov ax,[BX

]如果在附加段中定义,则附加段对应的段寄存器需要像数据段一样初始化

在保护模式下,默认情况下不能写入代码段,因此最好不要在保护模式

8086 CPU有20条地址线,最大可寻址内存空间为1MB。8086的寄存器只有16位,指令指针(IP)和索引寄存器(Si,DI)也是16位。用16位地址寻址1MB空间是不可能的。因此,需要对内存进行分段,即将1MB空间分成若干段,每段不超过64KB,并在8086中设置四个16位段寄存器来管理四段:CS为代码段,DS为数据段,SS为堆栈段,ES为附加段。对内存进行分段后,每个段都有一个段基址。段寄存器存储段基址的上16位。16位地址可以左移4位(后跟4个零),形成20位段基址。

内存为什么要分段?分成多少种段?段与段寄存器的区别?

我将讨论段寄存器:它是存储段地址的特殊寄存器。它有代码段CS(存储偏移地址寄存器IP)。注:这是8086和8088中的80386,后跟一个e,依此类推)。数据段DS(SP-BP)堆栈段SS(BX-Di-Si或16位)附加段es(用于字符串指令的Di)和FS-GS)每个段都有一个特定的起始地址,并且用途不同。代码段存储正在运行的程序,数据段存储当前正在运行的程序的数据。堆栈是一种数据结构。堆栈段定义堆栈所在的区域,附加段是附加数据段。段与段寄存器的关系:程序员在编写程序时,应按上述规定将程序的所有部分放在指定的段区域(放什么),每个段独立占用64KB的存储区域。为什么要分割?显然,为了方便管理,有一个术语叫做“分段存储管理”(和分页)。目的是满足用户(程序员)在编程和使用中的需求。例如,用户根据逻辑关系将作业划分为多个段,每个段从0开始编译。因此,要访问的逻辑地址是由段名称(段编号)和段编号内部偏移量(段地址中)组成的,因此非常必要。查看原始post>>

数据段:数据段通常指用于在程序中存储初始化全局变量的内存区域。数据段属于静态内存分配。

堆:堆用于在进程操作期间存储动态分配的内存段。它的大小不是固定的,可以动态地扩大或缩小。当一个进程调用malloc和其他函数来分配内存时,新分配的内存被动态地添加到堆中(堆被扩展);当free和其他函数被用来释放内存时,释放的内存被从堆中移除(堆被减少)

火箭附加段 汇编怎么定义附加段 代码段 数据段 堆栈段

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。