2017-10-13 27 views
0

필자는 어떤 키 누르기에 따라 다른 기능을 포함하는 프로그램을 만들었습니다. 내 프로그램은 폴더를 만든 다음 그 폴더 안에 .txt 파일을 만듭니다. 폴더를 추가하고 확인하면서 .txt 파일의 업데이트 된 목록을 표시하고 싶습니다.조립 : 4eh 및 4fh를 사용하여 디렉토리에있는 파일을 포함하는 목록을 인쇄하십시오.

그러나 프로그램을 실행하면 만들어진 최신 .txt 파일 만 표시됩니다. 이 문제를 해결하고 모든 .txt 파일 목록을 표시하려면 어떻게해야합니까?

선언 된 변수 :

file_spec db "*.*", 0 
DTA db 128h dup(0) 

dirlist proc near 
     mov dx,offset DTA 
     mov ah,1ah 
     int 21h 
     mov dx,offset file_spec 
     xor cx, cx 
     mov ah,4eh 
     int 21h 
     call print_name 
     call next_char 
     ret 
    dirlist endp 

    print_name proc near 
     mov dx,10 
     lea si, DTA + 1eh 
     ret 
    print_name endp 

    next_char proc near 
     lodsb 
     int 29h 
     test al, al 
     jnz next_char 
     mov al, 13 
     int 29h 
     mov al, 10 
     int 29h 
     mov dx, offset file_spec 
     xor cx, cx 
     mov ah, 4fh 
     int 21h 
     jnc print_name 
     ret 
    next_char endp 
+1

"file_spec"은 어떤 모양입니까? 당신은'db "* .txt", 0'을 시도 했습니까? – Tommylee2k

+0

코드 흐름이 잘못되었습니다. 'jnc print_name'은'print_name'으로 가서'dx'와'si'을 설정하고'dirlist'로 돌아가서 끝납니다. 파일을 반복하지 않습니다. – Jester

+0

@Jester 어떻게 파일을 반복합니까? 죄송합니다. 아직 모든 기능에 익숙하지 않습니다. –

답변

0

귀하의 코드 흐름이 잘못된 것 같습니다. jnc print_nameprint_name으로, dxsi으로 설정하고 dirlist으로 돌아갑니다. 파일을 반복하지 않습니다.

나에게 맞는 수정은 next_char을 독립 실행 형 대신에 print_name 내부의 간단한 레이블로 바꾸는 것입니다. 또한 find_nextprint_name 안에 넣는 것은 잘못된 코딩 방법입니다. 이 같은 것이 작동 할 수도 있습니다.

file_spec db "*.*", 0 
DTA db 128h dup(0) 

dirlist proc near 
    mov dx,offset DTA 
    mov ah,1ah 
    int 21h 
    mov dx,offset file_spec 
    xor cx, cx 
    mov ah,4eh 
    int 21h 
    jc done 
next_name: 
    call print_name 
    call find_next 
    jnc next_name 
done: 
    ret 
dirlist endp 

print_name proc near 
    mov dx,10 
    lea si, DTA + 1eh 

next_char: 
    lodsb 
    int 29h 
    test al, al 
    jnz next_char 
    mov al, 13 
    int 29h 
    mov al, 10 
    int 29h 
    ret 
print_name endp 

find_next proc near 
    mov dx, offset file_spec 
    xor cx, cx 
    mov ah, 4fh 
    int 21h 
    ret 
find_next endp