现在的位置: 首页 > 综合 > 正文

读扇区汇编程序源程序清单

2018年06月10日 ⁄ 综合 ⁄ 共 4087字 ⁄ 字号 评论关闭
;********************************************

 

 

;文件名:ARSE.ASM

 

;功能:读硬盘0面0头1扇区数据并建立存储文件

 

;********************************************

 

data segment                     ;1.定义数据段

 

ostr db 'Enter file name:','$'   ;2.屏幕提示

 

filename db 15                   ;3.输入的文件名

 

         db ?                    ;4.

 

         db 15 dup(0)            ;5.

 

buffer db 512 dup(0)             ;6.扇区数据

 

tmp db 15 dup(0)                 ;7.转存的文件名

 

data ends                        ;8.

 

code segment                     ;9.定义代码段

 

     assume cs:code,ds:data      ;10.

 

start:                           ;11.程序开始

 

        mov ax,data              ;12.初始化数据段

 

        mov ds,ax                ;13.

 

                                 ;14.

 

        mov ax,seg buffer        ;15.用buffer初始化附加段es

 

        mov es,ax                ;16.

 

        mov bx,offset buffer     ;17.取址

 

        mov ax,0201h             ;18.程序入口参数

 

        mov cx,0001h             ;19.

 

        mov dx,0080h             ;20.

 

        int 13h                  ;21.调用中断

 

        mov dx,offset ostr       ;22.

 

        mov ah,09h               ;23.输出字符串

 

        int 21h                  ;24.

 

                                 ;25.

 

        mov dx,offset filename   ;26.

 

        mov ah,0ah               ;27.接收字符串

 

        int 21h                  ;28.

 

        mov si,offset filename   ;29.

 

        mov di,offset tmp        ;30.

 

lstr:   mov dl,[si+2]            ;31.取字符

 

        mov [di],dl              ;32.存字符

 

        inc si                   ;33.地址递增

 

        inc di                   ;34.

 

        cmp dl,0dh               ;35.判断是否为回车符

 

        jne lstr                 ;36.不等转

 

                                 ;37.

 

        mov bl,0                 ;38.补0

 

        mov [di-1],bl            ;39.

 

        mov dx,offset tmp        ;40.取文件名

 

        mov cx,0                 ;41.

 

        mov ah,3ch               ;42.建立文件

 

        int 21h                  ;43.

 

        mov dx,offset buffer     ;44.取缓冲区数据地址

 

        mov cx,512               ;45.

 

        mov bx,ax                ;46.

 

        mov ah,40h               ;47.写文件

 

        int 21h                  ;48.

 

        mov ah,3eh               ;49.关闭文件

 

        int 21h                  ;50.

 

        mov ah,4ch               ;51.返回系统

 

        int 21h                  ;52.

 

code ends                        ;53.

 

        end start                ;54.程序结束

源程序解释 

 

 

在对汇编源程序进行解释的时候,有些属于汇编程序的基本格式和基本语法,就不再介绍了。大家可以看看汇编语言的基础教程,这一类的书是很多的。

 

第2行定义了缓冲区内的一个字符串,该字符串是作为提示行输出到屏幕的。因为输出字符串是由INT21H中断里的09H号DOS功能调用完成的,所以字符串必须以“$”作为结束符。

 

第3-5行在内存中开辟一块缓冲区,用来存储由键盘输入的文件名。

 

第6行在内存中开辟一块缓冲区,用来存储512字节扇区数据。

 

第7行在内存中开辟一块缓冲区,准备转存键盘输入的文件名。前面已经将文件名存入缓冲区里了,为什么还要转存呢?

 

因为由键盘输入的表示文件名的字符串,是由0aH号DOS功能调用接收完成的。该功能调用向缓冲区存入字符串时,从第三个字节开始存放字符串的首字节。缓冲区的第一个字节设置为缓冲区的最大容量,属于功能调用的入口参数。缓冲区的第二个字节存放实际读入的字符数(回车符除外),属于功能调用的出口参数,是在键盘输入结束后,由系统写入的。

 

