MASM汇编语言程序设计之---段的规划设计(二)



续:

;---------------------------------------------------------------------------------------------------------

           

;####################################################

   CODE SEGMENT

          ASSUME  CSCODEDSCODEESEXTR

          MOV  AXDATA

          MOV  DSAX

          MOV  AXEXTR

          MOV  ESAX

          ############################################

          ;#                                            #

          ;#             程序指令区                     #

          ;#                                            #

          ;##############################################

          MOV AH4cH

          INT   21H

   CODE ENDS

   ;#######################################################

   DATA  SEGMENT

        ;##############################################

         ;#                                            #

         ;#            存储器变量区                    #

         ;#                                            #

        ;##############################################

   DATA ENDS

;###########################################################

EXTR SEGMENT

        ;##############################################

         ;#                                            #

         ;#            存储器变量区                    #

         ;#                                            #

        ;##############################################

EXTR ENDS

      END

说明:

     1:这是个三个段的汇编语言程序规划。这样的规划方式可以使用内存192KB(程序指令64KB,内存变量128KB)。

     2:如果你设计的程序,其所要处理的内存变量在超过64KB以上时,才考虑到使用三个段的程序规划,但因内存一个段只有64KB,因此超出的部分必须放到另一个段内,使用这个规划特别注意所用的内存变量是位在那个段内,如果你没有指明其所在段的话,那系统就以DS(数据段)为其设段。

  3:上面程序是将程序指令放在程序段内部(CS),内存变量分成二部分分别放在数据段(DS)和额外段(ES)内,这里的最前面四段指令(从MOV AXDATA算起),其用意最主要是DSES这二个段寄存器,分别真正指到所定义的内存变量所在的段上。

下面是3个段程序:


=====================================================================

           

;####################################################

   CODE SEGMENT

          ASSUME  CSCODEDSCODEESEXTRSS:STACK

          MOV  AXDATA

          MOV  DSAX

          MOV  AXEXTR

          MOV  ESAX

          ############################################

          ;#                                            #

          ;#             程序指令区                     #

          ;#                                            #

         ;##############################################

          MOV AH4cH

          INT   21H

   CODE ENDS

  ;#######################################################

   DATA SEGMENT

        ;##############################################

         ;#                                            #

         ;#            存储器变量区                    #

         ;#                                            #

        ;##############################################

   DATA ENDS

;###########################################################

EXTR SEGMENT

         ;##############################################

         ;#                                            #

         ;#            存储器变量区                    #

         ;#                                            #

        ;##############################################

EXTR ENDS

;#############################################################

STACK SEGMENT STACK

        ;##############################################

         ;#                                            #

         ;#            堆栈数据区                      #

         ;#                                            #

        ;##############################################

STACK  ENDS

 

      END

说明:

   1:上面就是四个段的程序规划,这个规划方式可以使用到内存256K的长度(程序指令64KB,内存变量128KB,堆栈数据64KB)。

   2:如果你设计的程序的内存需求超过64KB以上,且进出堆栈数据很大时,就可以考虑用四个段的程序规划。

   3:堆栈区有2个,一为了系统内设的堆栈区(与程序段完全重叠,长度64KB)另外一个为了用户所定义的堆栈区。

这二个堆栈区在程序设计时就要决定到底用哪一个,如果是使用系统内设的堆栈区,那就不必要定义的手续就可直接使用,如果使用用户堆栈区,那就一定要有定义的手续才可以使用。你肯定会问:在什么情行之下,我们才需要定义用户堆栈区呢?

看图:

 

由上图我们就知道,只要程序指令的长度加上堆栈数据的长度,如果此长度超过64K以上时,就可得定义用户堆栈区了,而用户堆栈区的定义 。注意SEGMENT之后一定要加STACK字符串!

4:原则上用户定义堆栈区的定义,只要使用伪指令DWDW。。。等等定义其长度即可,不必要有变量名,长度由用户自己来决定,但是最长不要超过64K

好了关于汇编语言中对程序段的规划说明说完了,程序有了这些框架剩下的的血肉和程序的灵魂由你添加了。

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值