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

代码段数据段放在哪里

发布时间: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正在执行的程序压入堆栈保存起来。唤醒的时候可以很快的启动并继续执行睡眠前的服务。防止丢失数据。

阅读全文

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

热点内容
如何进行项目的计划编程 浏览:779
如何知道微信版本号 浏览:298
821bb改什么网站了 浏览:987
aspsql数据库怎么连接 浏览:290
qq上如何查看运动轨迹 浏览:836
魅族代码功能大全 浏览:618
qq群里下载的文件记录怎么删除怎么恢复吗 浏览:835
ug80草图视频教程 浏览:706
苹果手机录屏文件电脑无法播放 浏览:259
win10分区后如何重新分区 浏览:152
如何下载网页源文件 浏览:679
好友视频怎么传文件 浏览:452
编程的软件是用什么制作的 浏览:794
win10耳机和音响不同时响 浏览:955
爱奇艺更新后为什么不显示文件 浏览:371
iphone6指纹加密 浏览:164
易趣编程怎么联系 浏览:285
苏州拉拉群80后微信 浏览:924
sgt文件下载 浏览:378
115网盘能上传多大的文件 浏览:643

友情链接