2014-05-19 77 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

@FrankKotler 您的意思是更改 次11 db「$」 至 次11 db 0 ? – Tomek

+0

您必須在8.3文件名後放置一個零字節。 filename db 10,db 0,times 11 db「$」,db 0,filehandle dw 0 –

回答

0

Int 21h/3Ch需要一個ASCIIZ字符串,即空終止,但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 
...