• Sábado 20 de Abril de 2024, 15:33

Autor Tema:  Ordenamiento?  (Leído 1562 veces)

TareK

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Ordenamiento?
« en: Jueves 4 de Diciembre de 2003, 18:07 »
0
Hola, un amigo me pidio q lo ayudara con este trabajo, pero no entiedo como hacerlo. digamos q mis conocimientos en assembler son muy basicos.

la consigna dice:
se tiene una lista de nuemros enteros con signo de formato igual a 1 byte ubicada en memoria a partir d la dirección 1501 cuyo numerod elementos esta enla dirección 14FF. realizar un progrmaa principal q copie la lista a la dirección 1601 pero ordenada en forma ascendente.

desde ya muchas gracias y felicitaciones x el foro!
saludos.

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Ordenamiento?
« Respuesta #1 en: Viernes 5 de Diciembre de 2003, 16:15 »
0
Si pues...... mas rato lo pienso

TareK

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ordenamiento?
« Respuesta #2 en: Sábado 6 de Diciembre de 2003, 03:07 »
0
gracias. cualquier ayuda es bienvenida..
saludos

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Ordenamiento?
« Respuesta #3 en: Sábado 6 de Diciembre de 2003, 04:39 »
0
Bueno ya!!!!!


creo que la ordenacion de los datos puede ser hecha con una comparacion utilizando la instruccion ICMP para hacer las conparaciones con signo; ahora primero se debe estableser el lugar de la ordenacion; por decir puedo ordenarlos en ellugar de origen y despues copiarlo ó puedo copiarlos y ordenarlos en el destino. Para el ordenamiento yo utilizaria un metodo conocido pero que no recuerdo el nombre que aprendi en C++ con 2 ciclos

y escojo la segunda opcion :

primero apunto a la direccion con SI(supongo que las direcciones estan en hexa):

mov si,1501h

despues pongo el numero de elementos en CX(contador)

mov cx,[14ffh]

apunto al destino con DI

mov di,1601h

ahora copiare al destino con la instruccion de cadena MOVSB y REP :

push cx ;;empilo el contador

cld
rep movsb

la copia ya esta hecha ahora elordenamiento primero:

popo cx ;recupermaos el contador
mov si,1601h ;;apuntmaos al primer elemento
lea di,[si+1]  ;,apuntamos al segundo elemento
dec cx  ;;se comparara el numero de elementos menos una ves

ahora los 2 ciclos anidados con un solo contador:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
p3: push cx        ;;empilamos el contador para el ciclo externo
      mov al,[si]   ;;moviemiento del primer elelmento
p0: icmp al,[di]   ;;comaracion con el segundo elemento
      ja c1            ;; si el 1º myor al 2º intercambio
p4: inc di            ;; incrementsmo el 2º->3º
      loop p0         ;; y asi el primer siclo con el primer elemento
      jmp p1         ;;termina el segundo ciclo(interno) ciclo
c1:  mov ah,[di]  ;; codigo par aintercambiar
      mov [di],al
      mov [si],ah
      jmp p4
p1: pop cx          ;;recuparmos el contador
      inc si            ;;incremnetamos el 1º->2º
      lea di,[si+1]  ;; apuntamos al 3º
      loop p3         ;; continuamos con el resto(primer ciclo o ciclo externo)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


y eso seriapor lo demas espero que sirva; y de seguro hay errores pero la idea es supongo lo mas importante