2014-05-19 3 views
0

16b 어셈블리의 프로그램에서 작업 할 때 파일 이름이 런타임에 입력 된 다음 닫히기 만하면됩니다. 문제는 파일이 생성되지 않는다는 것입니다.16b 어셈블리 - 사용자 정의 파일 이름을 사용하여 파일 만들기

org 100h 
mov ah, 9 
mov dx, prompt 
int 21h 

mov ah, 0ah 
mov dx, filename 
int 21h 

mov ah, 3ch 
mov cx, 0000h 
mov dx, filename+2 
int 21h 

mov word [filehandle], ax 

mov bx, [filehandle] 
mov ah, 3eh 
int 21h 


mov ah, 4ch 
int 21h 


prompt db "Filename:",10,13,"$" 
filename db 10 
     db 0 
     times 11 db "$" 
filehandle dw 0 

당신은 내가 파일 이름을 읽어 버퍼 입력을 사용하고 볼 수 있듯이 : 여기 내 코드입니다. 불행히도 파일은 생성되지 않습니다. 파일 이름을 다음과 같이 하드 코드하면 제대로 작동합니다.

... 

mov ah, 3ch 
mov dx, filename 
int 21h 

... 

filename db "test.txt" 

그러나 이것이 내가 원하는 것입니다. 이 코드가 작동하지 않는 이유는 무엇입니까? 나는 NASM을 사용하고있다.

편집 : 문제가 해결되어 @rkhb의 솔루션이 작동했습니다.

+0

파일 이름을 0으로 종료하십시오. –

+0

@FrankKotler 변경 의미 번 11 db "$" ~ 번 11 db 0 ? – Tomek

+0

8.3 파일 이름 뒤에 0 바이트를 추가해야합니다. filename db 10, db 0, times 11 db "$", db 0, 파일 핸들 dw 0 –

답변

0

Int 21h/3Ch은 ASCIIZ 문자열 (예 : NULL로 종료 됨)을 요구하지만 Int 21h/0Ah은 0Dh (ENTER)를 종료로 제공합니다. 따라서 0Dh를 00h로 변경해야합니다.

... 
mov ah, 0ah 
mov dx, filename 
int 21h 

movzx di, byte [filename+1] 
add di, filename+2 
mov byte [di], 0 

mov ah, 3ch 
mov cx, 0000h 
mov dx, filename+2 
int 21h 
...