今天把汇编16位部分学完了,随着学习的深入,似乎找到了我学习汇编想知道的答案,但还并不完整.
基础的指令,DOS调用,BIOS中断就不多说了,我的BLOG中有一篇响应的中断一览表,大家有需要可以去参考.
PSP 驻留程序也不多说了,高级汇编语言技术也并不难接受,只要大家有一点高级语言的基础,看明白还是不难的,我想说说模块化程序设计部分的段的定义,简单的说一下供C调用的过程(汇编编写)!
段的定义分为完整定义和简化定义,完整定义通过你定义段时指定的参数来实现
段名 | SEGMENT [对齐类型] [组合类型] [类别] |
… | |
段名 | ENDS |
程序中的段名可以是唯一的,也可以与其它段同名。在同一模块中,如果有二个段同名,则后者被认为是前段的后续,这样,它们就属同一段。
段对齐类型PARA是一个适用于所有段类型的对齐类型,它也是缺省的对齐类型。对齐类型BYTE和WORD通常用于数据段的定位,对齐类型DWORD通常用于80386及其以后CPU代码段的定位。
表6.1 段对齐类型与段起始地址之间的对应关系
对齐类型 | 起始地址(二进制) | 功能说明 | 最多的空闲字节数 |
BYTE | xxxx xxxx xxxx xxxx xxxx | 下一个字节地址 |
0 |
WORD | xxxx xxxx xxxx xxxx xxx0 | 下一个字地址 |
1 |
DWORD | xxxx xxxx xxxx xxxx xx00 | 下一个双字地址 |
3 |
PARA | xxxx xxxx xxxx xxxx 0000 | 下一个节地址 |
15 |
PAGE | xxxx xxxx xxxx 0000 0000 | 下一个页地址 |
127 |
组合类型(COMBINE)
组合类型是告诉连接程序如何把不同模块中段名相同的段合并在一起。具体的组合类型如下:
NONE | 表示当前段在逻辑上独立于其它模块,并有其自己的基地址。NONE是缺省的组合类型。 |
|
PUBLIC | 表示当前段与其它模块中同段名的PUBLIC类型段组合成一个段。组合的先后次序取决于LINK程序中目标模块排列的次序。在组合时,后续段的起始地址要按其对齐类型进行定位,所以,同名段之间可能有间隔。 | |
COMMON | 表示当前段与其它模块中同名段重叠,也就是说,它们的起始地址相同。最终段的长度是同名段的最大长度。由于段覆盖,所以,前一同名段中的初始化数据被后续段的初始数据覆盖掉。 | |
STACK | 组合类型STACK表示当前段是堆栈栈,其组合情况与PUBLIC相同。 | |
AT 数值表达式 | 该数值表达式是当前段所指定的绝对起始地址的段地址。 |
类别(CLASS)
类别是一个由程序员指定的用单引号括起来的字符串。如果一个段没有给出类别,那么,这个段的类别就为空。类别是用于段的分类,连接程序利用该类别来调整同名、同类别的段,并使它们相邻。典型的类别是"