; +++++++++++++++++++++++++++++++++++++++++++++++ ; + CALCUL DES TERMES DES LIGNES D'UNE MATRICE + ; + Version 1.0a - Date de modif : 02/03/06 + ; + Auteur: Sébastien WARIN (48759) + ; + Website : http://sebeuh.ajsinfo.net + ; +++++++++++++++++++++++++++++++++++++++++++++++ ; + Notes : + ; + Developpé sur processeur 8086 + ; + Ne gere que deux octects (max: 99) + ; + Matrice de 4x3 (12 nombres) + ; + Remerciments à Alexandre CARRILLO + ; + pour son aide concernant + ; + l'affichage des resultats + ; +++++++++++++++++++++++++++++++++++++++++++++++ ; + Algorithme : + ; + + ; + TAB : Matrice 4x3 + ; + DI, CX, AX : Entier = 0 + ; + + ; + DEBUT + ; + BX = tab + ; + AX = AX + tab[CX*2] + ; + DI++ + ; + CX++ + ; + SI DI=3 ALORS newline + ; + FIN SI + ; + SI CX = 12 ALORS FIN DU PROGRAMME + ; + SINON Retour au debut de la boucle + ; + FIN SI + ; + FIN + ; + + ; + PROCEDURE newline + ; + AX / 10 : AL= quotient AH= reste + ; + AL = AL + 48 (pour le code ASCII) + ; + AH = AH + 48 (pour le code ASCII) + ; + Affiche AL (quotient) + ; + Affiche AH (reste) + ; + Affiche le code 10 et 13 (= \n) + ; + DI = 0 et AX= 0 + ; + Retour au debut de la boucle + ; + FIN PROCEDURE + ; +++++++++++++++++++++++++++++++++++++++++++++++ ; + Exemple : + ; + 3 4 9 = 16 + ; + 14 11 2 = 27 + ; + 6 4 8 = 18 + ; + 7 5 1 = 13 + ; +++++++++++++++++++++++++++++++++++++++++++++++ ; ============================================== org 100h ; Structure d'un .COM JMP code ; Demarrage du programme ; ======= Variable du tableau de données ======= tab DW 3,4,9,14,11,2,6,4,8,7,5,1 ; matrice de 4x3 code: ; ============= Init des registres ============= MOV AX, 0 ; AX : Somme par ligne MOV CX, 0 ; CX : Index du tableau TAB MOV DI, 0 ; DX : Compteur de ligne boucle: ; ============== Boucle principale ============= LEA BX, tab ; Chargement du tableau TAB dans BX MOV SI, CX ; Calcul de l'index dans SI ADD SI, SI ; du tableau TAB MOV DX, [BX+SI] ; Mets le tab[SI] dans DX ADD AX, DX ; Additionne AX = AX + DX INC CX ; Incremente CX pour la boucle INC DI ; Incremente DI pour le compteur de ligne CMP DI, 3 ; Si DI=3, nouvelle ligne (newline) JE newline CMP CX, 12 ; Si AX = 12, fin du programme (fin) JGE fin JMP boucle ; Retour au debut de la boucle newline: ; ================ Nouvelle ligne =============== MOV BL, 10 ; Divise AX/10 DIV BL ; AL = quotien et AH = reste ADD AL, 48 ; Char ASCII de AL (quotient) MOV BH, AH ; Sauvegarde du reste (AH) dans BH ADD BH, 48 ; Char ASCII de BH (reste) MOV AH, 0Eh ; Fonction d'affichage INT 10h ; Interruption 1OH : affichage de AL (quotient) MOV AL, BH ; Reste (BH) dans AL INT 10h ; Interruption 1OH : affichage de AL (reste) MOV AL, 10 ; AL = 10 (Saut de ligne = \n en C = char 10 + 13) INT 10h ; Affiche AL=10 MOV AL, 13 ; AL = 13 INT 10h ; Affiche AL=13 MOV DI, 0 ; Remet DI a 0 MOV AX, 0 ; Remet AX a 0 JMP boucle ; Retour au debut de la boucle fin: ; ================= Fin du programme ============== RET ; Retourne la main a l'OS