上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
堆栈段的说明
作者:未知 申领版权
2010年12月12日 共有 1829 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    堆栈段的说明
    堆栈段是一个特殊的段,在程序中可以定义它,也可以不定义。除了要生成COM型执行文件的源程序外,一个完整的源程序一般最好定义堆栈段。如果在程序中不定义堆栈段,那么,操作系统在装入该执行程序时将自动为其指定一个64K字节的堆栈段。
    在程序没有定义堆栈段的情况下,在由连接程序生成执行文件时,将会产生一条如下的警告信息,但程序员可以不理会它,所生成的执行文件是可以正常运行的。
    warning xxxx: no stack segment  (其中:xxxx是错误号)
    在源程序中,可用以下方法来定义堆栈段。
    

方法1:
    
 
    
STACK1
    
SEGMENT
    
 
    
DB  256 DUP(?) 
    
;256是堆栈的长度,可根据需要进行改变
    
TOP
    
LABEL  WORD
    
STACK1
    
ENDS
    

 
    
    

以上堆栈段的定义如图6.1所示。由于堆栈是按地址从大到小的存储单元顺序来存放内容的,所以,在堆栈存储单元说明语句之后,再说明一个栈顶别名,这样,对栈顶寄存器SP的赋值就很方便。
    在源程序的代码段中,还要添加如下程序段,才能把段STACK1当作堆栈段来使用。
    
 
    
    
 
    

    
ASSUME
    
SS:STACK1
    
;可在代码段的段指定语句中一起说明
    
CLI
    
;禁止响应可屏蔽中断
    
MOV
    
AX, STACK1
    
MOV
    
SS, AX
    
MOV
    
SP, offset TOP
    
;给堆栈段的栈顶寄存器SP赋初值
    
STI
    
