ouvrir le fichier et de lire la forme de tampon dans l'assemblée
je suis un débutant dans l'assemblée, j'ai l'habitude d'ouvrir un fichier et lire la valeur de "integer"
de lui et l'enregistrer entier dans un tampon à imprimer sur l'écran c'est mon code qui ne fonctionne pas
include inout.asm
.model small,c
.486
.stack
.data
org 100h ; .com memory layout
buf db ?
file db "c:\rtasm\bin\file.txt";the file name in bin
.code
mov dx, offset file ; address of file to dx
mov al,0 ; open file (read-only)
mov ah,3dh
int 21h ; call the interupt
mov bx,ax ; put handler to file in bx
mov ah,40h
mov bx,ax
mov cx,2h ;; how many bytes you want to read
mov dx,offset buf ;; where you want to store that data (see note on Offset above)
int 21h
call putchar,offset buf; print char on the screen
mov ah,3eh
mov bx,ax
int 21h
.exit
END
Vous devez vous connecter pour publier un commentaire.
Int 21h fonction 3Dh ("OUVRIR un FICHIER EXISTANT") attend un zéro chaîne terminée dans
ds:dx
. La chaîne que vous donnez n'ont pas de terminaison zéro. Le nom de fichier doit être déclaré commefile db "c:\rtasm\bin\file.txt",0
.À la fois la fonction 3Dh et 40h retourner les codes d'erreur en cas de défaillance. Vous devriez vérifier ces et d'informer l'utilisateur (dans ce cas) si une erreur s'est produite, plutôt que de supposer que les opérations de toujours réussir.
Un autre problème est le suivant code:
La deuxième
mov bx,ax
est inutile puisquebx
contient déjà le descripteur de fichier. En fait, ce n'est pas seulement inutile, mais aussi incorrect puisque vous avez écrasé la partie haute deax
(ah
) avec la valeur de 40h.Il y a aussi le fait que vous êtes la lecture de deux octets dans une mémoire tampon qui seul a de la place pour un octet.
ax
le maintien de sa valeur, même si vous modifiez une partie de laax
registre, ou call interrompre les fonctions qui modifientax
. Ça n'est évidemment pas d'aller travailler, alors je vous suggère de lire sur la façon dont les registres d'étude et de travail, les interruptions que vous utilisez avec plus de soin.