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

    第6章 程序的基本结构
    在前面几章,我们分别介绍了用汇编语言进行程序设计所需要的几个最基本的知识:内存单元的寻址方式变量定义各种汇编指令格式。在掌握了这些基本内容之后,就需要学习如何把它们组成一个完整的汇编语言程序。
    6.1 源程序的基本组成
    汇编语言源程序的组成部分有:模块、段、子程序等。一个模块对应一个目标文件,当开发较大型的应用程序时,该程序可能由若干个目标文件或库结合而成的。有关模块和子程序的知识和宏在第7章介绍,有关宏的知识将在第9章中叙述。
    6.1.1 段的定义
    微机系统的内存是 分段管理的,为了与之相对应,汇编语言源程序也分若干个段来构成。8086CPU有四个段寄存器,在该系统环境下运行的程序在某个时刻最多可访问四个段, 而80386及其以后的CPU都含有六个段寄存器,于是,在这些系统环境下开发的运行程序在某个时刻最多可访问六个段。
    不论程序在某个时刻最多能访问多少个段,在编程序时,程序员都可以定义比该段数更多的段。在通常情况下,一个段的长度不能超过64K,在80386及其以后系统的保护方式下,段基地址是32位,段的最大长度可达4G。
    段的长度是指该段所占的字节数:
    、如果段是数据段,则其长度是其所有变量所占字节数的总和;
    、如果段是代码段,则其长度是其所有指令所占字节数的总和。
    在定义段时,每个段都有一个段名。在取段名时,要取一个具有一定含义的段名。

    
段定义的一般格式如下:
    
 
    
段名
    
SEGMENT
    
[对齐类型]  [组合类型]  [类别]
    

    
;段内的具体内容
    

    
段名
    
ENDS
    

其中:“段名”必须是一个合法的标识符,前后二个段名要相同。可选项“对齐类型”、“组合类型”和“类别”的说明作用请见6.3节中的叙述。

    
一个数据段的定义例子:
    
 
    
DATA1
    
SEGMENT
    
word1
    
DW
    
1, 9078H, ?
    
byte1
    
DB
    
21, 'World'
    
DD
    
12345678H
    
DATA1
    
ENDS
    

 

    

    一个代码段的例子:
    
 
    
CODE1
    
SEGMENT
    
MOV
    
AX, DATA1
    
;把数据段DATA1的段值送AX
    
MOV
    
DS, AX
    
;把AX的值送给DS,即:DS存储数据段的段值
    

    
MOV
    
AX, 4C00H
    
INT
    
21H
    
;调用DOS功能,结束程序的运行
    
CODE1
    
ENDS
    

 
    6.1.2 段寄存器的说明语句
    在汇编语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一种对应关系。建立这种对应关系的说明语句格式如下:
    ASSUME  段寄存器名:段名[, 段寄存器名:段名, ……]
    其中:段寄存器是CS、DS、ES、SS、FS和GS,段名是在段定义语句说明时的段名。
    在一条ASSUME语句中可建立多组段寄存器与段之间的关系,每种对应关系要用逗号分隔。例如,
    ASSUME  CS:CODE1, DS:DATA1
    上面的语句说明了:CS对应于代码段CODE1,DS对应于数据段DATA1。
    在ASSUME语句中,还可以用关键字NOTHING来说明某个段寄存器不与任何段相对应。下面语句说明了段寄存器ES不与某段相对应。
    ASSUME  ES:NOTHING
    在通常情况下,代 码段的第一条语句就是用ASSUME语句来说明段寄存器与段之间的对应关系。在代码段的其它位置,还可以用另一个ASSUME语句来改变前面ASSUME 语句所说明的对应关系,这样,代码段中的指令就用最近的ASSUME语句所建立的对应关系来确定指令中的有关信息。

    
例6.1 汇编语言段及其段说明语句的作用。
    
 
    
DATA1
    
SEGMENT
    
;定义数据段DATA1
    
word1
    
DW  5678h
    
byte1
    
DB  "ABCDEFG"
    
DATA1
    
ENDS
    
DATA2
    
SEGMENT
    
;定义数据段DATA2
    
word2
    
DW  1234h
    
word3
    
DW  9876h
    
DATA2
    
ENDS
    
DATA3
    
SEGMENT
    
;定义数据段DATA3
    
byte2
    
DB  ?
    
DATA3
    
ENDS
    
CODE1
    
SEGMENT
    
;编写代码段CODE1
    
ASSUME
    
CS:CODE1, DS:DATA1, ES:DATA2
    
;(1)
    
MOV
    
AX, DATA1
    
;(2)
    
MOV
    
DS, AX
    
;(3)
    
MOV
    
AX, DATA2
    
;(4)
    
MOV
    
ES, AX
    
;(5)
    

    
MOV
    
AX, word1
    
;访问段DATA1中的字变量word1
    
MOV
    
word2, AX
    
;访问段DATA2中的字变量word2
    

    
ASSUME
    
DS:DATA3, ES:NOTHING
    
;(6)
    
MOV
    
AX, DATA3
    
MOV
    
DS, AX
    
MOV
    
BL, byte2
    
;访问段DATA3中的字节变量byte2
    

    
MOV
    
AX, 4C00H
    
;(7)
    
INT
    
21H
    
;(8)
    
CODE1
    
 ENDS
    

语句(1)和(6)分别说明了段和段寄存器之间的对应关系,其中语句(6)重新说明语句(1)所指定的对应关系。
    二组语句(2)和(3)、(4)和(5)实现对段寄存器DS和ES赋初值。ASSUME说明语句只起说明作用,它不会对段寄存器赋值,所以,必须对有关段寄存器赋值。在以后的其它源程序中也都是用此方法来实现对数据段寄存器赋值的。
    语句(7)和(8)是调用中断21H的4CH号功能来结束本程序的执行,程序的返回代码由寄存器AL来确定。结束本程序执行的指令是所有主模块必须书写的语句。
    注意:代码段寄存器不能由程序员在源程序中对其赋值,其值是由操作系统在装入它进入系统运行时自动赋值的。

    

 

相关新闻

成为运营大牛(数据二):数据使用的三测
成为运营大牛(数据一):运营中的那些数据
成为运营大牛(结构四):一图览运营
成为运营大牛(结构三):一张图看清活动运营
成为运营大牛(结构二):一张图看清内容运营
成为运营大牛(结构一): 运营的基础结构
考点:有机化学几个基本概念
考点:有机物,甲烷
考点:化学键和晶体结构
考点:元素周期表

您可能对这些感兴趣  

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

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

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