;恢复响应可屏蔽中断
    

    

 
    上述段定义说明了该段是堆栈段,系统会自动把段寄存器SS和栈顶寄存器SP与该堆栈段之间建立相应的关系,并设置其初值,而不用在代码段对它们进行赋值。
    除了以上二种方法外,还有一种更简洁的方法来定义堆栈段,有关内容请见第6.4.2节中的叙述。
    
    6.1.4 源程序的结构
    下面的程序是一个完整的源程序,其功能是在屏幕上显示字符串“Hello, World.”。读者可参考此结构编写自己的简单程序。
    例6.2 在屏幕上显示字符串“HELLO,WORLD.”
    解:可运行下面的控件,用鼠标左键单击程序中的某一行,可阅读其含义;单击“内存”可切换内存内容的显示方式。
    
    伪指令END表示源程序到此为止,汇编程序对该语句之后的任何内容都不作处理,所以,通常情况下,伪指令END是源程序的最后一条语句。
    伪指令END后面可附带一个在程序中已定义的标号,由该标号指明程序的启动位置。
    如果源程序是一个独立的程序或主模块,那么,伪指令END后面一定要附带一个标号;如果源程序仅是一个普通模块,那么,其END后面就一定不能附带标号。
    汇编入门(11讲)
    时间:2009-5-16 8:36:16 
    核心提示:6.2 程序的基本结构在学习高级语言程序设计时,我们知道了程序的三大主要结构:顺序结构、分支结构和循环结构。在汇编语言的源程序也同样有此三大结构,所不同 的是它们的表现形式不同。用高级语言编写程序时,由于不使用“转移语句”而使这三种结构清晰明了。但在汇编语言的源程序中,很难不使用“转移语句”(除非 是一...
    6.2 程序的基本结构
    在学习高级语言程序设计时,我们知道了程序的三大主要结构:顺序结构、分支结构和循环结构。在汇编语言的源程序也同样有此三大结构,所不同的是它们的表现形式不同。用高级语言编写程序时,由于不使用“转移语句”而使这三种结构清晰明了。
    但在汇编语言的源 程序中,很难不使用“转移语句”(除非是一些只有简单功能的程序),有时甚至会有各种各样的“转移语句”。由于存在这些转移语句,就使得:汇编语言源程序 的基本结构显得不太明确。如果源程序的编写者思维混乱,编写出来的源程序在结构上就会显得杂乱无章,反之,如果编写者条理清晰,安排的操作井然有序,那 么,编写出来的程序在结构上就会一目了然。
    总之,不论是高级语言的源程序,还是汇编语言的源程序,其程序的三大基本结构也还是万变不离其宗的。
    6.2.1 顺序结构
    顺序结构是最简单的程序结构,程序的执行顺序就是指令的编写顺序,所以,安排指令的先后次序就显得至关重要。另外,在编程序时,还要妥善保存已得到的处理结果,为后面的进一步处理直接提供前面的处理结果,从而避免不必要的重复操作。
    例6.3 编写程序段,完成下面公式的计算(其中:变量X和Y是32位有符号数,变量A,B和Z是16位有符号数)。
    A←(X-Y 24)/Z的商,B←(X-Y 24)/Z的余数
    

方法2:
    
 
    
STACK1
    
SEGMENT  STACK
    
;定义一个堆栈段,其段名为STACK1
    
    DB  256 DUP(?)
    
STACK1
    
ENDS
    
解:
    
 
    
DATA1
    
SEGMENT
    
 
    
X
    
DD  ?
    
Y
    
DD  ?
    
Z
    
DW  ?
    
A
    
DW  ?
    
B
    
DW  ?
    

    
DATA1
    
ENDS
    
CODE1
    
SEGMENT
    

    
MOV
    
AX, X
    
MOV
    
DX, X 2
    
;用(DX:AX)来保存32位变量X的数值
    
SUB
    
AX,Y
    
SBB
    
DX, Y 2
    
;(DX:AX)-(Y 2:Y)
    
ADD
    
AX, 24D
    
ADC
    
DX, 0
    
;(DX:AX) 24
    
IDIV
    
Z
    
MOV
    
A, AX
    
MOV
    
B, DX
    

    
CODE1
    
ENDS
    

在编程序时,常常需要交换二变量之值。假设需要交换值的变量名为:var1和var2,临时增加的变量名为temp。常用的算法如下:
    temp = var1
    var1 = var2
    var2 = temp
    
    例6.4 假设有二个字变量word1和word2,编写程序段实现交换其值的功能。
    

解:
    
方法1:用汇编语言指令简单“直译”上面的 交换数据方法
    
 
    
DATA1
    
SEGMENT
    

    
word1
    
DW  ?
    
word2
    
DW  ?
    
temp
    
DW  ?
    

    
DATA1
    
ENDS
    
CODE1
    
SEGMENT
    

    
MOV
    
AX, word1
    
MOV
    
temp, AX
    
;上二语句实现语句“temp=word1”
    
MOV
    
AX, word2
    
MOV
    
word1, AX
    
;上二语句实现语句“word1=word2”
    
MOV
    
AX, temp
    
MOV
    
word2, AX
    
;上二语句实现语句“word2=temp”
    

    
CODE1
    
ENDS
    

这种方法虽然也能完成功能,但显然其不能充分利用汇编语言的特点,程序效率很低。
    该方法充分利用了汇编语言的特点,不仅省去了中间变量temp的定义,而且程序的效率也提高了。
    

 

相关新闻

金属活动性顺序
任务转换
实模式
保护模式
汇编语言程序设计-顺序结构程序设计
地址表达式
存储器分段和地址的形成
数组元素的指针
数组名作函数参数

您可能对这些感兴趣  

干货分享|10本最受国外孩子喜爱的英文词典——上
从孩子的表现看父母的缺点!请家长对号入座,看看你是哪一类?
20条制作PPT的视觉原则
培训简史:培训者必知的历史轨迹
广田丰管理培训生人才培养调查报告
第4讲 作为上司的职业经理
第3讲 作为同事的职业经理
第2讲 作为下属的职业经理
第1讲 培养经理人的管理素养
酒店前台新员工上岗培训计划

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》