2014-01-06 1 views
0

나는 프로그램과 동일한 폴더에있는 파일을 삭제하는 프로그램을 작성함으로써 간단히 시작하려하지만 실행하면 "잘못된 경로"가 발생합니다. 코드는 다음과 같습니다.Turbo Assembly 프로그램으로 파일을 삭제하는 방법은 무엇입니까?

masm 
model small 
.data 
filename db "my_file.txt" 
point_fname dd filename 
.stack 256 
.code 
main: 
    mov ax,@data 
    mov ds,ax 
    lds dx,point_fname 
    mov ax,41h 
    int 21h 
     jc exit 
    nop 
exit: 
    mov ax,4c00h 
    int 21h 
end main 

프로그램의 .ASM 파일이 어디에 있는지 검색하면 안되며 경로 이름을 지정해야합니까?

나는 또한 DX 로의 경로를 어떻게 제공해야하는지 잘 모르겠다. 파일 이름에 써야할까요?

+2

와우, 연령대에서 이것을 보지 마세요! 언뜻 보면'mov ah, 41h'가 도끼가 아니길 원하고, 아마도 파일 이름을 0으로 끝내기를 원할 것입니다 (여기 [http://spike.scu.edu.au/~barry/interrupts.html#ah41] 참조). 데이터 세그먼트를로드하는 올바른 방법인지 기억하지 못합니다. 죄송 합니다만, point_fname이 아닌'offset filename'을 원할 수도 있습니다. – Rup

+0

TASM을 사용하고 있습니까? 볼랜드에서? –

+0

음, 볼랜드/Inprise/엔 칠라 다/뭐든 - 그들 - 전화 - 스스로 - 요즘 :-) – paxdiablo

답변

3

살펴볼 몇 가지 사항. 파일 삭제 Ralf Brown's excellent interrupt list으로 당


는 int21/아 = 41으로 이루어진다. ax0041으로 설정하면 "프로그램 종료"기능인 ah이 0으로 설정됩니다. 당신은 필요

mov ah, 41h 

둘째, 파일 이름이 의미하는 ASCIZ로,이 0 바이트로 종료되어야 의미 : 셋째

filename db "my_file.txt", 0 

, 당신은 가지고있는 것 같습니다 거기에 불필요한 간접 지정 (a la point_fname). ds:dx 레지스터 쌍은 파일 이름을 직접 가리켜 야하므로 여분의 데이터 항목없이이 작업을 수행 할 수 있어야합니다.

여기 내 기억을 스트레칭하고 있지만, 난 당신이 point_fnamelds 전화를 도랑 대신 같은 직접 dx에 파일 이름의 오프셋 (offset)로드 것이라고 생각 :

mov dx, offset filename 

간접-뿐인데 lds 방법은 아마도 일 것입니다,하지만 불필요한 합병증처럼 보입니다. 물건의 종류는 여전히 윈도우의 현대 버전에서 작동


당신 은 (는 수도 있고 그렇지 않을 수도) 조심해야 할 수 있습니다.

마이크로 소프트는 이전 버전과의 호환성에 큰 신자이지만,이 물건은 MSDOS 2 년에 도입되었다 당신이에서 실행하는 경우

:-) 8.3 제한을 초과하는 파일 이름, 또는 NTFS 등 놀라운 새 일을 지원하지 않을 수 있습니다 DosBox 또는 Windows 98 또는 그 이하 버전을 실행하는 VM을 사용하는 경우라면 괜찮을 것입니다.하지만 그 이상의 기능에 대해서는 적어도 약간의 조심성이 있습니다.

+0

예, 정말 고마워요. 작은 실수에도 불구하고 나는 ax/ah에서 문제를 일으키는듯한 DosBox를 사용하고있었습니다.일단 내 오래된 컴퓨터에서 그것을 시도 완벽하게;] –

+1

@ user3163847 파일 이름 끝에 0 바이트를 넣지 않았다는 사실은 또 다른 진짜 문제입니다. 그것이 문제라고 생각하지 않는다면 아마도 (때때로 DosBox에는 없었지만) 행운이고 point_fname의 가장 중요한 바이트는 0이었을 것입니다. – ChrisW

관련 문제