koopje
Messages postés5Date d'inscriptionmercredi 17 décembre 2003StatutMembreDernière intervention26 mars 2004
-
17 déc. 2003 à 15:19
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 2007
-
5 janv. 2004 à 02:14
Bonjour à tous,
Etudiant, je suis en train de m'exercer avec Emu8086, un émulateur (et assembleur, au passage) d'assembleur sour 8086. J'ai tenté de faire un petit 'hello world' mais il semblerait qu'il bloque sur la déclaration de variable. D'où ma question, les variables existaient-elles déjà sur les 8086?? Un exemple du même prg est fourni avec l'émulateur et pour ce faire, l'auteur écrit directement dans la mémoire video. Dois-je en conclure que l' interruption 21h est inconnue au bataillon ???
J'aimerais tester mon code avec un autre émulateur, qu'avez vous de bien à me proposer? j'ai essayé bochs mais je n'ai jamais réussi à l'utiliser, il s'arrêtait tout seul en indiquant une erreur à la ligne 1558 du fichier ROMBIOS.C alors que tout semblait parfaitement bien configuré.
NDLR: O/S Win XP
Voici mon bout de code, j'ai p-e tout simplement fait une erreur...
#make_COM#
ProgrammeAfficheMessage SEGMENT ; Début du segment de code
ORG 100h ; COM file is loaded at CS:0100h
Start: message DB 'Hello World','$'
MOV DX,OFFSET message
MOV AX,0900h
INT 21h
HLT
ProgrammeAfficheMessage ENDS
END
A voir également:
"Php version 4.4.5" "build date" "server api" "php variables" ????
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 20071 5 janv. 2004 à 02:14
Les variables existait déjà certain puisque une variable n'est qu'un emplacement en mémoire or à l'époque du 8086, il y avait 1Mo.
Par contre, l'interruption 21h est celle du DOS et à cette époque DOS n'existait pas, c'était DR-DOS mais peut-être que l'émulateur a une image de l'interruption 21h
Ton programme a pour 2 erreur la fonction 9 requiert de passer ta chaine par le pointeur DS or ce n'est pas certain qu'il soit correctement initialisé
D'autres part tu mets ta chaine à l'offet 100h, là où le programme comence à s'exécuter, il va donc exécuter le code machine correspondant à ta chaine.
Le premier octet qu'il va exécuter est 48h soit DEC AX. En effet, ta chaine commence par le caractère 'H' de code ASCII 48h
Tu dois placer ta chaine en dehors du code à exécuter:
#make_COM#
ProgrammeAfficheMessage SEGMENT ; Début du segment de code
ORG 100h ; COM file is loaded at CS:0100h
Start:
MOV AX, CS
MOV DS, AX
MOV DX,OFFSET message
MOV AX,0900h
INT 21h
HLT
message DB 'Hello World','$'
ProgrammeAfficheMessage ENDS
END