intel 汇编中的Descriptor(下篇文章有介绍)

intel 汇编中的Descriptor(下篇文章有介绍)此处多说一句在 intel 下汇编语言中的可以利用 STRUC 来定义 Descriptor 此处使用 masm 语法而在 Nasm 在宏文件有直接定义 Descriptor STRUC LIMITL DW 0 断界限 0 15 BASEL DW 0 段基址 0 15 BASEM DB 0

大家好,我是讯享网,很高兴认识大家。

此处多说一句在intel下汇编语言中的可以利用STRUC来定义Descriptor(此处使用masm语法而在Nasm在宏文件有直接定义)

Descriptor STRUC

LIMITL                    DW              0;断界限(0~15)

BASEL               DW              0;段基址(0~15)

BASEM                     DB        0;段基址(16~23)


讯享网

ATTRIBUTES    DW              0;

BASEH                     DB              0;

Descriptor    ENDS

以下划线部分补充说明:

摘自http://zhidao.baidu.com/question/98016185.html

重复说明符DUP只能用于重复同一数据类型的变量说明,它不可以重复不同数据类型的变量说明。为了把一组不同类型的变量说明组合在一起,汇编语言提供了另一种复合数据类型说明符——结构类型说明符STRUC。

讯享网
讯享网 
1、结构类型的定义
讯享网用STRUC和ENDS可以把一系列数据定义语句括起来作为一种新的、用户定义的结构类型。其一般说明格式如下:
结构名 STRUC [Alignment][, NONUNIQUE]
讯享网数据定义语句序列
结构名 ENDS
讯享网 
解释:结构名是一个合法的标识符,且具有唯一性。结构名代表整个结构类型,前后两个结构名必须一致。结构内被定义的变量为结构字段,变量名即为字段名。
讯享网 
一个结构中允许含有任意多个字段,各字段的类型和所占字节数也都可任意。如果字段有字段名,则字段名必须唯一。每个字段可独立存取。
讯享网 
对齐方式(Alignment):可用1、2或4来指定结构中字段的字节边界(Byte boundary),其缺省值为1。见4.3.2节中的有关叙述;
讯享网 
NONUNIQUE:要求结构中的字段必须用全名才能访问,见本小节中的“结构类型字段的引用”。
讯享网 
例如:
讯享网COURSE
  STRUC 在左上例中,COURSE是结构名,它含有三个字段:NO、CNAME和SCORE,它们的类型分别是DD、DB和DW。 
讯享网 NO DD ? 
 CNAME DB 'Assember' 
讯享网 SCORE DW 0 
COURSE
讯享网  ENDS 
 
讯享网上例中,COURSE是结构名,它含有三个字段:NO、CNAME和SCORE,这些字段的类型分别是DD、DB和DW。
 
讯享网结构类型COURSE共占14个字节,其字段NO、CNAME和SCORE的偏移量分别为:0、4和12。
 
讯享网结构中的字段可以有字段名,也可以没有字段名。有字段名的字段可直接用该字段名来访问它,没有字段名的字段可以用该字段在结构中的偏移量来访问。
 
讯享网例如:
PEASON
讯享网  STRUC 
 NO DD ?  ;偏移量为0 
讯享网 NAME DB 10 dup (?) ;偏移量为4 
DB 1 ;偏移量为14 
讯享网PEASOM
  ENDS 
讯享网在结构PEASON中,有二个字段有字段名,一个字段没有字段名,但不管有无字段名,我们都可用其偏移量来访问它。
 
讯享网2、结构类型变量的定义
在定义某个结构类型后,程序员就可以说明该结构类型的内存变量。它的说明形式与前面介绍的简单数据类型的变量说明基本上一致。其定义格式如下:
讯享网[变量名] 结构名 <[字段值表]>
解释:1)、
讯享网 变量名即为该结构类型的变量名,它可省缺。如果省缺,则不能用符号名来访问该内存单元; 
2)、 字段值表是给字段赋初值,中间用逗号','分开,其字段值的排列顺序及类型应与该结构说明时各字段相一致; 
讯享网3)、 如果结构变量中某字段用其说明时的缺省值,那么,可用逗号来表示;如果所有字段都如此,则可省去字段值表,但必须保留一对尖括号"<"、">"。 
例如:
讯享网COURSE1
  COURSE <> ;使用缺省的初值 
讯享网COURSE2  COURSE <1, 'Pascal', 60> 
COURSE3  COURSE <2, , 84>  ;使用缺省的课程名 
讯享网PEASON1  PEASON <1000, '张 三', 34> 
 
讯享网3、结构类型字段的引用
定义了结构类型的变量后,若要访问其结构中的某个字段,则可采用如下形式:
讯享网结构变量名.字段名
该引用方式与高级语言的字段引用方式完全一致,我们还可用偏移量来访问其中的某个字段,但此方法不直观,变动性大,所以,一般情况下,不提倡使用此方法。
讯享网例如:
EXAM1 STRUC 
讯享网F1 DW  ? 
F2 DB   ? 
讯享网EVEN ;偶对齐 
F3 DW  ? 
讯享网EXAM1 ENDS 
E1 EXAM1  <1234H,'A',8765H> ;定义结构EXAM1的一个变量E1 
讯享网 
下面二种方法都可以把结构变量E1中字段的内容赋给寄存器AX,但如果在字段F3之前增加或减少了字段,那么,这些引用需要改变吗?
讯享网(1)、用字段名直接引用
MOV AX, E1.F3
讯享网(2)、用字段的偏移量间接引用
LEA SI, E1
小讯
上一篇 2025-04-11 07:25
下一篇 2025-03-02 16:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/64259.html