+ -
当前位置:首页 → 问答吧 → 动态内存和变量地址

动态内存和变量地址

时间:2010-12-04

来源:互联网

动态内存网上找了下资料,还是不是很理解,想问下为什么在动态内存的情况下,变量地址会发生改变呢,有知道的朋友举个小例子,谢谢

作者: yg23hxj   发布时间: 2010-12-04

因为OS会跟根据内存情况动态的分配跟应用程序相应的地址, 这个地址通常不是绝对地址,举例说明吧还是!
比如这个简单程序
d:\MASM>type var.asm
assume cs:code,ds:data
data segment
a dw 1234h
data ends

code segment
start:
  mov ax,data
  mov ds,ax
  mov ax,a
  mov ah,4ch
  int 21h
code ends
end start

d:\MASM>
;注意cs,ds,ss,es值的变化
d:\MASM>debug var.exe
-r
AX=0000 BX=0000 CX=001C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14B9 ES=14B9 SS=14C9 CS=14CA IP=0000 NV UP EI PL NZ NA PO NC
14CA:0000 B8C914 MOV AX,14C9
-t

AX=14C9 BX=0000 CX=001C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14B9 ES=14B9 SS=14C9 CS=14CA IP=0003 NV UP EI PL NZ NA PO NC
14CA:0003 8ED8 MOV DS,AX
-t

AX=14C9 BX=0000 CX=001C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C9 ES=14B9 SS=14C9 CS=14CA IP=0005 NV UP EI PL NZ NA PO NC
14CA:0005 A10000 MOV AX,[0000] DS:0000=1234
-d ds:0 f
14C9:0000 34 12 00 00 00 00 00 00-00 00 00 00 00 00 00 00 4...............
-q
;下面再加入一个程序,这是一个TSR程序
;注意四个段寄存器值的变化
d:\MASM>tsr
I am already installed in the memory!
d:\MASM>debug var.exe
-r
AX=0000 BX=0000 CX=001C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14F7 ES=14F7 SS=1507 CS=1508 IP=0000 NV UP EI PL NZ NA PO NC
1508:0000 B80715 MOV AX,1507
-t

AX=1507 BX=0000 CX=001C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14F7 ES=14F7 SS=1507 CS=1508 IP=0003 NV UP EI PL NZ NA PO NC
1508:0003 8ED8 MOV DS,AX
-t

AX=1507 BX=0000 CX=001C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=1507 ES=14F7 SS=1507 CS=1508 IP=0005 NV UP EI PL NZ NA PO NC
1508:0005 A10000 MOV AX,[0000] DS:0000=1234
-d ds:0 f
1507:0000 34 12 00 00 00 00 00 00-00 00 00 00 00 00 00 00 4...............
-q

d:\MASM>

作者: masmaster   发布时间: 2010-12-04