导航:首页 > 数据分析 > 代码段数据段放在哪里

代码段数据段放在哪里

发布时间:2023-01-15 23:49:59

⑴ 汇编中把数据段和代码段定义在同一段内有好处么

好处是能让编译出来的程序节省几个字节的大小,另外能让你在写源码的时候少打几个字,因为不用弄数据段了嘛,不过在写大程序的时候最好是把数据段和代码段分开,因为那样更清晰.当然如果你认为把数据和代码放在一起更清晰的话,你可以坚持自己的性格

恩,这个位置是非常讲究的

第一:在代码段中定义的数据不能定义到CS:IP可能碰到的地方,因为变量一旦被CS:IP碰到的话,就会把数据当成指令执行了.CPU很生气,后果很严重.例子:

正确的定义:
code segment
var01 db 64
start:
mov ax,cx
mov ds,ax
mov al,var01
mov ax,4C00H
int 21H
;也可以把"var01 db 64"放在这行里,放在这里的话上面定义的数据就不能要了
;CPU在执行完int 21H之后CS:IP就飘到别的地方去了,所以不会执行到这里
code ends

错误的定义:
code segment
start:
mov ax,cx
mov ds,ax
var01 db 64 ;CPU在执行的时候会光顾这里,所以不能定义在这里
mov al,var01
mov ax,4C00H
int 21H
code ends

第二:数据最好是定义在代码段的最前面或者最后面,让代码段的一部分是数据,一部分是代码,不然你如果一会是数据,一会是代码的话,看源码的人会很生气的.但这条可能有例外的情况,例子:
code segment
start:
mov ax,cx
mov ds,ax
jmp OMG
var01 db 64 ;前一条指令会让CS:IP指向下面的那条指令
;如果你认为这样很美的话可以这么干
OMG:
mov al,var01
mov ax,4C00H
int 21H
code ends

宏定义定义在哪我不知道有什么影响,不过一般好像都是定义在程序开头的
子程序定义在start前面或者
mov ax,4C00H
int 21H ;(也就是程序返回代码)
后面都一样
也可以通过前面那个例子里,用jmp弄出一段不会直接执行的空间,这样:
code segment
var01 db 64
start:
mov ax,cx
mov ds,ax
jmp OMG1
OMG2:
mov al,var01
ret
OMG1:
call OMG2
mov ax,4C00H
int 21H
code ends

我感觉这种方法非常2,其实子程序应该放在一起,像这样:
code segment
var01 db 64
start:
mov ax,cx
mov ds,ax
call OMG1
call OMG2
mov ax,4C00H
int 21H
OMG1:
mov al,var01
ret
OMG2:
xor al,al
ret
code ends

⑵ 汇编语言dw后面的数据放哪里ds还是cs

这部分一般在数据段定义 ds存放数据段段地址 cs存放代码段段地址 一般会在代码段中有这两句 mov ax,data mov ds,ax 作用是把data数据段的段地址送给ds 这样就实现了ds中地址是你定义的数据的段地址 cs中存放的代码段的段地址 它和IP组合CS:IP 可以指向代码段的某一条指令 这样机器就知道从什么地方开始执行指令了 执行一条后 IP自动加上刚刚执行的指令的长度 这样CS:IP就指向了下一句 这样就实现了一条接一条的来执行指令
但愿对你有帮助

⑶ 程序的指令存放在哪个逻辑段

存储器。
逻辑段就是程序设计中的数据分段不同的程序有不同的几个分段。在8086的程序设计中,一个程序可以有代码段CS、数据段SS、堆栈段SS和附加段ES。代码段CS用于存放程序;数据段SS和附加段ES用于存放数据;堆栈段SS用于存放数据(包括暂存数据和保护现场的数据)。在形成物理地址时,CS、DS、ES和SS四个段寄存器的作用如下:当取指令时,CPU以CS寄存器的值作段基址,再加上IP中的16位偏移地址,得到指令的物理地址。

