返回列表 回复 发帖

[转帖]汉字显示编程示例

文件操作是编程中经常要用到的功能,读取运行参数、保存运行结果等等都需要用到文件操作。

  在大多数编程语言中文件操作都是很容易实现的,因为它们都附带了相关的函数库,但在汇编语言中没有这样的库,因此就只有自己动手来做了。

  在DOS平台下文件读写操作要通过DOS功能调用来做到。DOS功能调用提供了非常丰富的文件操作服务,涵盖了包括文件查找、建立、删除、读写、重定向等大量功能。其他的编程语言的文件访问库函数只不过是对DOS功能调用进行了封装而已。下面我们就来看一下几个常用的文件操作服务的功能及调用参数:

    AH = 3cH  建立文件
      入口参数
        CX    = 文件属性
        DSX = 文件名字符串
      返回值
        CF = 0 操作成功,此时 AX = 文件句柄
        CF = 1 操作失败,此时 AX = 错误代码

    AH = 3dH  打开文件
      入口参数
        AL    = 0 按只读方式打开
                1 按只写方式打开
                2 按读写方式打开
        DSX = 文件名字符串
      返回值
        CF = 0 操作成功,此时 AX = 文件句柄
        CF = 1 操作失败,此时 AX = 错误代码

    AH = 3eH  关闭文件
      入口参数
        BX    = 文件句柄
      返回值
        无

    AH = 3fH  读文件
      入口参数
        BX    = 文件句柄
        CX    = 要读的字节数
        DSX = 存放读入数据的缓冲区
      返回值
        CF = 0 操作成功,此时 AX = 成功读入的字节数
        CF = 1 操作失败,此时 AX = 错误代码

    AH = 40H  写文件
      入口参数
        BX    = 文件句柄
        CX    = 要写的字节数
        DS:DX = 要写的数据
      返回值
        CF = 0 操作成功,此时 AX = 成功写入文件的字节数
        CF = 1 操作失败,此时 AX = 错误代码

    AH = 42H  移动文件指针
      入口参数
        AL    = 0 从文件头开始向后移动文件指针
                1 从文件指针当前位置开始向后移动文件指针
                2 从文件尾开始向前移动文件指针
        BX    = 文件句柄
        CX:DX = 文件指针要移动的字节数
      返回值
        CF = 0 操作成功,此时 DX:AX = 当前文件指针的位置
        CF = 1 操作失败,此时 AX = 错误代码
 

  从上面的说明可以看出,文件访问操作只需要按要求设置好参数然后调用指定的调用即可。下面我就给出一个例子来说明文件操作的使用。

  Code    Segment
      Assume  CS:Code
  Start:
      Mov     AX,CS
      Mov     DS,AX
      Mov     AX,3c00H
      Mov     CX,20H    ;文件属性为归档
      Mov     DX,Offset FileName
      Int     21H       ;建立文件
      Jc      Err1
      Mov     BX,AX
      Mov     AX,3e00H
      Int     21H       ;关闭文件
      Mov     AX,3d02H
      Mov     DX,Offset FileName
      Int     21H       ;按读写方式打开文件
      Jc      Err2
      Mov     BX,AX
      Mov     AX,4000H
      Mov     CX,14     ;要写的字节数
      Mov     DX,Offset Msg
      Int     21H       ;写数据到文件
      Jc      Err3
      Mov     AX,3e00H
      Int     21H       ;关闭文件
  Exit:
      Mov     AX,4c00H
      Int     21H
  Err1:
      Mov     DX,Offset Error1
      Jmp     ShowErr
  Err2:
      Mov     DX,Offset Error2
      Jmp     ShowErr
  Err3:
      Mov     DX,Offset Error3
      Jmp     ShowErr
  ShowErr:
      Mov     AX,900H
      Int     21H
      Jmp     Exit
  Error1    DB    "Create file fail.",13,10,"$"
  Error2    DB    "Open file fail.",13,10,"$"
  Error3    DB    "Write file fail.",13,10,"$"
  FileName  DB    "Data.txt",0
  Msg       DB    "Hello World!",13,10
  Code    Ends
      End     Start
 

  最后要注意的一点是:在对文件写操作完毕之后记得要关闭文件才能使用系统将数据刷新到磁盘上,否则写进去的东西很可能会丢失。

                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。
返回列表