1

次の 16 ビット アセンブリ コードを使用しています。

            .model tiny
            .code

            ORG 100H

FILE_NAME       EQU 9EH     ;DTA Position after execution of search_first_file

START:          
            mov     ah,9            ;Print start message
            mov dx,OFFSET STR_START
            int 21H

            mov     ah,4EH      ;Search first file
            mov dx,OFFSET PATH
            int 21H
            jc  NO_FILE_FOUND

FILE_FOUND: 
            mov     ah,9            ;Print file found message
            mov dx,OFFSET STR_FILE_FOUND
            int 21H     

            mov ah,3DH      ;Open file to write
            mov al,01H
            mov dx,FILE_NAME
            int 21H

            mov     ah,9            ;Print file opened message
            mov dx,OFFSET STR_FILE_OPENED
            int 21H     

            mov ah,40H      ;Write code
            mov bx,ax
            mov dx,100H
            mov cx,44
            int 21H

            mov     ah,9            ;Print file written message
            mov dx,OFFSET STR_FILE_WRITTEN
            int 21H     

            mov ah,3EH      ;Close file
            int 21H

            mov ah,4FH      ;Search next
            int 21H
            jnc FILE_FOUND          

NO_FILE_FOUND:
            ret

PATH                db      'C:\comfiles_folder\HOST.COM',0
STR_START       db  'program started!',0
STR_FILE_FOUND  db  'file found!',0
STR_FILE_OPENED db  'file opened!',0
STR_FILE_WRITTEN    db  'code written!',0

            END START

このプログラムは基本的comfiles_folderに、パスのフォルダーを検索し、C:\comfiles_folder\HOST.COM見つかったファイルに独自のコードを書き込みます。

CodeView を使用してデバッグしたところ、HOST.COM ファイルが見つからないことがわかりました。誰かが何が間違っているのか教えてもらえますか?

4

1 に答える 1

1

Find First File呼び出しには、もう 1 つのパラメーターが必要です。Int 21 0x4E (Find Fist File) 呼び出しの前にレジスタ cx にファイル属性を設定しませんでした。

于 2012-02-28T07:45:44.340 に答える