acr突击步枪怎么样:汇编段地址
那位高手教教我
程序分为数据段DS,代码段CS,堆栈段SS,附加段ES
每一个程序都可以分成这几个部分(有时只有数据段和代码段,甚至只有代码段)。
比如下面程序,在结构上就是一个完整的程序:
DATA SEGMENT
……
DATA ENDS
EATA SEGMENT
……
EATA ENDS
SATA SEGMENT
……
SATA ENDS
CODE SEGMENT
ASSUME DS:DATA,ES:EATA,SS:SATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,EATA
MOV ES,AX
MOV AX,SATA
MOV SS,AX
……
……
……
CODE ENDS
END START
DATA,EATA,SATA都是自定义的段名字,这几个段 存在你的计算机上,因而每个段都对应一个内存地址。
我们把DATA在内存中的地址送入AX中,再从AX中送到段寄存器DS,这样程序就会“明白”你给它的数据段放在了哪里,要用到的时候它就“知道”该到哪里去找。
因此,所谓的段地址,就是DS,CS,ES,SS中的数值,也就是DATA,EATA,SATA,CODE这几个名字在计算机内存中的地址。
其他段也是如此,这样讲希望你能够明白。
CPU将存储器空间分成许多逻辑段,每个段最大限制为64KB,段地址就是逻辑段在主存中的起始位置。
一个程序可能有数据段,代码段,堆栈段等等
要访问他们就要知道他们的段地址然后加上偏移。
来拿一个简单的例子:
比如有如下数据段
data SEGMENT
a DB 31
b DB 1
c 100 DUP (?)
data ENDS
c定义为100个空单元,可以用来放入数据
那么要得到C的地址可以
MOV AX,data ;这里就是段地址
ADD AX,02h ;偏移地址
应该是代码段、数据段等的物理或逻辑地址