2011-12-03 14 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を...」。 助けがあれば、Thanx PS:ImはWindows XP 32-bitを使用しています。そして、TASM(ポータブル)

+2

私は人々が8086 asmで気になることをやめたいと思います。現代のコンピュータ、とりわけ64ビットのものではかなり古くなっています。私はVMを起動せずにこれを実行することさえできません。 – 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

ありがとうございました。 私はアレックスの答えを使用しました。 –

0

tasm/binフォルダを確認してください。あなたの "newfile.txt"があるかもしれません。

+1

上記のプログラムがそのまま.EXEにコンパイルされるだけなので、ファイルを生成する可能性はほとんどありません。 unlinke .COMs、.EXEは 'DS'と' ES'レジスタを設定しなければなりませんが、上記のコードはそれを行なわず、 'outputfile'のアドレスではなく、悪いファイル名文字列アドレスでDOSを呼び出すことになります。 –

関連する問題