关于INT13

 基本INT13H中断,实际上就是早期的INT13H中断。后来随着 硬盘 容量的快速增长,INT13H中断已不适应,于是技术人员又设计了扩展INT13H中断。为了与后者便于区分,所以在前面冠以“基本”二字。
 

 

现在介绍两种调用基本INT13H中断读扇区数据的方法,一种是在汇编语言里调用,另一种是在C语言里调用。

 

 

介绍在汇编语言里的调用方法,可为以后学习扩展INT13H中断的调用打下基础,形成一个由浅入深、循序渐进的过程。

 

 

一般情况下,在工具程序和应用软件里调用基本INT13H中断时,使用C语言比较方便。因为在C语言里,系统设置了一个专用函数biosdisk(),只用一条语句就能完成调用。同时由于C语言系统中,对寄存器和内存的使用是由系统设置的,安全系数很高,因此编译后的程序在运行时更为稳定可靠。

 

 

既然已经有了扩展INT13H中断,为什么还要介绍使用基本INT13H中断编写的程序呢?原因有以下几个方面:

 

 

    1. 扩展INT13H中断只能在汇编语言里调用,在高级语言里不能调用,这给编程人员造成了很大的局限性。而基本INT13H中断在汇编语言和多种高级语言里都能调用,编程人员的选择余地很大。

 

 

    2. 虽然基本INT13H中断不能适应大硬盘,但对于8.4G以下的硬盘,或者是大硬盘8.4G以下的扇区部分,其在操作使用上还是非常方便的。

 

 

3. 硬盘的主要管理系统和操作系统的系统文件,都集中存放在硬盘的低扇区段,如主引导记录、主分区表、C盘的分区引导记录等。这里需要说明一个问题,如果使用多系统引导软件,或者在低级格式化硬盘时任意指定柱面的起止范围时,上述那些扇区内容有可能存储在8.4G以上的区段。这些特殊情况,不在讨论范围之内。

关于扩展INT13H的特性分析: 

扩展INT13H中断是使用内存传递数据的,它使用了一个结构,但是这个结构是在汇编语言里定义的。

 

目前编写程序时,只要使用扩展INT13H中断,就必须使用汇编语言。因为高级语言的编译系统,无法识别汇编定义的结构。

 

可是用汇编写程序,冗长的源代码是让人头痛的。

 

最好的编程方案,是用汇编写扩展INT13H中断的子程序,主程序用C语言来写,在主程序里调用汇编子程序。

 

但是又出现了一个参数传递的问题。因为在汇编定义的结构中,表示扇区号的是一个64位的数,而16位的C语言编译系统中,只有32位的整数类型。显然直接传递参数是不可能实现的。

 

我成功地解决了这个问题,并将全部的源代码和编译过程,都收录在我写的一本书中。不过现在受出版合同的约束,还不能公开。

 

最后我说一下编程者应该具有的工作作风。编写程序并不难,每个大学生都会编程。只要学会了基本的程序语句,谁都能写出几段程序来。但最重要的是要有创新,要有灵感。切忌学会了几条语句,就认为自己能够编程了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. `int *P`: P 是一个指向 int 类型的指针,可以使用 P 来存储 int 类型变量的地址,或者通过 P 访问 int 类型变量的值。 2. `int *p [13]`: p 是一个长度为 13 的数组,每个元素是一个指向 int 类型的指针,可以使用 p[i] 来存储或访问第 i 个元素指向的 int 类型变量的地址或值。 3. `int * (p [13])`: 这个声明与 `int *p [13]` 的作用是相同的,只是语法上略有不同,可以看作是将数组名 p 与指针符号 * 拆开了,括号的作用是为了保证优先级。 4. `int **p`: p 是一个指向指针的指针,可以用于存储指向 int 类型变量的指针的地址,或者通过 p 访问指向指针的指针所指向的 int 类型变量的值。 5. `int (*p)[13]`: p 是一个指向长度为 13 的 int 类型数组的指针,可以用于存储 int 类型数组的地址,或者通过 p 访问指向的数组元素的值。 6. `int *f()`: f 是一个函数,返回一个指向 int 类型变量的指针,可以使用 f() 来调用该函数,并获得指向 int 类型变量的指针。 7. `int (*f)()`: f 是一个指向函数的指针,该函数返回 int 类型的值,可以使用 f 来存储该函数的地址,或者通过 f() 来调用该函数。 8. `int (*(*f())[13])()`: f 是一个函数,返回一个指针数组,数组的每个元素都是指向函数的指针,这些函数返回 int 类型的值。这种语法比较复杂,可以将其分解为几个部分:`f()` 表示调用函数 f,`(*f())[13]` 表示返回一个长度为 13 的指针数组,数组的每个元素都是指向函数的指针,`int (*(*f())[13])()` 表示这些函数都返回 int 类型的值。 9. `int (*(*x[3])())[5]`: x 是一个长度为 3 的指针数组,数组的每个元素都是指向返回长度为 5 的 int 类型数组的指针的函数的指针。这种语法也比较复杂,可以将其分解为几个部分:`x[3]` 表示一个长度为 3 的指针数组,`(*x[3])()` 表示数组的每个元素都是一个函数指针,该函数返回一个指向 int 类型数组的指针,`int (*(*x[3])())[5]` 表示这些指针指向的数组都有长度为 5。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值