Este programa corria en el avimz80, revisa la declaracion de datos para conocer la funcionalidad del mismo.
1: defseg teste,start=0000h,absolute;
2: seg teste;
3:
4: LD SP,3DFFH
5: INICIO:
6: ;CALL BORRAR_PAN
7:
8: ;LD IX,MENU1
9: ;LD A,1
10: ;CALL ENVIAR_MEN
11:
12: ;LD IX,MENU2
13: ;LD A,2
14: ;CALL ENVIAR_MEN
15:
16: ;LD IX,MENU3
17: ;LD A,3
18: ;CALL ENVIAR_MEN
19: LD A,0
20: MENU:
21: ;CALL SCAN
22:
23: CP "1"
24: JP Z,OPCION1
25: CP "2"
26: JP Z,OPCION2
27: CP "3"
28: JP Z,OPCION3
29: CP "4"
30: JP Z,OPCION4
31: CP "5"
32: JP Z,OPCION5
33: CP "6"
34: JP Z,OPCION6
35: JP MENU
36: OPCION6: HALT
37:
38: ; SE TOMA EL VALOR DE LAS NOTAS EN ASCII, SE LLEVAN A BCD Y LUEGO LLEVAN
39: ; A HEXA, SE SUMAN EN HEXA GUARDANDO EL RESULTADO EN EL REGISTRO IX. PARA
40: ; TRATAR A LOS DECIMALES SE LLEVA A HEXA EL NUMERO COMPLETO, POR EJEMPLO
41: ; 36,7 SE TRATA COMO SI FUESE 367, ESTE NUMERO ES EL QUE SE LLEVA A HEXA,
42: ; Y DESPUES DE PROMEDIAR SE HACE LA CONVERSION A BCD TENIENDO EN CUENTA
43: ; QUE HAY UN DECIMAL
44:
45: OPCION1:
46: ;CALL BORRAR_PAN
47: LD IY,DATOS
48: LD BC,15
49: INIOP1: PUSH BC
50: PUSH IY
51: LD BC,20
52: ADD IY,BC
53: LD IX,0
54: PUSH IX
55: CALL BCDHEX
56: PUSH IX
57: POP DE
58: POP IX
59: ADD IX,DE
60: PUSH IX
61: LD BC,5
62: ADD IY,BC
63: LD IX,0
64: CALL BCDHEX
65: PUSH IX
66: POP DE
67: POP IX
68: ADD IX,DE
69: PUSH IX
70: LD BC,5
71: ADD IY,BC
72: LD IX,0
73: CALL BCDHEX
74: PUSH IX
75: POP DE
76: POP IX
77: ADD IX,DE
78: PUSH IX
79: LD BC,5
80: ADD IY,BC
81: LD IX,0
82: CALL BCDHEX
83: PUSH IX
84: POP DE
85: POP IX
86: ADD IX,DE
87: PUSH IX
88: LD BC,5
89: ADD IY,BC
90: LD IX,0
91: CALL BCDHEX
92: PUSH IX
93: POP DE
94: POP IX
95: ADD IX,DE
96: PUSH IX
97: POP BC
98: LD IX,0
99: LD DE,5
100: LD IY,0
101: SUMA: ADD IY,DE
102: INC IX
103: PUSH IY
104: POP HL
105: SBC HL,BC
106: JP C,SUMA
107: JP Z,NO_INC
108: DEC IX
109: NO_INC: PUSH IX
110: POP DE
111: LD IX,DATOS
112: CALL HEXBCD
113:
114: POP BC
115: POP IY
116: LD DE,50
117: ADD IY,DE
118: DEC C
119: JP NZ,INIOP1
120: ;CALL IMPRIMIR
121: JP INICIO
122:
123:
124: ; SE HACE LA COMPARACION DEL REGISTRO EN MEMORIA CON LA POSICION
125: ; DE MEMORIA QUE EQUIVALE AL PRIMER Y SEGUNDO DIGITO DEL PROMEDIO
126: ; SE HACEN COMPARACIONES CON LOS 15 REGISTROS EXISTENTES EN MEMORIA
127: ; SE HACEN LAS COMPARACIONES USANDO EL PAR DE REGISTRO DE, TENIENDO ELLOS
128: ; LOS VALORES ACTUALES A COMPARAR, ENTRE 30H Y 3AH
129:
130:
131: OPCION2:
132: ;CALL BORRAR_PAN
133: LD IY,DATOS
134: LD IX,TABLA1
135: LD D,"0"
136: PUSH IY
137: POP HL
138:
139: PRONUM21: LD E,"0"
140: PRONUM2: PUSH HL
141: POP IY
142: LD B,15
143: PRO_REG2: LD A,(IY+45)
144: CP D
145: CALL Z,VER_E2
146: PUSH DE
147: LD DE,50
148: ADD IY,DE
149: POP DE
150: DJNZ PRO_REG2
151: INC E
152: LD A,3AH
153: CP E
154: JP NZ,PRONUM2
155: INC D
156: CP D
157: JP NZ,PRONUM21
158:
159: ;CALL IMPRIMIR
160: JP INICIO
161: VER_E2: LD A,(IY+46)
162: CP E
163: CALL Z,COPIO
164: RET
165:
166: ; SE HACE LA COMPARACION DEL REGISTRO EN MEMORIA CON LA POSICION
167: ; DE MEMORIA QUE EQUIVALE AL PRIMER Y SEGUNDO DIGITO DE LA NOTA SELECCIONADA
168: ; SE HACEN COMPARACIONES CON LOS 15 REGISTROS EXISTENTES EN MEMORIA
169: ; SE HACEN LAS COMPARACIONES USANDO EL PAR DE REGISTRO DE, TENIENDO ELLOS
170: ; LOS VALORES ACTUALES A COMPARAR, ESTANDO ELLOS ENTRE 30H Y 3AH
171:
172:
173: OPCION3:
174: ;CALL BORRAR_PAN
175:
176: ;LD IX,MENU4
177: ;LD A,1
178: ;CALL ENVIAR_MEN
179:
180: ;LD IX,MENU5
181: ;LD A,2
182: ;CALL ENVIAR_MEN
183:
184: ;LD IX,MENU6
185: ;LD A,3
186: ;CALL ENVIAR_MEN
187:
188: ;LD IX,MENU7
189: ;LD A,4
190: ;CALL ENVIAR_MEN
191: ;CALL SCAN
192: LD A,0
193: ESPERA: NOP
194: CP 0
195: JP Z,ESPERA
196:
197:
198: CP "1"
199: JP Z,NOTA1
200: CP "2"
201: JP Z,NOTA2
202: CP "3"
203: JP Z,NOTA3
204: CP "4"
205: JP Z,NOTA4
206: CP "5"
207: JP Z,NOTA5
208:
209: JP ESPERA
210: NOTA1:
211: ;CALL BORRAR_PAN
212: LD IY,DATOS
213: LD IX,TABLA1
214: LD D,"9"
215: PUSH IY
216: POP HL
217:
218: PRONUM31: LD E,"9"
219: PRONUM30: PUSH HL
220: POP IY
221: LD B,15
222: PRO_R30: LD A,(IY+20)
223: CP D
224: CALL Z,VER_E31
225: PUSH DE
226: LD DE,50
227: ADD IY,DE
228: POP DE
229: DJNZ PRO_R30
230: DEC E
231: LD A,2FH
232: CP E
233: JP NZ,PRONUM30
234: DEC D
235: CP D
236: JP NZ,PRONUM31
237:
238: ;CALL IMPRIMIR
239: JP INICIO
240: VER_E31: LD A,(IY+21)
241: CP E
242: CALL Z,COPIO
243: RET
244:
245: NOTA2:
246: ;CALL BORRAR_PAN
247: LD IY,DATOS
248: LD IX,TABLA1
249: LD D,"9"
250: PUSH IY
251: POP HL
252:
253: PRONUM33: LD E,"9"
254: PRONUM32: PUSH HL
255: POP IY
256: LD B,15
257: PRO_R32: LD A,(IY+25)
258: CP D
259: CALL Z,VER_E32
260: PUSH DE
261: LD DE,50
262: ADD IY,DE
263: POP DE
264: DJNZ PRO_R32
265: DEC E
266: LD A,2FH
267: CP E
268: JP NZ,PRONUM32
269: DEC D
270: CP D
271: JP NZ,PRONUM33
272: ;CALL IMPRIMIR
273: JP INICIO
274: VER_E32: LD A,(IY+26)
275: CP E
276: CALL Z,COPIO
277: RET
278:
279:
280: NOTA3:
281: ;CALL BORRAR_PAN
282: LD IY,DATOS
283: LD IX,TABLA1
284: LD D,"9"
285: PUSH IY
286: POP HL
287:
288: PRONUM35: LD E,"9"
289: PRONUM34: PUSH HL
290: POP IY
291: LD B,15
292: PRO_R33: LD A,(IY+30)
293: CP D
294: CALL Z,VER_E33
295: PUSH DE
296: LD DE,50
297: ADD IY,DE
298: POP DE
299: DJNZ PRO_R33
300: DEC E
301: LD A,2FH
302: CP E
303: JP NZ,PRONUM34
304: DEC D
305: CP D
306: JP NZ,PRONUM35
307:
308: ;CALL IMPRIMIR
309: JP INICIO
310: VER_E33: LD A,(IY+31)
311: CP E
312: CALL Z,COPIO
313: RET
314:
315:
316: NOTA4:
317: ;CALL BORRAR_PAN
318: LD IY,DATOS
319: LD IX,TABLA1
320: LD D,"9"
321: PUSH IY
322: POP HL
323:
324: PRONUM37: LD E,"9"
325: PRONUM36: PUSH HL
326: POP IY
327: LD B,15
328: PRO_R34: LD A,(IY+35)
329: CP D
330: CALL Z,VER_E34
331: PUSH DE
332: LD DE,50
333: ADD IY,DE
334: POP DE
335: DJNZ PRO_R34
336: DEC E
337: LD A,2FH
338: CP E
339: JP NZ,PRONUM36
340: DEC D
341: CP D
342: JP NZ,PRONUM37
343:
344: ;CALL IMPRIMIR
345: JP INICIO
346: VER_E34: LD A,(IY+36)
347: CP E
348: CALL Z,COPIO
349: RET
350:
351:
352: NOTA5:
353: ;CALL BORRAR_PAN
354: LD IY,DATOS
355: LD IX,TABLA1
356: LD D,"9"
357: PUSH IY
358: POP HL
359:
360: PRONUM39: LD E,"9"
361: PRONUM38: PUSH HL
362: POP IY
363: LD B,15
364: PRO_R35: LD A,(IY+40)
365: CP D
366: CALL Z,VER_E35
367: PUSH DE
368: LD DE,50
369: ADD IY,DE
370: POP DE
371: DJNZ PRO_R35
372: DEC E
373: LD A,2FH
374: CP E
375: JP NZ,PRONUM38
376: DEC D
377: CP D
378: JP NZ,PRONUM39
379:
380: ;CALL IMPRIMIR
381: JP INICIO
382: VER_E35: LD A,(IY+41)
383: CP E
384: CALL Z,COPIO
385: RET
386:
387: ; SE HACE LA COMPARACION DEL REGISTRO EN MEMORIA CON LA POSICION
388: ; DE MEMORIA QUE EQUIVALE A LA PRIMERA Y SEGUNDA LETRA DEL NOMBRE
389: ; SE HACEN COMPARACIONES CON LOS 15 REGISTROS EXISTENTES EN MEMORIA
390: ; SE HACEN LAS COMPARACIONES USANDO EL PAR DE REGISTRO DE, TENIENDO ELLOS
391: ; LOS VALORES ACTUALES A COMPARAR
392:
393: OPCION4:
394: ;CALL BORRAR_PAN
395: LD IY,DATOS
396: LD IX,TABLA1
397: LD D,"A"
398: PUSH IY
399: POP HL
400:
401: PROLET41: LD E,"A"
402: PROLET4: PUSH HL
403: POP IY
404: LD B,15
405: PRO_REG4: LD A,(IY)
406: CP D
407: CALL Z,VER_E4
408: PUSH DE
409: LD DE,50
410: ADD IY,DE
411: POP DE
412: DJNZ PRO_REG4
413: INC E
414: LD A,5BH
415: CP E
416: JP NZ,PROLET4
417: INC D
418: CP D
419: JP NZ,PROLET41
420: ;CALL IMPRIMIR
421: JP INICIO
422: VER_E4: LD A,(IY+1)
423: CP E
424: CALL Z,COPIO
425: RET
426:
427: ; SE HACE LA COMPARACION DEL REGISTRO EN MEMORIA CON LA POSICION
428: ; DE MEMORIA QUE EQUIVALE A LA PRIMERA Y SEGUNDA LETRA DEL APELLIDO
429: ; SE HACEN COMPARACIONES CON LOS 15 REGISTROS EXISTENTES EN MEMORIA
430: ; SE HACEN LAS COMPARACIONES USANDO EL PAR DE REGISTRO DE, TENIENDO ELLOS
431: ; LOS VALORES ACTUALES A COMPARAR
432:
433: OPCION5:
434: ;CALL BORRAR_PAN
435: LD IY,DATOS
436: LD IX,TABLA1
437: LD D,"A"
438: PUSH IY
439: POP HL
440:
441: PROLET5: LD E,"A"
442: PROLET51: PUSH HL
443: POP IY
444: LD B,15
445: PROREG51: LD A,(IY+10)
446: CP D
447: CALL Z,VER_E5
448: PUSH DE
449: LD DE,50
450: ADD IY,DE
451: POP DE
452: DJNZ PROREG51
453: INC E
454: LD A,5BH
455: CP E
456: JP NZ,PROLET51
457: INC D
458: CP D
459: JP NZ,PROLET5
460: ;CALL IMPRIMIR
461: JP INICIO
462: VER_E5: LD A,(IY+11)
463: CP E
464: CALL Z,COPIO
465: RET
466:
467:
468: COPIO: PUSH BC
469: LD B,50
470: PUSH IY
471: COPIO1: LD A,(IY)
472: LD (IX),A
473: INC IX
474: INC IY
475: DJNZ COPIO1
476: POP IY
477: POP BC
478: RET
479:
480:
481: ; SE DESCOMPONE EL NUMERO EN BCD Y SE HACE UNA SUMA SUCESIVA DEL NUMERO
482: ; PARA LLEVARLO A HEXA POR EJEMPLO:
483: ; 953 = 9 * 100 + 5 * 10 + 3
484: BCDHEX: ; LLEVAR DE BCD DECLARADO EN MEMORIA A HEXA
485: LD HL,0
486: LD DE,100
487: LD A,(IY+0)
488: AND 0FH
489: CP 0
490: JP Z,PROXN2
491: LD B,A
492: SUMO2: ADD HL,DE
493: DJNZ SUMO2
494: PUSH HL
495: POP DE
496: ADD IX,DE
497: PROXN2:
498: LD HL,0
499: LD DE,10
500: LD A,(IY+1)
501: AND 0FH
502: CP 0
503: JP Z,PROXN3
504: LD B,A
505: SUMO3: ADD HL,DE
506: DJNZ SUMO3
507: PUSH HL
508: POP DE
509: ADD IX,DE
510: PROXN3:
511: LD DE,0
512: LD A,(IY+3)
513: AND 0FH
514: LD E,A
515: ADD IX,DE
516: RET
517:
518:
519: ; PARA LLEVAR DE HEXA A BCD SE APLICA EL METODO DE DECREMENTOS SUCESIVOS
520: ; DEL NUMERO EN HEXA A MEDIDA QUE SE INCREMENTAN POSICIONES DE MEMORIAS
521: ; VIGILANDO QUE EL RESULTADO DE ESOS INCREMENTOS SE MANTENGA ENTRE 0 Y 9
522: ; DE HEXA A BCD
523: HEXBCD:
524: LD (IX+45),0
525: LD (IX+46),0
526: LD (IX+47),","
527: LD (IX+48),0
528: LD A,0
529: CP E
530: JP Z,COMP1
531: JP DECREMEN
532: COMP1: CP D
533: JP Z,NODECRE
534: DECREMEN: INC (IX+48)
535: LD A,(IX+48)
536: CP 10
537: JP C,DECRE1
538: LD (IX+48),0
539:
540: INC (IX+46)
541: LD A,(IX+46)
542: CP 10
543: JP C,DECRE1
544: LD (IX+46),0
545: INC (IX+45)
546: DECRE1: DEC E
547: JP NZ,DECREMEN
548: DEC D
549: LD A,0FFH
550: CP D
551: JP Z,NODECRE
552: JP DECREMEN
553: NODECRE: NOP
554: LD A,(IX+45)
555: OR 30H
556: LD (IX+45),A
557: LD A,(IX+46)
558: OR 30H
559: LD (IX+46),A
560: LD A,(IX+48)
561: OR 30H
562: LD (IX+48),A
563: RET
564:
565: IMPRIMIR: LD IY,TABLA1
566: LD DE,50
567:
568: PUSH IY
569: POP IX
570: LD A,1
571: ;CALL ENVIAR_MEN
572: ADD IY,DE
573:
574: PUSH IY
575: POP IX
576: LD A,2
577: ;CALL ENVIAR_MEN
578: ADD IY,DE
579:
580: PUSH IY
581: POP IX
582: LD A,3
583: ;CALL ENVIAR_MEN
584: ADD IY,DE
585:
586: PUSH IY
587: POP IX
588: LD A,4
589: ;CALL ENVIAR_MEN
590: ADD IY,DE
591: ;CALL SCAN
592: ;CALL BORRAR_PAN
593:
594: PUSH IY
595: POP IX
596: LD A,1
597: ;CALL ENVIAR_MEN
598: ADD IY,DE
599:
600: PUSH IY
601: POP IX
602: LD A,2
603: ;CALL ENVIAR_MEN
604: ADD IY,DE
605:
606: PUSH IY
607: POP IX
608: LD A,3
609: ;CALL ENVIAR_MEN
610: ADD IY,DE
611:
612: PUSH IY
613: POP IX
614: LD A,4
615: ;CALL ENVIAR_MEN
616: ADD IY,DE
617: ;CALL SCAN
618: ;CALL BORRAR_PAN
619:
620: PUSH IY
621: POP IX
622: LD A,1
623: ;CALL ENVIAR_MEN
624: ADD IY,DE
625:
626: PUSH IY
627: POP IX
628: LD A,2
629: ;CALL ENVIAR_MEN
630: ADD IY,DE
631:
632: PUSH IY
633: POP IX
634: LD A,3
635: ;CALL ENVIAR_MEN
636: ADD IY,DE
637:
638: PUSH IY
639: POP IX
640: LD A,4
641: ;CALL ENVIAR_MEN
642: ADD IY,DE
643: ;CALL SCAN
644: ;CALL BORRAR_PAN
645:
646: PUSH IY
647: POP IX
648: LD A,1
649: ;CALL ENVIAR_MEN
650: ADD IY,DE
651:
652: PUSH IY
653: POP IX
654: LD A,2
655: ;CALL ENVIAR_MEN
656: ADD IY,DE
657:
658: PUSH IY
659: POP IX
660: LD A,3
661: ;CALL ENVIAR_MEN
662: ;CALL SCAN
663: RET
664:
665:
666: ORG 1000H
667: DATOS DB "WILSON MENDOZA 10,1 10,1 10,1 10,1 10,1 $"
668: DB "ALFREDO CONTRERAS 15,2 35,9 36,3 46,3 36,5 $"
669: DB "MARIA GONZALES 40,2 25,6 82,5 19,7 53,2 $"
670: DB "CARMEN ACOSTA 50,4 89,6 74,5 60,5 10,5 $"
671: DB "SIMON BOLIVAR 15,9 54,9 78,4 10,6 45,9 $"
672: DB "ANDRES BELLO 56,9 85,4 48,6 48,9 54,6 $"
673: DB "NORELIS RODRIGUEZ 80,5 60,9 70,5 65,1 48,7 $"
674: DB "DENNISE GONZALES 50,1 65,7 84,9 70,5 49,9 $"
675: DB "EDITH DUARTE 48,7 40,5 25,6 60,3 54,9 $"
676: DB "GABRIEL PEREZ 40,2 35,6 68,3 10,2 05,3 $"
677: DB "MARCEL GRANIEL 48,2 50,6 60,5 85,4 65,9 $"
678: DB "JOSE MARTINEZ 65,6 60,3 48,6 74,5 96,1 $"
679: DB "ANTONIO FULANO 48,2 10,2 25,6 31,2 65,2 $"
680: DB "MARCELA ORDO¥EZ 10,9 48,6 54,3 74,7 48,6 $"
681: DB "ROMAN ACEVEDO 48,9 84,7 70,5 44,8 50,5 $"
682:
683: TABLA1 DS 800
684:
685:
686: ; LOS REGISTROS SON DE 50 BYTES
687:
688: ORG 800H
689: MENU1 DB "1. MOSTRAR PROMEDIOS 2. ORDENAR POR PROMEDIO$"
690: MENU2 DB "3. ORDENAR POR MATERIA 4. ORDENAR POR NOMBRE$"
691: MENU3 DB "5. ORDENAR POR APELLIDO 6. SALIR$"
692:
693: MENU4 DB " ORDENAR POR: $"
694: MENU5 DB " 1. NOTA 1 2. NOTA 2$"
695: MENU6 DB " 3. NOTA 3 4. NOTA 4$"
696: MENU7 DB " 5. NOTA 5$"
697:
698: end
No hay comentarios:
Publicar un comentario