回 帖 发 新 帖 刷新版面

主题:关于文件相关知识的疑问,请帮忙,谢谢

今天晚上刚自学汇编语言简明教程的关于建立文件,写文件等内容的章节。
遇到了几个问题,实在弄不明白,向大家请教一下:
1.   mov ah,01
     int 21h;键盘输入并回显
     
     mov ah,02;显示输出
[color=FF0000]请问上面这两个DOS功能调用的区别是什么?怎么好像都是要显示啊?[/color]

2.下面是一段建立一个文件的汇编的例子的片断:
      DATA SEGMENT
      MESS0     DB 0DH,0AH,'Input file name:$'
      BUFFER    DB 60,?
      FILENAME  DB 60 DUP(?)
      HANDLE    DW ?
      DTA       DB ?
      PROMPT    DB 0DH,0AH,'Input text:$'
      SUCCESS   DB 0DH,0AH,'Write success.$'
      FAIL1     DB 0DH,0AH,'Fail to create.$'
      FAIL2     DB 0DH,0AH,'Fail to write.$'
      DATA ENDS
      CODE SEGMENT
           ASSUME CS:CODE,DS:DATA
                  
                  ...
                  ...;省略一段

           AGAIN:MOV AH,01H
                  INT 21H
                  MOV DAT,AL;键盘输入一个字符,送入DTA
           AGN1: MOV AH,40H
                  MOV CX,1
                  INT 21H;把这个字符写入磁盘文件
              ;----------------------------------------------
[color=FF0000]  这里的注释说的把字符写入磁盘文件,到底是写到哪里去啊?[/color]
               ;------------------------------------------------------

           JC ERR2;写文件错误,转ERR2
           CMP DTA,0DH;刚输入字符是否为回车符
           JNE AGN2
           PUSH DX;保护DX的值
           MOV AH,2
           MOV DL,0AH
           INT 21H;输入回车符后在显示器上输出换行符
        ;-----------------------------------------------------------
[color=FF0000]这里为什么不直接在显示器上输出回车符呢?为什么还要把0AH送到显示器上输出?0DH不是也会回显在显示器上的吗?两者在这里有什么区别?[/color]  
  ;-----------------------------------------------------------------
         
          POP DX;恢复DX的值
          MOV DTA,0AH;换行字符填入DTA
          JMP AGN1;换行字符补写到磁盘文件中
   AGN2: CMP DTA,1AH;检查刚输入的字符是否为EOF
          JNE  AGAIN;不是EOF,继续键盘输入
          LEA DX,SUCCESS
          CALL DISP;显示写文件成功信息
   CLOSE:MOV AH,3EH
          MOV BX,HANDLE
    ;--------------------------------------------------------------------
      [color=FF0000]  这个HANDLE,书上说是叫文件代号,是由操作系统分配给文件的,请问是不是也就是大家常说的句柄?[/color]
    ;---------------------------------------------------------------------
      
          INT 21H;关闭文件

        .......
        ....... ;此处省略结束段


----------------------------------------------------------------------------
红色部分是我的疑问。
我没有老师教,只能自学,也许问的问题有些幼稚,不过如果大家有时间,还是请帮忙解释一下,感激不尽。

回复列表 (共2个回复)

沙发

1
mov ah,01
int 21h
比如按a,那么a显示在屏幕上,而且a的ascii码被保存在al中.目的是输如一个字符到al中去.
mov ah,02
int 21h
目的是显示一个字符.

2
MOV AH,40H
MOV CX,1
INT 21H
此前你省略的部分的打开了一个文件,同时文件的Handle被保存下来。写的位置取决于BX中保存的文件Handle。

3
回车和换行是两个概念,你可以通过搜索引擎搜索“回车 换行 区别”得到信息。

4
是句柄。就是个概念而已,不用太追究。

板凳

关于第二点,我还是不太明白,我输入的字符到底是如何存到磁盘中去的呢?与文件代号也就是HANDLE到底是什么对应的关系?如何从文件代号判断字符将要存储的位置呢?
我昨天晚上又看了书,说DTA是磁盘缓冲区,在其中一个例子中还定义了200个DUP(?)给DTA,所以我知道它就是实际上的磁盘缓冲区了,但是在我首页这个例子里面,
DTA DB ?    ;  这样也行吗,它就代表磁盘缓冲区只有一个字符????
谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册