2011-12-03 3 views
2

Je suis nouveau dans l'assemblage. Je dois faire un programme qui copie les données d'un fichier d'entrée dans un fichier de sortie. mais ce fichier de sortie doit être créé.Aide au code d'assemblage (création d'un nouveau fichier)

Le problème est que je ne peux pas créer ce fichier qui semble si simple.

le code que je utilise est

.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 

Je vois le nouveau fichier nowhere.Even lorsque je spécifie le dossier racine exacte comme « c: ... » Je ne peux pas comprendre ce qui se passe mal. Toute aide est appréciée, Thanx PS: Im utilisant Windows XP 32 bits. et TASM (portable)

+2

Je souhaite que les gens cessent de s'embêter avec 8086 asm. C'est à peu près obsolète sur les ordinateurs modernes, en particulier ceux de 64 bits; Je ne serais même pas capable d'exécuter ceci sans mettre le feu à une machine virtuelle. – cHao

+1

@cHao: quel est le problème avec ça? Je pense que c'est une excellente façon de comprendre les internes d'un CPU et aussi très intéressant. Inutile, peut-être, mais intéressant et stimulant :) – BlackBear

+2

@BlackBear: Oh, je n'ai aucun problème avec le langage d'assemblage. J'adore les choses, en fait. :) Mais le code 16 bits va le chemin du dinosaure - ces jours-ci, il est seulement utile pour les chargeurs de démarrage et autres. Et il y a tellement de choses à désapprendre quand quelqu'un s'en rend compte finalement. Ces jours-ci, x86 (32 bits) devrait être la ligne de base. – cHao

Répondre

2

Si votre intention est de créer un programme de .COM, simplifier le code source à ceci:

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 

Compilez le programme et tasm.exe myprog.asm lien comme tlink.exe /t myprog.obj. Vous devriez obtenir myprog.com et il devrait créer NEWFILE.TXT très bien.

+0

Merci pour vos réponses, J'ai utilisé la réponse d'alex et cela a fonctionné –

0

Vérifiez votre dossier tasm/bin. Votre "newfile.txt" peut être là

+1

Il est peu probable que le programme ci-dessus tel qu'il est pourrait produire un fichier, car il serait compiler uniquement dans. EXE. Les .COMs, .EXE de Unlinke doivent configurer leurs registres 'DS' et' ES', alors que le code ci-dessus ne fait pas cela et continue à appeler DOS avec une mauvaise adresse de chaîne de nom de fichier, pas d'adresse de 'outputfile'. –

Questions connexes