. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  代码段、数据段也是段吗?为什么段最小是16Byte,而代码段,数据段却可以是10字节?  [待解决] 回复[ 1次 ]   点击[ 444次 ]  
13784632020
[帖 主]   [ 发表时间:2010-07-10 16:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-07-02 05:46
如题。
    本来在第二章中好不容易把段最小是16Byte似乎弄明白了,可是到了第三章,代码段、数据段这儿又糊涂了,书上讲小于等于64K即可,举例时也举了只有10字节的数据段,如53页,下数第二三行,“123B0H--123B9H......是一个数据段,它的段地址是123B,长度为10个字节”。

    求人解惑。。。。。
masmaster
[第1楼]   [ 回复时间:2010-07-10 17:18 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
数据段大小, 要看程序需要啦~
【我们可以把长度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
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved