续:
;---------------------------------------------------------------------------------------------------------
三 个 段 的 程 序 规 划
;####################################################
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:EXTR
MOV AX,DATA
MOV DS,AX
MOV AX,EXTR
MOV ES,AX
;############################################
;# #
;# 程序指令区 #
;# #
;##############################################
MOV AH,4cH
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 AX,DATA算起),其用意最主要是DS与ES这二个段寄存器,分别真正指到所定义的内存变量所在的段上。
下面是3个段程序:
=====================================================================
四 个 段 的 程 序 规 划
;####################################################
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:EXTR,SS:STACK
MOV AX,DATA
MOV DS,AX
MOV AX,EXTR
MOV ES,AX
;############################################
;# #
;# 程序指令区 #
;# #
;##############################################
MOV AH,4cH
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:原则上用户定义堆栈区的定义,只要使用伪指令DW,DW。。。等等定义其长度即可,不必要有变量名,长度由用户自己来决定,但是最长不要超过64K。
好了关于汇编语言中对程序段的规划说明说完了,程序有了这些框架剩下的的血肉和程序的灵魂由你添加了。
END