[asm encore et toujours] pour des matrices... ca marche comment ??

pour des matrices... ca marche comment ?? [asm encore et toujours] - Programmation

Marsh Posté le 24-01-2002 à 20:52:00    

pour afficher une matrice, la stocker, l'afficher.. ca se passe comment ??
on met ca sous kelle forme etc ??
si qq'un a des explications simples ca serait cool

Reply

Marsh Posté le 24-01-2002 à 20:52:00   

Reply

Marsh Posté le 25-01-2002 à 18:07:01    

UP siouplait..

Reply

Marsh Posté le 25-01-2002 à 23:39:18    

bou personne pour m'aider ?

Reply

Marsh Posté le 25-01-2002 à 23:58:19    

Le seul truc que j'ai en assembleur concernant les matrices c'est la multiplication de deux matrices 4x4. Mais pour l'affichage et la gestion c'est le stockage. (Moi j'utilise un tableau à une dimension).

Reply

Marsh Posté le 26-01-2002 à 09:33:33    

bah...si tu pouavais simplment m'expliquer ce truc,  
par exemple g une liste t
t dw 0,1,2,3,4
et je voudrais ke le prog m'affiche
0
1
2
3
4
 
si tu pouvias me dire comment faire ca serait cool
thx

Reply

Marsh Posté le 26-01-2002 à 15:00:26    

Ben pour faire de l'affichage je le faisais en C !!!
 
Donc c'est : printf("%d\n",t[0]);
 
En assembleur je ne sais pas le faire.

Reply

Marsh Posté le 26-01-2002 à 15:39:14    

TITI.ASM
 

Code :
  1. a
  2. jmp 10a
  3. e 102 7
  4. e 103 5 6 8 7 8 0 3
  5. a 10a
  6. mov ch,0
  7. mov cl,[102]
  8. mov bx,103
  9. mov ah,[bx]
  10. add ah,30
  11. mov dl, ah
  12. mov ah,02
  13. int 21
  14. mov dl, 0d
  15. int 21
  16. mov dl, 0a
  17. int 21
  18. inc bx
  19. loop 113
  20. mov ah,4c
  21. int 21h
  22. r cx
  23. 2d
  24. n titi.com
  25. w
  26. q


 
(ne pas oublier le retour chariot après le "q", sinon on reste bloqué dans DEBUG !
 
DEBUG < TITI.ASM
Donne titi.com qui affiche :
 
5
6
8
7
8
0
3
 
 :lol:  ;)  :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 26-01-2002 à 15:45:59    

Version commentée

Code :
  1. a
  2. jmp 10a     Saut par dessus les data
  3. e 102 7     7: Nombre de chiffres à afficher
  4. e 103 5 6 8 7 8 0 3  Les chiffres
  5. a 10a
  6. mov ch,0     Init du compteur CX avec le nombre de chiffres
  7. mov cl,[102]
  8. mov bx,103    Bx pointe sur le chiffre à afficher
  9. mov ah,[bx]    Ah récupère la valeur du chiffre
  10. add ah,30    Valeur ascii du chiffre
  11. mov dl, ah    Copie dans dl
  12. mov ah,02    Fonction 02h
  13. int 21     Affichage d'un caractère
  14. mov dl, 0d    Code du Retour chariot dans dl
  15. int 21     Affichage du retour chariot
  16. mov dl, 0a    Code du Saut de Ligne dans dl
  17. int 21     Affichage du Saut de Ligne
  18. inc bx     Positionne bx sur le caractère suivant
  19. loop 113     Boucle (décrémente CX et sort si CX=0)
  20. mov ah,4c    Fonction 4Ch
  21. int 21h     Fin du programme.
  22. r cx
  23. 2d
  24. n titi.com
  25. w
  26. q


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 26-01-2002 à 19:13:05    

thx..
ca fait plaisir d'avoir un peu d'aide..

Reply

Marsh Posté le 26-01-2002 à 20:29:52    

J'éspère que çà t'aidera...
 
C'est de l'ASM de bourin qu'a jamais fait des progs de plus de quelque dizaines d'instrucions, le tout le plus souvent en direct live avec DEBUG !
 
J'en ai fait qu'un seul (Avec TASM il me semble) et je viens de le retrouver :
 

Code :
  1. Title 'AMORCE.ASM', 'Change l'amorce d'une disquette non Bootable'
  2. ;   Version 2.0
  3. ;
  4. ;   Donn'e . copier dans le premier secteur d'une disquette non bootable
  5. ;   Elle contient un programme qui affiche un message et attends la
  6. ;   frappe de la touche SHIFT pour relancer la machine.
  7. MY_PROG segment
  8. org     00100h
  9. assume  cs:MY_PROG, ds:MY_PROG, ss:MY_PROG    ; segment definitions.
  10. Debut:  JMP     Copier
  11. BootSecteur  LABEL   Byte
  12.   DB  0E9h,0C9h,000h
  13. Signature  LABEL   Byte
  14.   DB  000h,000h,000h,000h,000h,000h,000h,000h
  15.   DB  000h,002h,001h,001h,000h
  16.   DB  002h,0E0h,000h,040h,00Bh,0F0h,009h,000h,012h,000h,002h,000h,000h,000h,000h,000h
  17.   DB  000h,000h,000h,000h,00Fh,000h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h
  18.   DB  000h,001h,002h,000h,001h,010h,021h,000h,000h,000h,000h,000h,000h,000h,000h,000h
  19.   DB  0C9h,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0BBh,0BAh,020h,044h
  20.   DB  049h,053h,051h,055h,045h,054h,054h,045h,020h,0BAh,0BAh,020h,04Eh,04Fh,04Eh,020h
  21.   DB  020h,020h,020h,020h,020h,020h,0BAh,0BAh,020h,042h,04Fh,04Fh,054h,041h,042h,04Ch
  22.   DB  045h,020h,020h,0BAh,0BAh,020h,052h,045h,04Dh,050h,04Ch,041h,043h,045h,05Ah,020h
  23.   DB  0BAh,0BAh,020h,045h,054h,020h,020h,020h,020h,020h,020h,020h,020h,0BAh,0BAh,020h
  24.   DB  041h,050h,050h,055h,059h,045h,05Ah,020h,020h,020h,0BAh,0BAh,020h,053h,055h,052h
  25.   DB  020h,020h,020h,020h,020h,020h,020h,0BAh,0BAh,020h,053h,048h,049h,046h,054h,020h
  26.   DB  020h,020h,020h,020h,0BAh,0C8h,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh,0CDh
  27.   DB  0CDh,0BCh,03Dh,026h,000h,000h,000h,000h,000h,001h,0FFh,000h,0FAh,031h,0C0h,08Eh
  28.   DB  0D0h,0BCh,000h,07Ch,0B8h,0B0h,007h,08Eh,0D8h,0FBh,0B4h,001h,0B9h,000h,020h,0CDh
  29.   DB  010h,0FCh,0BEh,040h,001h,0B6h,007h,0BBh,007h,000h,0B9h,00Ah,000h,051h,0B4h,002h
  30.   DB  0B2h,020h,0CDh,010h,0B9h,00Dh,000h,0B4h,00Eh,0ACh,0CDh,010h,0E2h,0F9h,0FEh,0C6h
  31.   DB  059h,0E2h,0EAh,0B4h,002h,0B7h,000h,031h,0D2h,0CDh,010h,0B4h,008h,0CDh,010h,0A3h
  32.   DB  0C7h,001h,0B4h,012h,0CDh,016h,0A8h,001h,075h,07Ch,0B4h,086h,031h,0C9h,0BAh,000h
  33.   DB  038h,0CDh,015h,0B4h,002h,08Bh,016h,0C5h,001h,0CDh,010h,08Bh,016h,0C7h,001h,088h
  34.   DB  0D0h,088h,0F3h,0B9h,001h,000h,0B4h,009h,0CDh,010h,0B4h,002h,08Bh,016h,0C3h,001h
  35.   DB  0CDh,010h,0B4h,008h,0CDh,010h,0A3h,0C7h,001h,089h,016h,0C5h,001h,0B8h,02Ah,009h
  36.   DB  08Ah,01Eh,0CBh,001h,080h,0FBh,00Fh,075h,004h,0B3h,000h,0EBh,002h,0FEh,0C3h,088h
  37.   DB  01Eh,0CBh,001h,0CDh,010h,002h,036h,0C9h,001h,075h,004h,0B4h,001h,0EBh,007h,080h
  38.   DB  0FEh,018h,075h,006h,0B4h,0FFh,088h,026h,0C9h,001h,002h,016h,0CAh,001h,075h,004h
  39.   DB  0B4h,001h,0EBh,007h,080h,0FAh,04Fh,075h,006h,0B4h,0FFh,088h,026h,0CAh,001h,089h
  40.   DB  016h,0C3h,001h,0E9h,07Ch,0FFh,031h,0D2h,0B4h,002h,0BBh,007h,000h,0CDh,010h,0B4h
  41.   DB  00Eh,0B9h,0DEh,000h,051h,0B9h,009h,000h,0BEh,003h,001h,0ACh,0CDh,010h,0E2h,0FBh
  42.   DB  059h,0E2h,0F1h,0B4h,086h,0BAh,0FFh,0FFh,0B9h,001h,000h,0CDh,015h,0CDh,019h,000h
  43.   DB  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
  44.   DB  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
  45.   DB  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
  46.   DB  000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,055h,0AAh
  47. ;   Messages and Codes retours.
  48. ;   Messages
  49. mess0    DB     13,10,'Copie secteur de BOOT termin'.',13,10,0 
  50. mess1    DB     13,10,'Disquette prot'g'e !',13,10,0
  51. mess2    DB     13,10,'Secteur non trouv' !',13,10,0
  52. mess3    DB     13,10,'Pas de disquette !',13,10,0
  53. mess4    DB     13,10,'Pas de r'ponse !',13,10,0
  54. mess5    DB     'Ce programme modifie le secteur de BOOT de la disquette "A"',13,10
  55. mess5Bis DB     'Taper une signature (1 . 8 caractSres)',13,10,0
  56. mess6    DB     13,10,'La signature ne peut ^tre vide !',13,10,0
  57. mess7    DB     13,10,'--------- ABANDON ---------',13,10,0
  58. ;   error table
  59. ErrTbl  LABEL   BYTE
  60. DB      000h
  61. DW      OFFSET mess0
  62. DB      003h
  63. DW      OFFSET mess1
  64. DB      004h
  65. DW      OFFSET mess2
  66. DB      006h
  67. DW      OFFSET mess3
  68. DB      080h
  69. DW      OFFSET mess4
  70. DB      0EEh
  71. DW      OFFSET mess5
  72. DB      0F1h
  73. DW      OFFSET mess6
  74. DB      0F2h
  75. DW      OFFSET mess7 ;Attention, si on ajoute des messages, il faut
  76.      ;Penser . incr'menter CX dans Message:
  77. ;   Programme principal.
  78. Copier:
  79. CLD
  80. LEA     SP,[Pile]
  81. CALL    Init
  82. JB      ErrExit             
  83. CALL    Copie
  84. JB      ErrExit
  85. MOV     AH,000h
  86. ErrExit:     
  87. CALL    Message 
  88. ExitDos:
  89. MOV     AX,04C00h
  90. INT     021h
  91. Init:
  92. MOV     AH,0EEh
  93. CALL    Message
  94. CALL    Clav_Debut
  95. MOV     AH,000h
  96. MOV     DL,000h
  97. INT     013h
  98. RET
  99. Copie:
  100. MOV     CX,00003h
  101. Boucle:
  102. PUSH    CX
  103. MOV     AX,00301h
  104. LEA     BX,[BootSecteur]             
  105. MOV     CX,00001h
  106. XOR     DX,DX
  107. PUSH    DS
  108. POP     ES
  109. INT     013h
  110. JNB     Suite
  111. POP     CX
  112. LOOP    Boucle
  113. RET
  114. Suite:
  115. POP     CX
  116. RET
  117. Message:
  118. PUSH AX
  119. PUSH BX
  120. PUSH CX
  121. PUSH SI
  122. PUSHF
  123. LEA     SI,[ErrTbl]  ;SI := OFFSET ErrTbl
  124. MOV     CX,00008h  ;!!! DOIT CONTENIR LE NOMBRE DE MESSAGES !!!
  125. Charge:
  126. LODSB    ;AL := DS:SI et SI += 01h (Offset du message)
  127. CMP     AH,AL   ;V'rifie si c'est le bon message
  128. JE      Affiche  ;Pour l'afficher
  129. INC     SI   ;Passe Num'ro de message suivant
  130. INC     SI               ;...
  131. LOOP    Charge   ;Va le comparer
  132. JMP    ExitDos  ;Si on est en fin de table
  133. Affiche:
  134. MOV     BX,00007h
  135. LODSW
  136. MOV     SI,AX
  137. MOV     AH,0Eh                               
  138. Affcar:
  139. LODSB
  140. OR      AL,AL   ;Test Fin de message
  141. JE      Fin
  142. INT     010h
  143. JMP     Affcar
  144. Fin:
  145. POPF
  146. POP SI
  147. POP CX
  148. POP BX
  149. POP AX
  150. RET
  151. ;------------------------------------------------------------------
  152. ----
  153. Clav_Debut:
  154. PUSH AX
  155. PUSH BX
  156. PUSH CX
  157. PUSHF
  158. Clav_Init:
  159. MOV CX,08h
  160. Clav_Zone:
  161. MOV AX,0E5Fh ;Ecriture d'un "_"
  162. INT 010h
  163. LOOP Clav_Zone
  164. MOV AX,0E0Dh ;Retour d'but Zone
  165. INT 010h
  166. XOR BX,BX
  167. MOV CX,08h
  168. Clav_Saisie:
  169. XOR AX,AX
  170. INT 016h
  171. CMP AL,08h ;Test Backspace
  172. JE Clav_Backspace
  173. CMP AL,0Dh ;Test Entr'e
  174. JE Clav_Fin
  175. CMP AL,01Bh ;Test Escape -> Sortie
  176. JE Clav_Esc
  177. CMP AL,020h ;Test Espace
  178. JE Clav_Affiche
  179. CMP AL,030h ;Test "0"
  180. JB Clav_Beep
  181. CMP AL,039h ;Test "9"
  182. JBE Clav_Affiche
  183. CMP AL,041h ;Test "A"
  184. JB   Clav_Beep
  185. CMP AL,05Ah ;Test "Z"
  186. JBE Clav_Affiche
  187. CMP AL,061h ;Test "a"
  188. JB Clav_Beep
  189. CMP AL,07Ah ;Test "z"
  190. JBE Clav_Affiche
  191. Clav_beep:
  192. MOV AL,07h ;Son Beep
  193. MOV AH,0Eh
  194. INT 010h
  195. JMP Clav_Saisie
  196. Clav_Backspace:
  197. CMP  CX,08h
  198. JE Clav_Beep
  199. DEC BX
  200. MOV [Signature+BX],0h
  201. INC CX
  202. MOV AH,0Eh ;Envoi du backspace
  203. INT 010h
  204. MOV AX,0E5Fh ;Ecriture d'un "_"
  205. INT 010h
  206. MOV AX,0E08h ;Retour arriSre sur le "_"
  207. INT 010h
  208. JMP Clav_Saisie
  209. Clav_Affiche:
  210. MOV [Signature+BX],AL
  211. INC BX
  212. MOV AH,0Eh
  213. INT 010h
  214. LOOP Clav_Saisie
  215. Clav_Fin:
  216. MOV AX,08h
  217. SUB AX,CX
  218. JNZ Clav_Sortie
  219. MOV AH,0F1h
  220. CALL Message
  221. JMP Clav_Init
  222. Clav_Esc:
  223. MOV AH,0F2h
  224. JMP ErrExit
  225. Clav_Sortie:
  226. MOV AX,0E0Dh
  227. INT 010h
  228. MOV AX,0E0Ah
  229. INT 010h
  230. POPF
  231. POP CX
  232. POP BX
  233. POP AX
  234. RET
  235. DB      0200h dup(0)
  236. Pile    Label   word
  237. MY_PROG ends
  238. end     Debut


 
En fait y'a 2 progs :
 
Celui en clair qui écrit le secteur de boot, et le secteur de boot lui-même.
Ce dernier à été écrit en direct avec DEBUG.
 
Le but de tout çà :
1- Nettoyer les disquettes infectées par un virus de boot.
2- Remplacer le message classique (Disquette non bootable) par un truc plus fun ! Si on tente de booter avec une disquette qui contient mon prog, il affiche au centre de l'écran un cardre contenant un message disant de mettre un disque bootable et d'appuyer sur Shift pour rebooter. Pendant ce temp, un caractère "*" se promène sur l'écran en changeant de couleur. Quand on appuie sur SHIFT, la "Signature" (demandé par le prog d'écriture du secteur de boot) remplie tout l'écran le temps que la machine reboote.
 
Le tout en moins de 512 octets ! (Enfin pour le secteur de boot)


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed