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,110: ;CALL ENVIAR_MEN
11: 12: ;LD IX,MENU2 13: ;LD A,214: ;CALL ENVIAR_MEN
15: 16: ;LD IX,MENU3 17: ;LD A,318: ;CALL ENVIAR_MEN
19: LD A,0 20: MENU:21: ;CALL SCAN
22: 23: CP "1"
24: JP Z,OPCION125: CP "2"
26: JP Z,OPCION227: CP "3"
28: JP Z,OPCION329: CP "4"
30: JP Z,OPCION431: CP "5"
32: JP Z,OPCION533: 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 CUENTA43: ; 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 IX55: 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,064: 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,073: 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,082: 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,091: 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,DATOS112: CALL HEXBCD
113: 114: POP BC 115: POP IY 116: LD DE,50 117: ADD IY,DE 118: DEC C 119: JP NZ,INIOP1120: ;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,TABLA1135: 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 D145: 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 E163: 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,1178: ;CALL ENVIAR_MEN
179: 180: ;LD IX,MENU5 181: ;LD A,2182: ;CALL ENVIAR_MEN
183: 184: ;LD IX,MENU6 185: ;LD A,3186: ;CALL ENVIAR_MEN
187: 188: ;LD IX,MENU7 189: ;LD A,4190: ;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,NOTA1200: CP "2"
201: JP Z,NOTA2202: CP "3"
203: JP Z,NOTA3204: CP "4"
205: JP Z,NOTA4206: CP "5"
207: JP Z,NOTA5 208: 209: JP ESPERA 210: NOTA1:211: ;CALL BORRAR_PAN
212: LD IY,DATOS 213: LD IX,TABLA1214: 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 D224: 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 E242: CALL Z,COPIO
243: RET 244: 245: NOTA2:246: ;CALL BORRAR_PAN
247: LD IY,DATOS 248: LD IX,TABLA1249: 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 D259: 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,PRONUM33272: ;CALL IMPRIMIR
273: JP INICIO 274: VER_E32: LD A,(IY+26) 275: CP E276: CALL Z,COPIO
277: RET 278: 279: 280: NOTA3:281: ;CALL BORRAR_PAN
282: LD IY,DATOS 283: LD IX,TABLA1284: 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 D294: 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 E312: CALL Z,COPIO
313: RET 314: 315: 316: NOTA4:317: ;CALL BORRAR_PAN
318: LD IY,DATOS 319: LD IX,TABLA1320: 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 D330: 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 E348: CALL Z,COPIO
349: RET 350: 351: 352: NOTA5:353: ;CALL BORRAR_PAN
354: LD IY,DATOS 355: LD IX,TABLA1356: 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 D366: 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 E384: 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,TABLA1397: 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 D407: 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,PROLET41420: ;CALL IMPRIMIR
421: JP INICIO 422: VER_E4: LD A,(IY+1) 423: CP E424: 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,TABLA1437: 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 D447: 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,PROLET5460: ;CALL IMPRIMIR
461: JP INICIO 462: VER_E5: LD A,(IY+11) 463: CP E464: 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),0526: 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,1571: ;CALL ENVIAR_MEN
572: ADD IY,DE 573: 574: PUSH IY 575: POP IX 576: LD A,2577: ;CALL ENVIAR_MEN
578: ADD IY,DE 579: 580: PUSH IY 581: POP IX 582: LD A,3583: ;CALL ENVIAR_MEN
584: ADD IY,DE 585: 586: PUSH IY 587: POP IX 588: LD A,4589: ;CALL ENVIAR_MEN
590: ADD IY,DE591: ;CALL SCAN
592: ;CALL BORRAR_PAN
593: 594: PUSH IY 595: POP IX 596: LD A,1597: ;CALL ENVIAR_MEN
598: ADD IY,DE 599: 600: PUSH IY 601: POP IX 602: LD A,2603: ;CALL ENVIAR_MEN
604: ADD IY,DE 605: 606: PUSH IY 607: POP IX 608: LD A,3609: ;CALL ENVIAR_MEN
610: ADD IY,DE 611: 612: PUSH IY 613: POP IX 614: LD A,4615: ;CALL ENVIAR_MEN
616: ADD IY,DE617: ;CALL SCAN
618: ;CALL BORRAR_PAN
619: 620: PUSH IY 621: POP IX 622: LD A,1623: ;CALL ENVIAR_MEN
624: ADD IY,DE 625: 626: PUSH IY 627: POP IX 628: LD A,2629: ;CALL ENVIAR_MEN
630: ADD IY,DE 631: 632: PUSH IY 633: POP IX 634: LD A,3635: ;CALL ENVIAR_MEN
636: ADD IY,DE 637: 638: PUSH IY 639: POP IX 640: LD A,4641: ;CALL ENVIAR_MEN
642: ADD IY,DE643: ;CALL SCAN
644: ;CALL BORRAR_PAN
645: 646: PUSH IY 647: POP IX 648: LD A,1649: ;CALL ENVIAR_MEN
650: ADD IY,DE 651: 652: PUSH IY 653: POP IX 654: LD A,2655: ;CALL ENVIAR_MEN
656: ADD IY,DE 657: 658: PUSH IY 659: POP IX 660: LD A,3661: ;CALL ENVIAR_MEN
662: ;CALL SCAN
663: RET 664: 665: 666: ORG 1000H667: 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 800H689: 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