begin process at 2012 05 24 02:33:20
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

divers

 > CRÉATION D'UN CADRE SIMPLE (MODE GRAPHIQUE)

CRÉATION D'UN CADRE SIMPLE (MODE GRAPHIQUE)


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :divers Niveau :Débutant Date de création :25/01/2005 Vu / téléchargé :4 697 / 307

Auteur : Tripo

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Bon bah ce n'est pas super compliqué, ce petit programme assembleur affiche un cadre à l'écran.
Niveau qualité graphique, y'a pas grand chose, c'est pas du code super compliqué mais il a toute fois l'avantage d'être (je pense) bien expliqué et assez simple à lire.

Ce code est destiné surtout au novice de l'ASM et à ceux qui souhaiterais aborder l'aspect graphique en ASM (par graphique, j'entend MODE GRAPHIQUE)...

En espérant que la lecture du code ne soit pas trop compliqué... :S
Bonne lecture ;) et merci pour les commentaires


NOTE : Programmé sous WinXP (pro) en NASM (v. 0.98)

Source

  • ; +--------------------------------------------+
  • ; / ASSEMBLEUR \
  • ; | ------------------ |
  • ; | |
  • ; | par Benjamin DUPLEX (Tripo) |
  • ; | le 25/01/2005 |
  • ; | > benjamin.du@wanadoo.fr |
  • ; | |
  • ; | |
  • ; | * COMPILATEUR : NASM 0.98 |
  • ; | * VERSION : Windows |
  • ; | |
  • ; | * COMPILATION : |
  • ; | nasm Cadre.asm -o Cadre.com |
  • ; | |
  • ; | * LANCEMENT : |
  • ; | Cadre.com |
  • ; | |
  • ; \+--------------------------------------------+/
  • ; NOTE :
  • ; ======
  • ; Pour quitter le programme, vous n'avez qu'à appuyer sur une touche
  • bits 16 ; programme 16 bits
  • [ORG 100h] ; commence à l'adresse 0x100 (.com)
  • [SECTION .data] ; zone de déclarations des constantes
  • messageQuit db 'Au revoir',13,10,'$' ; msg utilisé lors de la fermeture du programme
  • [SECTION .text] ; zone de code du programme
  • CALL .MODE_AFF_MODE_GRAPH ; passage en mode graphique
  • CALL .CADRE ; affichage du cadre
  • CALL .TOUCHE ; attente d'une touche
  • CALL .MODE_AFF_MODE_TEXT ; passage en mode text
  • MOV DX, messageQuit
  • CALL .AFFICHAGE_MSG ; affichage du message à l'écran
  • CALL .QUIT ; quitte le programme
  • ; ------------------------------------------------------------
  • ; FONCTION QUI AFFICHE UN CADRE
  • ; ------------------------------------------------------------
  • .CADRE:
  • MOV AL, 90 ; couleur du cadre
  • ; première ligne verticale (à gauche)
  • MOV BX, 0 ; point de départ
  • MOV CX, 200 ; point d'arrivé
  • MOV SI, 0 ; colonne choisie
  • MOV DX, 0 ; trait vertical
  • CALL .AFF_TRAIT ; affichage du trait
  • ; deuxième ligne verticale (à droite)
  • MOV BX, 0 ; point de départ
  • MOV CX, 200 ; point d'arrivé
  • MOV SI, 319 ; colonne choisie
  • MOV DX, 0 ; trait vertical
  • CALL .AFF_TRAIT ; affichage du trait
  • ; première ligne horizontale (en haut)
  • MOV BX, 0 ; point de départ
  • MOV CX, 319 ; point d'arrivé
  • MOV SI, 0 ; ligne choisie
  • MOV DX, 1 ; trait horizontal
  • CALL .AFF_TRAIT ; affichage du trait
  • ; deuxième ligne horizontale (en bas)
  • MOV BX, 0 ; point de départ
  • MOV CX, 319 ; point d'arrivé
  • MOV SI, 199 ; ligne choisie
  • MOV DX, 1 ; trait horizontal
  • CALL .AFF_TRAIT ; affichage du trait
  • RET
  • ; ------------------------------------------------------------
  • ; FONCTION QUI AFFICHE UN TRAIT EN FONCTION DES PARAMETRES
  • ;
  • ; -> BX : point de départ
  • ; -> CX : point d'arrivé
  • ; -> SI : ligne/colonne choisie
  • ; -> DX : vertical/horizontal
  • ;
  • ; APPEL LA FONCTION CONCERNEE SUIVANT DX
  • ; ------------------------------------------------------------
  • .AFF_TRAIT:
  • CMP DX, 0 ; on compare DX à 0
  • JZ .AFF_TRAIT_VERTICAL ; si DX = 0 alors on affiche un trait vertical
  • JNZ .AFF_TRAIT_HORIZONTAL ; sinon on affiche un trait horizontal
  • RET
  • ; ------------------------------------------------------------
  • ; FONCTION QUI AFFICHE UN TRAIT VERTICAL EN
  • ; FONCTION DES PARAMETRES
  • ;
  • ; -> BX : point de départ
  • ; -> CX : point d'arrivé
  • ; -> SI : ligne/colonne choisie
  • ; -> DX : vertical/horizontal
  • ;
  • ; ------------------------------------------------------------
  • .AFF_TRAIT_VERTICAL:
  • SUB CX, BX ; calcul de la longueur du trait (arrivé - départ)
  • MOV DX, BX ; on place le curseur au premier point du trait
  • .BOUCLE_TV:
  • PUSH CX ; on place la longueur restante à écrire en mémoire
  • MOV CX, SI ; on met dans DX la colonne choisie
  • CALL .AFF_POINT ; affichage du point
  • INC DX ; point suivant
  • POP CX ; on retire la longueur du trait qu'il reste à écrire de la mémoire
  • DEC CX ; on la décrémente (car on vient d'écrire un point)
  • CMP CX, 0 ; on la compare à 0
  • JNZ .BOUCLE_TV ; si CX <> 0, alors on boucle
  • RET ; sinon on quitte
  • ; ------------------------------------------------------------
  • ; FONCTION QUI AFFICHE UN TRAIT HORIZONTAL EN
  • ; FONCTION DES PARAMETRES
  • ;
  • ; -> BX : point de départ
  • ; -> CX : point d'arrivé
  • ; -> SI : ligne/colonne choisie
  • ; -> DX : vertical/horizontal
  • ;
  • ; ------------------------------------------------------------
  • .AFF_TRAIT_HORIZONTAL:
  • SUB CX, BX ; calcul de la longueur du trait (arrivé - départ)
  • MOV DX, CX ; met dans DX la valeur de CX
  • MOV CX, BX ; on place le curseur au premier point du trait
  • .BOUCLE_TH:
  • PUSH DX ; on place la longueur restante à écrire en mémoire
  • MOV DX, SI ; on met dans DX la ligne choisie
  • CALL .AFF_POINT ; affichage du point
  • INC CX ; point suivant
  • POP DX ; on retire la longueur du trait qu'il reste à écrire de la mémoire
  • DEC DX ; on la décrémente (car on vient d'écrire un point)
  • CMP DX, 0 ; on la compare à 0
  • JNZ .BOUCLE_TH ; si DX <> 0, alors on boucle
  • RET ; sinon on quitte
  • .AFF_POINT:
  • MOV AH, 0Ch ; fonction 0Ch
  • INT 10h ; interruption 10h (BIOS)
  • RET
  • ; ------------------------------------------------------------
  • ; FONCTION PERMETTANT DE METTRE L'ECRAN EN MODE GRAPHIQUE
  • ; -> 320x200x256
  • ; ------------------------------------------------------------
  • .MODE_AFF_MODE_GRAPH:
  • MOV AX, 0013h ; fonction 00h -> sous-fonction 13h (320x200)
  • INT 10h ; interruption 10h (BIOS)
  • RET
  • ; ------------------------------------------------------------
  • ; FONCTION PERMETTANT DE METTRE L'ECRAN EN MODE TEXTE
  • ; -> 80x25
  • ; ------------------------------------------------------------
  • .MODE_AFF_MODE_TEXT:
  • MOV AX, 0003h ; fonction 00h -> sous-fonction 03h (80x25)
  • INT 10h ; interruption 10h (BIOS)
  • RET
  • ; ------------------------------------------------------------
  • ; FONCTION QUI AFFICHE SE QUI SE TROUVE DANS LE REGISTRE
  • ; DX
  • ; ------------------------------------------------------------
  • .AFFICHAGE_MSG:
  • MOV AH, 09h ; fonction 09h (affichage d'une chaine de caractère)
  • INT 21h ; interruption 21h (DOS)
  • RET
  • ; ------------------------------------------------------------
  • ; FONCTION QUI ATTEND UNE TOUCHE
  • ; ------------------------------------------------------------
  • .TOUCHE:
  • MOV AH, 01h ; fonction 01h (lecture d'une touche)
  • INT 21h ; interruption 21h (DOS)
  • RET
  • ; ------------------------------------------------------------
  • ; FONCTION QUI REND LA MAIN AU DOS
  • ; ------------------------------------------------------------
  • .QUIT:
  • MOV AX, 4C00h ; fonction 4Ch (rend la main au DOS)
  • ; 00h correspond au code 'aucune erreur' et est retourné au programme appelant
  • INT 21h ; interruption 21h (DOS)
;   +--------------------------------------------+
;  /                ASSEMBLEUR                    \
;  |            ------------------                |
;  |                                              |
;  |  par Benjamin DUPLEX  (Tripo)                |
;  |  le 25/01/2005                               |
;  |  > benjamin.du@wanadoo.fr                    |
;  |                                              |
;  |                                              |
;  |  * COMPILATEUR : NASM 0.98                   |
;  |  * VERSION : Windows                         |
;  |                                              |
;  |  * COMPILATION :                             |
;  |    nasm Cadre.asm -o Cadre.com               |
;  |                                              |
;  |  * LANCEMENT :                               |
;  |    Cadre.com                                 |
;  |                                              |
;  \+--------------------------------------------+/


; NOTE :
; ======
; Pour quitter le programme, vous n'avez qu'à appuyer sur une touche




bits 16						; programme 16 bits
[ORG 100h]					; commence à l'adresse 0x100 (.com)

[SECTION .data]					; zone de déclarations des constantes

	messageQuit db 'Au revoir',13,10,'$'	; msg utilisé lors de la fermeture du programme



[SECTION .text]					; zone de code du programme

	CALL	.MODE_AFF_MODE_GRAPH		; passage en mode graphique
	CALL	.CADRE				; affichage du cadre
	CALL	.TOUCHE				; attente d'une touche
	CALL	.MODE_AFF_MODE_TEXT		; passage en mode text
	MOV	DX, messageQuit
	CALL	.AFFICHAGE_MSG			; affichage du message à l'écran
	CALL	.QUIT				; quitte le programme




;  ------------------------------------------------------------
;	FONCTION QUI AFFICHE UN CADRE
;  ------------------------------------------------------------

.CADRE:
	MOV	AL, 90				; couleur du cadre

	; première ligne verticale (à gauche)
	MOV	BX, 0				; point de départ
	MOV	CX, 200				; point d'arrivé
	MOV	SI, 0				; colonne choisie
	MOV	DX, 0				; trait vertical
	CALL	.AFF_TRAIT			; affichage du trait

	; deuxième ligne verticale (à droite)
	MOV	BX, 0				; point de départ
	MOV	CX, 200				; point d'arrivé
	MOV	SI, 319				; colonne choisie
	MOV	DX, 0				; trait vertical
	CALL	.AFF_TRAIT			; affichage du trait

	; première ligne horizontale (en haut)
	MOV	BX, 0				; point de départ
	MOV	CX, 319				; point d'arrivé
	MOV	SI, 0				; ligne choisie
	MOV	DX, 1				; trait horizontal
	CALL	.AFF_TRAIT			; affichage du trait

	; deuxième ligne horizontale (en bas)
	MOV	BX, 0				; point de départ
	MOV	CX, 319				; point d'arrivé
	MOV	SI, 199				; ligne choisie
	MOV	DX, 1				; trait horizontal
	CALL	.AFF_TRAIT			; affichage du trait

	RET




;  ------------------------------------------------------------
;	FONCTION QUI AFFICHE UN TRAIT EN FONCTION DES PARAMETRES
;
;	-> BX : point de départ
;	-> CX : point d'arrivé
;	-> SI : ligne/colonne choisie
;	-> DX : vertical/horizontal
;
; 	APPEL LA FONCTION CONCERNEE SUIVANT DX
;  ------------------------------------------------------------

.AFF_TRAIT:
	CMP	DX, 0				; on compare DX à 0
	JZ	.AFF_TRAIT_VERTICAL		; si DX = 0 alors on affiche un trait vertical
	JNZ	.AFF_TRAIT_HORIZONTAL		; sinon on affiche un trait horizontal
	RET




;  ------------------------------------------------------------
;	FONCTION QUI AFFICHE UN TRAIT VERTICAL EN 
;	FONCTION DES PARAMETRES
;
;	-> BX : point de départ
;	-> CX : point d'arrivé
;	-> SI : ligne/colonne choisie
;	-> DX : vertical/horizontal
;
;  ------------------------------------------------------------

.AFF_TRAIT_VERTICAL:
	SUB	CX, BX				; calcul de la longueur du trait (arrivé - départ)
	MOV	DX, BX				; on place le curseur au premier point du trait
  .BOUCLE_TV:
	PUSH	CX				; on place la longueur restante à écrire en mémoire
	MOV	CX, SI				; on met dans DX la colonne choisie
	CALL	.AFF_POINT			; affichage du point
	INC	DX				; point suivant
	POP	CX				; on retire la longueur du trait qu'il reste à écrire de la mémoire
	DEC	CX				; on la décrémente (car on vient d'écrire un point)
	CMP	CX, 0				; on la compare à 0
	JNZ	.BOUCLE_TV			; si CX <> 0, alors on boucle
	RET					; sinon on quitte




;  ------------------------------------------------------------
;	FONCTION QUI AFFICHE UN TRAIT HORIZONTAL EN 
;	FONCTION DES PARAMETRES
;
;	-> BX : point de départ
;	-> CX : point d'arrivé
;	-> SI : ligne/colonne choisie
;	-> DX : vertical/horizontal
;
;  ------------------------------------------------------------

.AFF_TRAIT_HORIZONTAL:
	SUB	CX, BX				; calcul de la longueur du trait (arrivé - départ)
	MOV	DX, CX				; met dans DX la valeur de CX
	MOV	CX, BX				; on place le curseur au premier point du trait
  .BOUCLE_TH:
	PUSH	DX				; on place la longueur restante à écrire en mémoire
	MOV	DX, SI				; on met dans DX la ligne choisie
	CALL	.AFF_POINT			; affichage du point
	INC	CX				; point suivant
	POP	DX				; on retire la longueur du trait qu'il reste à écrire de la mémoire
	DEC	DX				; on la décrémente (car on vient d'écrire un point)
	CMP	DX, 0				; on la compare à 0
	JNZ	.BOUCLE_TH			; si DX <> 0, alors on boucle
	RET					; sinon on quitte


.AFF_POINT:
	MOV	AH, 0Ch				; fonction 0Ch
	INT	10h				; interruption 10h (BIOS)
	RET




;  ------------------------------------------------------------
;	FONCTION PERMETTANT DE METTRE L'ECRAN EN MODE GRAPHIQUE
;		-> 320x200x256
;  ------------------------------------------------------------

.MODE_AFF_MODE_GRAPH:
    	MOV	AX, 0013h  			; fonction 00h -> sous-fonction 13h (320x200)
	INT	10h				; interruption 10h (BIOS)
	RET




;  ------------------------------------------------------------
;	FONCTION PERMETTANT DE METTRE L'ECRAN EN MODE TEXTE
;		-> 80x25
;  ------------------------------------------------------------

.MODE_AFF_MODE_TEXT:
    	MOV	AX, 0003h  			; fonction 00h -> sous-fonction 03h (80x25)
	INT	10h				; interruption 10h (BIOS)
	RET




;  ------------------------------------------------------------
;	FONCTION QUI AFFICHE SE QUI SE TROUVE DANS LE REGISTRE
;	DX
;  ------------------------------------------------------------

.AFFICHAGE_MSG:
	MOV	AH, 09h				; fonction 09h (affichage d'une chaine de caractère)
	INT	21h				; interruption 21h (DOS)
	RET




;  ------------------------------------------------------------
;	FONCTION QUI ATTEND UNE TOUCHE
;  ------------------------------------------------------------

.TOUCHE:
	MOV	AH, 01h				; fonction 01h (lecture d'une touche)
	INT	21h        			; interruption 21h (DOS)
	RET



;  ------------------------------------------------------------
;	FONCTION QUI REND LA MAIN AU DOS
;  ------------------------------------------------------------

.QUIT:
	MOV	AX, 4C00h 			; fonction 4Ch (rend la main au DOS)
						; 00h correspond au code 'aucune erreur' et est retourné au programme appelant
	INT	21h				; interruption 21h (DOS)

 Conclusion

Je mettrais à jour au fur et à mesure donc n'hésitez surtout pas à critiquer que j'améliore le tout.
Pas encore en ligne, je verrais si je l'ajoute sur mon site (auquel cas j'ajouterais l'URL dans mon profil bien sûr).

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture MINI DEBUG par parki
Source avec une capture DESSIN DE RECTANGLES (POSITION, TAILLE, COULEUR, ÉPAISSEUR) par macsou01
RECHERCHE DES PALINDROMES D'UN TEXTE SAISI. par PCBill
Source avec Zip LIBRAIRIE GRAPHIQUE (ET PLUS) EN MODE RÉEL par epineurien
Source avec Zip Source avec une capture LIB PROGRESSBAR (PERSONNALISABLE , DÉGRADÉ DE COULEUR,POURCE... par knetus

Commentaires et avis

Commentaire de le5ejumeau le 28/04/2005 22:17:16

merci pour ta source super commentée je commence à apprendre l'asm et cette source m'aide beaucoup

Commentaire de neoplayer1 le 14/06/2005 23:37:35

Je trouve ce code un peu long pour ce que tu fais ...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,572 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales