注册 登录
编程论坛 汇编论坛

关于子程序的一个问题

wingfeng 发布于 2009-10-24 16:43, 587 次点击
一般的主程序中有如下代码
code segment
assume cs:code,ds:data
...
code ends

而位于不同代码段的子程序该如何写?? 我在一些地方看到如下所示
code2 segment 'code'
assume cs:code2

请问,这个格式应该怎么样啊??'code'这个干吗的?? 还有assume中为什么没有ds:data???
3 回复
#2
东海一鱼2009-10-25 10:13
建议楼主找本最基础的MASM语法书看看,这些是最基本的段和段属性定义。设置段属性的目的是让汇编器可以根据属性把段和在一起。

这也是最原始的模块化编程的方式(多代码段、数据段)。
#3
wingfeng2009-10-25 11:24
回复 2楼 东海一鱼
我那个书上没有写的样子,所以我来这里问问,知道的告诉我下,谢谢了!!
#4
东海一鱼2009-10-25 20:03
段名 segment [定位] [组合] [段字] [’类别’]
                ... ;语句序列
       段名 ends
  
      SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令表示一个段的结束。段定义指令后的4个关键字用于确定段的各种属性,堆栈段要采用stack组合类型,代码段应具有‘code’类别,其他为可选属性参数。如果不指定,则采用默认参数;但如果指定,注意要按照上列次序。
  
(1) 段定位(align)属性——指定逻辑段在主存储器中的边界:
        BYTE:段开始为下一个可用的字节地址(xxxx xxxxb),属性值为1
        WORD:段开始为下一个可用的偶数地址(xxxx xxx0b),属性值为2
        DWORD:段开始为下一个可用的4倍数地址(xxxx xx00b),属性值为4
        PARA:段开始为下一个可用的节地址(xxxx 0000b),属性值为16
        PAGE:段开始为下一个可用的页地址(0000 0000b),属性值为256
      简化段定义伪指令的代码和数据段默认采用WORD定位,堆栈段默认采用PARA定位。完整段定义伪指令的默认定位属性是PARA。
  
(2) 段组合(Combine)属性——指定多个逻辑段之间的关系:
        PRIVATE:本段与其他段没有逻辑关系,不与其他段合并。这是完整段定义伪指令默认的段组合方式。
        PUBLIC:连接程序把本段与所有同名同类型的其他段相邻地连接在一起,指定一个共同的段地址。这是简化段定义伪指令默认的段组合。
        STACK:本段是堆栈的一部分,这是堆栈段必须具有的段组合。
  
(3) 段字(Use)属性——这是为支持32位段而设置的属性。
        对于16位x86 CPU来说,它默认是16位段,即USE16。而对于汇编32位x86 CPU指令时,它默认采用32位段,即USE32;但可以使用USE16指定标准的16位段。编写运行于实地址方式(8086工作方式)的汇编语言程序,必须采用16位段。
  
(4) 段类别(Class)属性——当连接程序组织段时,将所有的同类别段相邻分配。
         段类别可以是任意名称,但必须位于单引号中;大多数MASM程序使用’code’、’data’和’stack’来分别指名代码段、数据段和堆栈段,以保持所有代码和数据的连续。
1