ENSAMBLADOR CREUAT PER A 68000 P…gina : 1 Fitxer font: PROG.ASM Fitxer objecte: PROG.OBJ Fitxer de llistat: PROG.LST PRIMERA PASSADA SEGONA PASSADA 1 : 0000 0000 : : ; ****** EJEMPLO DE PROGRAMACION ****** 2 : 0000 0000 : : ; ****** MICROPROCESADOR M-68000 ****** 3 : 0000 0000 : : ; 4 : 0000 0000 : : ; 5 : 0000 0000 : : ABSOLUTE 6 : 0000 0000 : : ORG $25000 7 : 0002 5000 : 2E7C 0002 7000 : MOVE.L #$27000,A7 ;Inicializaci•n del stack pointer 8 : 0002 5006 : 267C 0002 6000 : MOVE.L #$26000,A3 9 : 0002 500C : 4247 : CLR D7 ;Borrado del registro contador 10 : 0002 500E : 4879 0002 5104 : PEA START ;Mensaje de entrada de caracteres 11 : 0002 5014 : 203C 0000 0019 : MOVE.L #25,D0 12 : 0002 501A : 4E40 : TRAP #0 13 : 0002 501C : 588F : ADDQ.L #4,SP 14 : 0002 501E : 203C 0000 0017 : PRIM: MOVE.L #23,D0 ;Bucle de entrada de datos 15 : 0002 5024 : 4E40 : TRAP #0 16 : 0002 5026 : 1400 : MOVE.B D0,D2 17 : 0002 5028 : 2F00 : MOVE.L D0,-(A7) 18 : 0002 502A : 203C 0000 0018 : MOVE.L #24,D0 ;Devolver el dato a pantalla 19 : 0002 5030 : 4E40 : TRAP #0 20 : 0002 5032 : 588F : ADDQ.L #4,A7 21 : 0002 5034 : 1002 : MOVE.B D2,D0 22 : 0002 5036 : 0C02 000D : CMPI.B #$0D,D2 ;Salir del bucle si se entr• un car…cter 23 : 0002 503A : 6700 000E : BEQ ORDEN ;de carry return 24 : 0002 503E : 16C2 : MOVE.B D2,(A3)+ ;Salvar dato a memoria 25 : 0002 5040 : 0647 0001 : ADDI #1,D7 26 : 0002 5044 : 4EF9 0002 501E : JMP PRIM ;Si no, seguir en el bucle 27 : 0002 504A : 4879 0002 5166 : ORDEN: PEA LINEA ;Salto de lˇnea 28 : 0002 5050 : 203C 0000 0019 : MOVE.L #25,D0 29 : 0002 5056 : 4E40 : TRAP #0 30 : 0002 5058 : 588F : ADDQ.L #4,SP 31 : 0002 505A : : 32 : 0002 505A : : ; ALGORITMO DE ORDENACION POR BURBUJA 33 : 0002 505A : : ; FOR J=1 TO N-1 34 : 0002 505A : : ; FOR I=1 TO N-J 35 : 0002 505A : : ; IF ELEMENTO(TABLA-1+I)>ELEMENTO(TABLA+I) THEN 36 : 0002 505A : : ; TEMP=ELEMENTO(TABLA-1+I) 37 : 0002 505A : : ; ELEMENTO(TABLA-1+I)=ELEMENTO(TABLA+I) 38 : 0002 505A : : ; ELEMENTO(TABLA+I)=TEMP 39 : 0002 505A : : ; NEXT I 40 : 0002 505A : : ; NEXT J 41 : 0002 505A : : ; (EL PRIMER ELEMENTO A ORDENAR ESTA EN LA POSICION TABLA) 42 : 0002 505A : : 43 : 0002 505A : 4282 : CLR.L D2 ;puesta a cero de D2 44 : 0002 505C : 2602 : MOVE.L D2,D3 ;puesta a cero de D3 45 : 0002 505E : 1682 : MOVE.B D2,(A3) 46 : 0002 5060 : 2A07 : MOVE.L D7,D5 47 : 0002 5062 : 0485 0000 0001 : SUB.L #1,D5 ;D5=N-1 ENSAMBLADOR CREUAT PER A 68000 P…gina : 2 48 : 0002 5068 : 203C 0000 0001 : MOVE.L #1,D0 ;J=1 (inicializar) 49 : 0002 506E : 223C 0000 0001 : EXT: MOVE.L #1,D1 ;I=1 (inicializar) 50 : 0002 5074 : 2C07 : MOVE.L D7,D6 51 : 0002 5076 : 9C80 : SUB.L D0,D6 ;D6=N-J 52 : 0002 5078 : 247C 0002 5FFF : INT: MOVE.L #$25FFF,A2 53 : 0002 507E : D5C1 : ADD.L D1,A2 ;A2=$26000-1+I 54 : 0002 5080 : 264A : MOVE.L A2,A3 55 : 0002 5082 : D7FC 0000 0001 : ADDA.L #1,A3 ;A3=$26000+I 56 : 0002 5088 : 1412 : MOVE.B (A2),D2 ;D2=($26000-1+I) 57 : 0002 508A : 1613 : MOVE.B (A3),D3 ;D3=($26000+I) 58 : 0002 508C : B642 : CMP D2,D3 59 : 0002 508E : 6F00 0008 : BLE INCI ;si ($26000-1+I)<=($26000+I) entonces 60 : 0002 5092 : : ;salta a INCI sino continua 61 : 0002 5092 : 1812 : MOVE.B (A2),D4 62 : 0002 5094 : 1493 : MOVE.B (A3),(A2) 63 : 0002 5096 : 1684 : MOVE.B D4,(A3) ;cambio de orden (D4 es variable auxiliar) 64 : 0002 5098 : BC41 : INCI: CMP D1,D6 65 : 0002 509A : 6700 000C : BEQ INCE ;si I=N-J entonces salta a INCI sino continua 66 : 0002 509E : 0641 0001 : ADD #1,D1 ;I=I+1 67 : 0002 50A2 : 4EF9 0002 5078 : JMP INT ;vuelta al bucle interno 68 : 0002 50A8 : BA40 : INCE: CMP D0,D5 69 : 0002 50AA : 6700 000C : BEQ FINAL ;si J=N-1 entonces se acaba la ordenacion 70 : 0002 50AE : : ;sino continua 71 : 0002 50AE : 0640 0001 : ADD #1,D0 ;J=J+1 72 : 0002 50B2 : 4EF9 0002 506E : JMP EXT ;vuelta al bucle externo 73 : 0002 50B8 : : ; 74 : 0002 50B8 : : ; CALCULO DEL NUMERO DE CARACTERES (ASCII) ORDENADOS 75 : 0002 50B8 : : ; 76 : 0002 50B8 : 203C 0000 0005 : FINAL: MOVE.L #5,D0 ;Contador del bucle 77 : 0002 50BE : 227C 0002 5141 : MOVE.L #$25141,A1 ;Posici˘n en la cadena de caracteres 78 : 0002 50C4 : 2C07 : MOVE.L D7,D6 ;Salvar inicialmente 79 : 0002 50C6 : 2E06 : OTRO: MOVE.L D6,D7 ;Recuperar valor a estudiar 80 : 0002 50C8 : 8EFC 000A : DIVU #$A,D7 ;Divisi˘n por 10 (decimal) 81 : 0002 50CC : 3C07 : MOVE.W D7,D6 ;Salvar el cociente (solo el cociente) 82 : 0002 50CE : 4847 : SWAP D7 ;Alterar orden en D7 83 : 0002 50D0 : 0287 0000 FFFF : AND.L #$FFFF,D7 ;Tomar s˘lo el resto 84 : 0002 50D6 : 0647 0030 : ADD #$30,D7 ;Sumar 30 (hexa) para tener c˘digo ASCII 85 : 0002 50DA : 1307 : MOVE.B D7,-(A1) ;Mover a memoria (con predecremento) 86 : 0002 50DC : 0440 0001 : SUB #$1,D0 ;Decrementar el contador 87 : 0002 50E0 : 6EE4 : BGT OTRO ;Seguir el bucle hasta finalizar 88 : 0002 50E2 : : ; 89 : 0002 50E2 : : ; SALIDA DE CARACTERES ORDENADOS POR PANTALLA 90 : 0002 50E2 : : ; 91 : 0002 50E2 : 4879 0002 512C : PEA OUT ;Mensaje de salida de caracteres 92 : 0002 50E8 : 203C 0000 0019 : MOVE.L #25,D0 93 : 0002 50EE : 4E40 : TRAP #0 94 : 0002 50F0 : 588F : ADDQ.L #4,SP 95 : 0002 50F2 : 4879 0002 6000 : PEA $26000 ;Salida de caracteres ordenados ENSAMBLADOR CREUAT PER A 68000 P…gina : 3 96 : 0002 50F8 : 203C 0000 0019 : MOVE.L #25,D0 97 : 0002 50FE : 4E40 : TRAP #0 98 : 0002 5100 : 588F : ADDQ.L #4,SP 99 : 0002 5102 : 4E45 : TRAP #5 100 : 0002 5104 : : ; 101 : 0002 5104 : : ; TABLAS DE MENSAJES POR PANTALLA 102 : 0002 5104 : : ; 103 : 0002 5104 : : START: DB 'Introduzca los caracteres a ordenar:' : 496E 7472 6F64 : : 757A 6361 206C : : 6F73 2063 6172 : : 6163 7465 7265 : : 7320 6120 6F72 : : 6465 6E61 723A : 104 : 0002 5128 : : DB 10,13,0 : 0A0D 00 : : 00 : 105 : 0002 512C : : OUT: DB 'Se han ordenado 00000 caracteres. Su tabla ordenada es:' : 5365 2068 616E : ENSAMBLADOR CREUAT PER A 68000 P…gina : 4 : 206F 7264 656E : : 6164 6F20 3030 : : 3030 3020 6361 : : 7261 6374 6572 : : 6573 2E20 5375 : : 2074 6162 6C61 : : 206F 7264 656E : : 6164 6120 6573 : : 3A : 106 : 0002 5163 : : DB 10,13,0 : 0A0D 00 : 107 : 0002 5166 : : LINEA: DB 10,13,0 : 0A0D 00 : : 00 : 108 : 0002 516A : : END Lˇnies ensamblades : 108 Errors : 0 ENSAMBLADOR CREUAT PER A 68000 P…gina : 5 *********** TAULA DE SIMBOLS *********** EXT : 0002 506E : LOCAL ABSOLUTA FINAL : 0002 50B8 : LOCAL ABSOLUTA INCE : 0002 50A8 : LOCAL ABSOLUTA INCI : 0002 5098 : LOCAL ABSOLUTA INT : 0002 5078 : LOCAL ABSOLUTA LINEA : 0002 5166 : LOCAL ABSOLUTA ORDEN : 0002 504A : LOCAL ABSOLUTA OTRO : 0002 50C6 : LOCAL ABSOLUTA OUT : 0002 512C : LOCAL ABSOLUTA PRIM : 0002 501E : LOCAL ABSOLUTA START : 0002 5104 : LOCAL ABSOLUTA