汇编语言段地址的问题
那个X是假设CODE段地址为X,那么DATA段和STACK段和他的关系。我就是不知道他们为什么有这种关系...
那个X是假设CODE段地址为X,那么 DATA段和STACK段和他的关系。我就是不知道他们为什么有这种关系
展开
5个回答
展开全部
楼主说的:CODE段、DATA段、STACK段,这些,应该是编程时,自己写的段名称吧?
段名称,是自己瞎编的,看看下面的程序,就知道了。
编程时,可以自己定义几十、几百个段,这样的段,互相都是无关的。
程序运行后,段,就只有四个了,数据、代码、堆栈和附加。
程序运行后,把 A(或 B、C),送给 DS,这个 A(或 B、C)就成了数据段。
改变 DS,就可以改变数据段。
编程时定义的几十、几百个段,随意可以拿来一个当做数据段、代码...
数据、代码、堆栈和附加,这四个段,可以互相重叠,可以互相远离。
楼主怎么会认为它们有关系呢?
那么,楼主认为它们,有什么关系呢?
-------------
ASSUME CS:CODE
A SEGMENT ;段名称是A
DB 1, 2, 3, 4, 5, 6, 7, 8
A ENDS
B SEGMENT ;段名称是B
DB 1, 2, 3, 4, 5, 6, 7, 8
B ENDS
C SEGMENT ;段名称是C
DB 0, 0, 0, 0, 0, 0, 0, 0
C ENDS
CODE SEGMENT ;段名称是CODE
START:
MOV AX, A
MOV DS, AX
MOV AX, C
MOV ES, AX
MOV BX, 0
MOV CX, 8
S:
MOV AX, DS:[BX]
ADD ES:[BX], AX
ADD BX, 2
LOOP S
MOV AX, B
MOV DS, AX
MOV AX, C
MOV ES, AX
MOV BX, 0
MOV CX, 8
S0:
MOV AX, DS:[BX]
ADD ES:[BX], AX
ADD BX, 2
LOOP S0
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
段名称,是自己瞎编的,看看下面的程序,就知道了。
编程时,可以自己定义几十、几百个段,这样的段,互相都是无关的。
程序运行后,段,就只有四个了,数据、代码、堆栈和附加。
程序运行后,把 A(或 B、C),送给 DS,这个 A(或 B、C)就成了数据段。
改变 DS,就可以改变数据段。
编程时定义的几十、几百个段,随意可以拿来一个当做数据段、代码...
数据、代码、堆栈和附加,这四个段,可以互相重叠,可以互相远离。
楼主怎么会认为它们有关系呢?
那么,楼主认为它们,有什么关系呢?
-------------
ASSUME CS:CODE
A SEGMENT ;段名称是A
DB 1, 2, 3, 4, 5, 6, 7, 8
A ENDS
B SEGMENT ;段名称是B
DB 1, 2, 3, 4, 5, 6, 7, 8
B ENDS
C SEGMENT ;段名称是C
DB 0, 0, 0, 0, 0, 0, 0, 0
C ENDS
CODE SEGMENT ;段名称是CODE
START:
MOV AX, A
MOV DS, AX
MOV AX, C
MOV ES, AX
MOV BX, 0
MOV CX, 8
S:
MOV AX, DS:[BX]
ADD ES:[BX], AX
ADD BX, 2
LOOP S
MOV AX, B
MOV DS, AX
MOV AX, C
MOV ES, AX
MOV BX, 0
MOV CX, 8
S0:
MOV AX, DS:[BX]
ADD ES:[BX], AX
ADD BX, 2
LOOP S0
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
展开全部
楼主说的:CODE段、DATA段、STACK段,这些,
应该是编程时,自己写的段名称吧?
段名称,是自己瞎编的,不是非得写成 CODE ... 。
编程时写的段,是:【逻辑段】。
编程时,你可以编写千千万万个【逻辑段】。
段名称,由你自己随便定义。(当然,随便,也有一定的限制。)
但是,当程序运行时,CPU 只能用四个【逻辑段】。
用那四个呢? 你应该会了。
王爽的教材,就是一滩垃圾,学着学着,就被误导了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有任何关系,各个段都是独立的,实验5的code是指令段,data是数据段,stack是栈段,没有联系呀
追问
是不是根据分配的先后?段地址可能存在联系?
追答
不可能存在联系,刚学汇编时候没有吧段分开,数据都在指令段里,所以数据的地址都是连续的,你可以能存疑的就是这一点。但是到实验五时候,就把段分开描述了,这样不至于混乱,每个段的地址是单独从0开始的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
data, stack 和 code段地址没有任何关系,保存在哪个寄存器,完全是x86体系结构决定的。
更多追问追答
追问
但是 我看王爽的汇编语言。第六章实验5 都是有关系的,好像都是连续的 所以这点很疑惑
追答
没有任何关系
你们看的汇编,那是教程。一般采用的是实模式。
data, stack, code段地址可以随便定义。
在实际的OS实现中,比如linux, 一般都不使用这些特点。
直接把 data, code的起始点设置为0.当然都是在保护模式下面。
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询