⑷ 汇编语言 数据段 代码段 堆栈段 数据怎么看

较好的编程习惯是代码段放代码、数据段放数据、栈段用来保存环境恢复环境以及存放少量的局部变量。
但这些分段并不是绝对的,早期的程序并没有这些规矩,代码、数据是容许混放的,16位的com格式的程序代码、数据段、附加数据段、栈段是容许同段的。
单独拿数据来说,数据是可以放在内存中的任何地方,只要容许你访问。数据可以放在代码段中,可以放在栈中,也可以放在系统的堆内存中。

⑸ 进程控制块,数据段,程序段各自在内存的什么地方

  1. 进程控制块(PCB)在系统内存中,可以和其他进程同步执行

  2. 数据段存在静态内存,用于保存程序已经初始化的变量

  3. 代码段紧接着数据段,也在静态内存中

  4. 另外还有保存局部变量的栈和保存动态分配空间的堆

    在内存中它们如下关系:

    ========高地址 =======
    程序栈 堆栈段
    向下增长
    空内存
    向上增长

    ------ 数据段
    BSS
    ------
    非零数据
    ========= =======
    代码 代码段
    ========= =======

    =========低地址 =======

    栈(存放着局部变量和函数参数等数据),向下生长 (可读可写可执行)
    堆(给动态分配内存是使用),向上生长 (可读可写可执行)
    数据段(保存全局数据和静态数据) (可读可写不可执行)
    代码段(保存代码) (可读可执行不可写)

⑹ 程序代码在内存中是怎样放置的

一个程序至少有两个段:数据段和代码段。顾名思义数据段用来存放数据,也就是变量和数组之类,而代码段则用来存放一个指令序列。这个指令序列就是编程语言汇编出来的最后结果,是一系列机器码所表示的处理数据的步骤。CPU依次按照这个序列来处理数据,这就是程序的执行

⑺ 单片机数据段属于ram的一部分,代码段属于rom的一部分,这样理解对吗

可以这样理解,单片机的数据存储器和程序存储器是分开的,计算产生的数据存放于RAM,而程序只能存放于ROM

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

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

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

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

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

(8)代码段数据段放在哪里扩展阅读:

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

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

⑼ 程序运行时,程序代码是在堆中还是在栈中还是在内存中

在内存中。
楼上说的没错,一般计算机的内存分为好几个区域,每个区域都有自己的特回殊的作用。堆栈是答用来暂时存放数据和地址的。通常用来保护断点和现场。在单片机中,发生中断的时候cpu会执行中断服务程序。然而在cpu执行中断服务程序之前会先把断点地址推入堆栈,把现场的数据也推入堆栈。当执行完中断服务程序的时候,可以找到断点的地址,然后继续执行主程序。比如说我们使用计算机的时候,让计算机睡眠的时候也是先把cpu正在执行的程序压入堆栈保存起来。唤醒的时候可以很快的启动并继续执行睡眠前的服务。防止丢失数据。

阅读全文

与代码段数据段放在哪里相关的资料

热点内容
cocoapods版本更新 浏览:361
国外it大神教你学习如何编程 浏览:312
手机存储应用程序 浏览:284
页面自适应屏幕如何调整代码数据 浏览:681
jsjson工具 浏览:299
数据库中如何备份一张表的数据 浏览:739
网络设备能用到什么 浏览:64
暴风转码如何添加文件夹 浏览:515
延安整合网络营销有哪些 浏览:74
查找word打开过的文件在哪里 浏览:137
b树java代码 浏览:683
电脑文件存储 浏览:657
兰州中考征集志愿在哪个网站 浏览:215
cs文件上传下载 浏览:244
拷贝文件到根目录下重命名linux 浏览:603
api函数的头文件 浏览:249
华为怎么绑定迷你编程 浏览:215
机构怎么申请少儿编程考级 浏览:495
昆山数控编程哪里好学 浏览:459
jspcfor跳出 浏览:65

友情链接