键盘输入的字符串就是下一步要建立的存储扇区数据的文件名。建立文件是由3cH号DOS功能调用完成的,该功能调用对缓冲区的存储要求与0aH号DOS功能调用不一样,因此必须进行上述转存工作。

 

第15-16行取变量buffer的段址,用该段址初始化附加段ES。这是由基本INT13H中断的入口参数所要求的,其数据缓冲区地址=ES:BX。

 

第17-21行设置各项入口参数,然后执行13H中断。下面顺序介绍各项功能:将变量buffer的地址取到BX寄存器中;AH=02H,执行读功能;AL=01H,读一个扇区;CH=00H,磁道号(也就是柱面号)为0;CL=01H,扇区号为1;DH=00H,磁头号为0;DL=80H,驱动器号为第一硬盘(如果读取第二硬盘的扇区,设置DL=81H)。

 

第22-24行在屏幕上输出提示字符串。

 

第26-28行接收键盘输入的字符串。

 

第29-36行是字符串转存,每次转存一个字符。因为键盘输入的字符串以回车作为结束符,回车的ASCII码值是0dH,所以第35行设置一判断语句,若取的字符与回车相等,则结束循环。第31行将地址跳过2个字节,从第3个字节开始取字符。

 

第38-39行在转存字符串后面补0,作为字符串的结束符。

 

第40-50行建立文件、向建立的文件中写入扇区数据、最后关闭文件。这几步都是常规的简单操作,就不用详细解释了。

 

第51-54行返回DOS系统、结束程序。

 

 

 

                            程序编译和运行

 

 

 

汇编源程序的编译和连接,是用命令行方式,使用Borland C++ 3.1自带的两个程序完成的。TASM.EXE可将源程序编译成OBJ二进制文件,TLINK.EXE可将二进制文件连接成EXE可执行文件。

 

如果在安装Borland C++ 3.1编译软件以后,没有在自动批处理文件AUTOEXEC.BAT里面设置相关路径,就需要先进入Borland C++ 3.1的安装目录,然后才能运行有关程序。

 

最好的方法是修改AUTOEXEC.BAT文件,在里面设置好路径。当硬盘启动时就能自动加载,不论在哪一个目录下,都可以运行程序了。

 

以我用的硬盘为例,将Borland C++ 3.1安装在E盘的BC目录中,用文本编辑软件打开C盘根目录下的AUTOEXEC.BAT文件,在其中加上一行:

 

SET PATH=%PATH%;E:/BC/BIN

 

编译时先执行命令TASM ARSE,生成ARSE.OBJ文件,再执行命令TLINK ARSE,可生成ARSE.EXE文件。如果源程序有逻辑错误或语法错误,屏幕上会有出错提示或警告提示,并指出发生在哪一行。

 

可以将上面执行两次的命令合成一步来完成,方法是用文本编辑软件建一个批处理文件。文件名可定为TASMLINK.BAT,其内容是:

 

TASM  %1

 

TLINK  %1

 

将TASMLINK.BAT放在E:/BC/BIN目录中,编译时执行TASMLINK ARSE。

 

运行程序时执行命令ARSE,屏幕上提示“Enter file name:”,输入文件名后回车,在当前目录下生成一个512字节的扇区数据文件。

 

生成的扇区数据文件不是文本方式的,不能直接用文本编辑软件查看。

 

每一个想从事数据恢复工作的人,都必须能写自己的工具程序,才能在数据恢复中得心应手。因为现成的应用软件谁都会用,任何人都没有技术上的优势,有的只是时间上的优势,也就是比别人早用了几天而已。

 

只有形成自己的有特色的分析方法,配合自己的工具程序,才能有领先于别人的优势。同时在编写自己的工具程序的过程中,对文件系统的存储原理,对磁盘扇区的存储规律,就会有比别人更深刻的认识。

【上篇】
【下篇】

抱歉!评论已关闭.