数据段大小, 要看程序需要啦~
【我们可以把长度N(N≤64KB)的一组地址连续,起始地址为16的倍数的内存单元作为XX空间来用,从而定义了一个XX段】
当定义字节不足16的时候,编译器自动把你定义的数据段分配成16个字节,也即,不足一个分配16,不足32字节的话,分配成32个字节
比如:
=========================
d:\ASM>type jo.asm
assume cs:code
;定义a段一个字节,字符D
a segment
db 'D'
a ends
;定义b段20个E
b segment
db 20 dup ('E')
b ends
code segment
start:
mov ax,a
mov ds,ax;把a段作为数据段DS
mov ax,b
mov es,ax;把b段作为附加段ES
mov ah,4ch
int 21h
code ends
end start
===============================
d:\ASM>
d:\ASM>debug jo.exe
-r
AX=0000 BX=0000 CX=003E DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14B9 ES=14B9 SS=14C9 CS=14CC IP=0000 NV UP EI PL NZ NA PO NC
14CC:0000 B8C914 MOV AX,14C9
-t
AX=14C9 BX=0000 CX=003E DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14B9 ES=14B9 SS=14C9 CS=14CC IP=0003 NV UP EI PL NZ NA PO NC
14CC:0003 8ED8 MOV DS,AX
-t
AX=14C9 BX=0000 CX=003E DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C9 ES=14B9 SS=14C9 CS=14CC IP=0005 NV UP EI PL NZ NA PO NC
14CC:0005 B8CA14 MOV AX,14CA
-t
AX=14CA BX=0000 CX=003E DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C9 ES=14B9 SS=14C9 CS=14CC IP=0008 NV UP EI PL NZ NA PO NC
14CC:0008 8EC0 MOV ES,AX
-t
AX=14CA BX=0000 CX=003E DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=14C9 ES=14CA SS=14C9 CS=14CC IP=000A NV UP EI PL NZ NA PO NC
14CC:000A B44C MOV AH,4C
-d ds:0 2f ;第一行就是a段,即DS段,我们定义了一个总结,它却给我们分配了16个字节
14C9:0000 44 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 D...............
14C9:0010 45 45 45 45 45 45 45 45-45 45 45 45 45 45 45 45 EEEEEEEEEEEEEEEE
14C9:0020 45 45 45 45 00 00 00 00-00 00 00 00 00 00 00 00 EEEE............
-d es:0 2f;我们定义的ES段是20个字母E,这里, 他分配成32个空间
14CA:0000 45 45 45 45 45 45 45 45-45 45 45 45 45 45 45 45 EEEEEEEEEEEEEEEE
14CA:0010 45 45 45 45 00 00 00 00-00 00 00 00 00 00 00 00 EEEE............
14CA:0020 B8 C9 14 8E D8 B8 CA 14-8E C0 B4 4C CD 21 96 FC ...........L.!..
-q |