段定义伪操作

在学习汇编语言的过程中,发现指令过多、过于复杂、而且也不太好记,但这又是不可避免的。刚开始看了一遍伪操作,部分理解,但是不深刻还是不会用,所以把学习的每一步尽量记录下来,便于自己理解。参考书籍《IBM-PC汇编语言程序设计》,废话就不多讲了,有些知识点必须多看,多用,多分析。


1. 完整的段定义伪操作
 汇编程序在把源程序转换成目标程序时,必须确定标号和变量(代码段和数据段的符号地址)的偏移地址,并且需要把有关信息通过目标模块传送给连接程序,以便连接程序把不同的段和模块连接在一起,形成一个可以执行程序。
 格式:
    segment-name SEGMENT
    …
    …
    segment-name ENDS
 注意:其中省略号部分,对于数据段、附加段、堆栈段来说,一般是存储单元的定义、分配等其他伪操作;但是对于代码段则是指令及伪操作。
ASSUME :明确段与段寄存器的关系,指定某个段分配给哪一个段寄存器,仅仅关联段名(除CS外),以便在访问段内变量时程序可以知道用哪个段寄存器,并没有在程序加载时将段地址装入段寄存器。
 举例:
     mydata segment
    assume ds:mydata
    start:
    move ax,mydata
    move ds,ax 

    mydata ends
 对段定义作进一步地控制,SEGMENT伪操作还可以增加类型 属性的说明
 格式:segment-name SEGMENT [align_type] [combine_type] [use_type] [‘class’]
 1. 定位类型(align_type)
   说明段的起始地址应有怎样的边界值。

类型解释
PARA指定段的起始地址必须从小段边界开始,即段起始地址的最低16进制数位必须为零,这样,偏移地址可以从零开始
BYTE该段可以从任何地址开始,起始地址不一定是零
WORD该段必须从字的边界开始,即段起始地址必须为偶数
DWORD该段必须从双字的边界开始,即段起始地址的最低十六位必须为4的倍数
PAGE该段必须从页的边界开始,即段起始地址的最低两个十六位进制数必须为零(该地址能被256整除)




其他的属性就不说明了,看了很懵逼。以后用到再详细研读。


2. 存储类型与简化段定义伪操作
(1)MODLE伪操作
   格式:.MODLE memory_modle [,modle options]
   用来表示存储类型(memory_type),即用来说明在存储器中是如何安放各个段的,例如:代码段在程序中如何安排,代码的寻址是近还是远…根据他们的不同组合,总共有七种存储模型。

模型说明
Tiny所有的数据和代码都放在一个段内,其数据和代码都是近访问。Tiny程序可以写成.COM文件的形式,COM程序必须从0100H的存储单元开始,这种模型用于小程序。
Small所有的数据放在一个64KB的数据段内,所有的代码放在另一个64KB的段内,数据和代码也都是近访问,应用程序最常用的模型。
Medium代码段使用多个段,一般是一个模块一个段,而数据单则合并成一个64KB的段组,这样,数据都是近访问的,而代码可以远访问。
Compact所有的代码都放在一个64KB的代码段内,数据则可放在多个段内,形成代码都是近访问的,而数据可以远访问。
Large代码和数据都可用多个段,所以数据和代码都可以远访问。
Huge与Large模型相同,其差别就是允许数据段的大小超过64KB。
Flat允许用户用32位偏移量,但DOS下不允许使用这种模型,只能在OS/2下或其他保护模式的操作系统下使用。

  modle options 允许用户指定三种选项:高级语言接口、操作系统、堆栈举例。
  1. 高级语言接口选项:指该汇编语言程序作为某一种高级语言程序的过程而为该高级语言程序调用时,应该如C,BASIC、FORTRAN、PASCAL等加以说明。
  2. 操作系统选项:要说明程序运行于哪个操作系统下,可用OS_DOS或OS_OS2来说明,默认项是OS_DOS。
  3. 堆栈距离选项:可用NEARSTACK或FARSTACK来说明,其中NEARSTACK是指把堆栈和数据段组合到一个DGROUP段中,DS和SS均指向DGROUP段;FARSTACK是指堆栈和数据段并不合并,当存储模型为TINY、SAMLL、MEDIUM、FLAT时,默认项为NEARSTACK;当存储模型为COMPACT、LARGE、HUGE时,默认项为FARSTACK。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值