2011-12-03 69 views
2

我是新裝配。我必須做一個程序,將輸入文件的數據複製到輸出文件。但是這個輸出文件必須被創建。彙編代碼幫助(創建新文件)

問題是我無法創建這個文件,這似乎是如此直截了當。

我使用的代碼是

.model tiny 
.data 

outputfile db "newfile.txt",0 
outhandle dw ? 
     .code 
.stack 
    cseg segment 'code' 
assume cs:cseg, ds:cseg 
org 100h 
start: 
create_a_file: 
mov dx, offset outputfile 
mov cx, 0 
mov ah, 3Ch 
int 21h 
mov outhandle, ax 
jc error_routine 
mov ah, 3Eh 
mov bx, outhandle 
int 21h 

error_routine: 
mov ax, 4c00h 
int 21h 
cseg ends 
end start 

我看到新的文件nowhere.Even當我指定一個像確切的根文件夾「C:...」 我找不出什麼錯誤。 任何幫助appriciated,Thanx PS:我使用Windows XP 32位。和TASM(便攜式)

+2

我確實希望人們不再打擾8086 asm。它在現代計算機上已經過時了,特別是64位的;如果不啓動虛擬機,我甚至不能運行它。 – cHao

+1

@cHao:這有什麼問題?我認爲這是一個學習CPU內部的好方法,也非常有趣。無用,也許,但有趣和具有挑戰性:) – BlackBear

+2

@BlackBear:哦,我對彙編語言沒有任何問題。實際上喜歡這些東西。 :)但是,16位代碼正在走向恐龍的道路 - 現在,它只對引導裝載程序等有用。當有人終於意識到這一點時,有很多事情要去忘記。現在,x86(32位)應該是基準。 – cHao

回答

2

如果你的目的是建立一個.COM程序,簡化了源代碼如下:

cseg segment 'code' 
    assume cs:cseg, ds:cseg, es:cseg, ss:cseg 
    org 100h 
start: 

create_a_file: 
    mov dx, offset outputfile 
    mov cx, 0 
    mov ah, 3Ch 
    int 21h 
    mov outhandle, ax 
    jc error_routine 

    mov ah, 3Eh 
    mov bx, outhandle 
    int 21h 

error_routine: 
    mov ax, 4c00h 
    int 21h 

outputfile db "newfile.txt",0 
outhandle dw ? 

cseg ends 

end start 

編譯程序作爲tasm.exe myprog.asm並將其鏈接爲tlink.exe /t myprog.obj。你應該得到myprog.com,它應該創建NEWFILE.TXT就好。

+0

感謝您的回答, 我用alex的答案,它的工作原理 –

0

檢查你的tasm/bin文件夾。你的「newfile.txt」可能在那裏

+1

上述程序不太可能生成一個文件,因爲它只能編譯成.EXE文件。 Unlinke .COMs,.EXE必須設置它們的'DS'和'ES'寄存器,而上面的代碼不會這樣做,然後繼續使用錯誤的文件名字符串地址調用DOS,而不是'outputfile'的地址。 –