cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 2009
-
29 avril 2004 à 18:40
Bombela
Messages postés225Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention30 juillet 2008
-
8 mai 2006 à 15:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Bombela
Messages postés225Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention30 juillet 2008 8 mai 2006 à 15:06
XOR AH,AH est effectivement plus rapide.
En terme de taille d'octet, j'ai la flème de vérifier, mais bon, à pars pour un boot sector, c'est pas vital.
Le RET est donc fonctionnel pour un programme DOS .COM car il y a déjà les valeurs de retour de RET dans la pile pour terminer le programme. Dans le cas d'un programme DOS .EXE, il faudra effectivement utiliser :
MOV AX,4C00h
INT 21h
Quand je dis plus cours, c'est juste à cause du RET, qui remplace la deux lignes de sortie de code .EXE par une seule...
C'est donc une ligne de moins à taper ;)
@+
cs_algori
Messages postés868Date d'inscriptiondimanche 26 décembre 2004StatutMembreDernière intervention26 février 20081 7 mai 2006 à 21:53
Salut,
>>MOV AX,4C00h ;Prepare la fin du programme, renvoie 0
INT 21h ;Fin du programme
Un RET fais aussi bien l'affaire et, en plus, tu gagnes 4 octets.
>>MOV Ah,0
J'préfère XOR AH,AH.
Est-ce plus rapide... ?
Voir code de Bombela :
Plus court ? -> Je ne pense pas.
mythic_kruger
Messages postés241Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention10 novembre 2005 27 août 2005 à 10:48
Ca compile super avec NASM (et tous les compilateurs 16 bits)!
nasmw -f bin -o hello.exe hello.asm
Tu peux remplacer $" par ",0
cs_nihaoma
Messages postés140Date d'inscriptionjeudi 2 mai 2002StatutMembreDernière intervention 2 février 2010 20 mai 2004 à 18:51
Salut,
je vais peut etre (surrement meme) vous paraitre idiot, mais moi aussi je commence l'asm, alors j'ai pris ce code et j'ai fait un copier coller, puis ai essayer de le compiler (avec nasm) et là, le compilateur me dit que "Code or data emission to undeclared segment"
je me suis donc dis que y'avais une syntaxe de base à mettre en place (qui est tellement de bas que meme dans ce code pour "débutant" on ne l'aurait pas mit) j'ai donc utiliser les template de emu8086 et cette fois ca bloque sur la ligne MOV DX, Message ou il me dit que l'adresse est sur 8 bit alors qu'elle devrait etre sur 16 bits
y'a quelqu'un pour m'expliquer ?
merci d'avance
darkalpha
Messages postés7Date d'inscriptionvendredi 2 mai 2003StatutMembreDernière intervention12 mai 2004 10 mai 2004 à 22:34
Je désire débuter l'ASM et ... j'ai rien capté :D
qq1 serait généreux d'expliquer :s
tet2cochon
Messages postés3Date d'inscriptionmardi 27 avril 2004StatutMembreDernière intervention30 avril 2004 30 avril 2004 à 18:24
c'est vrai j'aurais l'optimiser encore un peu plus.
merci.
Bombela
Messages postés225Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention30 juillet 2008 30 avril 2004 à 14:29
Zut !
C'est "ORG 100h" lol
Bombela
Messages postés225Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention30 juillet 2008 29 avril 2004 à 23:02
J'ai oublié le "100h" ;)
Bombela
Messages postés225Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention30 juillet 2008 29 avril 2004 à 23:01
Heu... Tu peux faire plus court...
MOV DX,Message
MOV Ah,9
INT 21h
xor ah, ah
INT 16h
RET
Message DB "Hello World !$"
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 29 avril 2004 à 18:40
je trouve que comment le code est écrit ne facilite pas la comprehension pour les debutants (personne pour qui apriorie est destiné cette source !!!)...
8 mai 2006 à 15:06
En terme de taille d'octet, j'ai la flème de vérifier, mais bon, à pars pour un boot sector, c'est pas vital.
Le RET est donc fonctionnel pour un programme DOS .COM car il y a déjà les valeurs de retour de RET dans la pile pour terminer le programme. Dans le cas d'un programme DOS .EXE, il faudra effectivement utiliser :
MOV AX,4C00h
INT 21h
Quand je dis plus cours, c'est juste à cause du RET, qui remplace la deux lignes de sortie de code .EXE par une seule...
C'est donc une ligne de moins à taper ;)
@+
7 mai 2006 à 21:53
>>MOV AX,4C00h ;Prepare la fin du programme, renvoie 0
INT 21h ;Fin du programme
Un RET fais aussi bien l'affaire et, en plus, tu gagnes 4 octets.
>>MOV Ah,0
J'préfère XOR AH,AH.
Est-ce plus rapide... ?
Voir code de Bombela :
Plus court ? -> Je ne pense pas.
27 août 2005 à 10:48
nasmw -f bin -o hello.exe hello.asm
Tu peux remplacer $" par ",0
20 mai 2004 à 18:51
je vais peut etre (surrement meme) vous paraitre idiot, mais moi aussi je commence l'asm, alors j'ai pris ce code et j'ai fait un copier coller, puis ai essayer de le compiler (avec nasm) et là, le compilateur me dit que "Code or data emission to undeclared segment"
je me suis donc dis que y'avais une syntaxe de base à mettre en place (qui est tellement de bas que meme dans ce code pour "débutant" on ne l'aurait pas mit) j'ai donc utiliser les template de emu8086 et cette fois ca bloque sur la ligne MOV DX, Message ou il me dit que l'adresse est sur 8 bit alors qu'elle devrait etre sur 16 bits
y'a quelqu'un pour m'expliquer ?
merci d'avance
10 mai 2004 à 22:34
qq1 serait généreux d'expliquer :s
30 avril 2004 à 18:24
merci.
30 avril 2004 à 14:29
C'est "ORG 100h" lol
29 avril 2004 à 23:02
29 avril 2004 à 23:01
MOV DX,Message
MOV Ah,9
INT 21h
xor ah, ah
INT 16h
RET
Message DB "Hello World !$"
29 avril 2004 à 18:40