listas en assembler ciclo loop emu8086 [facil]

  • 3 Respuestas
  • 452 Vistas

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado ErielSinh

  • *
  • Underc0der
  • Mensajes: 11
  • Actividad:
    0%
  • Country: 00
  • Reputación 1
  • The karma is a bitch
    • Ver Perfil

listas en assembler ciclo loop emu8086 [facil]

  • en: Diciembre 09, 2020, 09:44:47 pm
El siguiente programa es un ejemplo sencillo de como funciona el ciclo de repeticion equivalente al for
Programa que imprime una lista y suma todos sus componentes
Código: [Seleccionar]
org 100h;iniciamos en la direccion 100h de la memoria
mov bx,0 ; utilizaremos un contador en bx para movernos dentro de la lista, este inicia en cero
mov cx,5; en cx se declara el numero de repeticiones del loop nuestra lista tendra un tamaño de 5 asi que con 5 repeticiones  basta
 repetir:  ;   aqui empezara el loop, tenemos nuestro loop con la etiqueta repetir:
; aqui debemos poner todas las acciones que queremos que se repitan
  mov al,lista[bx];  copiamos el contenido almacenado en lista[posicion] en al
  add suma, al ; sumamos a la variable suma el valor contenido en al, es como suma=suma+al
  add bx,1;  movemos nuestra posicion de la lista para la siguiente repeticion
 loop repetir ; al llegar aqui saltara a la etiqueta repetir:
ret ; abajo de ret declararemos todos nuestras variables
 
lista db 4,3,5,78,1   ; declaramos nuestra lista en data byte con los valores 4,3,5,78,1
suma db 0; inicializamos una variable suma para almacenar el total de la suma de la lista
Ejecutamos nuestro codigo en emu8086, viendo las variables


Ahora veremos otro ejemplo con listas
Programa para determinar el mayor de una lista
Código: [Seleccionar]
org 100h
 mov bx,0
 mov cx,n
 
 repeticion:
   mov ax,lista[bx]
   cmp ax,mayor
   jg cambiar
   jmp continuar
   cambiar:
     mov mayor,ax   
   
   continuar:
   add suma,ax
   add bx,2     
   
 loop repeticion
ret
n dw 5 
lista dw 4,3,5,7,1
suma dw 0   
mayor dw 0
Ejecutamos el codigo en emu8086


a modo de ejercicio intenten sacar el menor de la lista


« Última modificación: Diciembre 10, 2020, 01:16:24 am por ErielSinh »

Desconectado DtxdF

  • *
  • Moderador Global
  • Mensajes: 916
  • Actividad:
    100%
  • Country: 00
  • Reputación 19
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • Ver Perfil
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email

Re:listas en assembler ciclo loop emu8086 [facil]

  • en: Diciembre 10, 2020, 01:48:52 am
Genial aporte @ErielSinh. Como pequeñas recomendaciones, para no acceder constantemente a la memoria, lo que podría usar es un registro y a su vez, almacenar el resultado en memoria; como nimiedad mía, lo que puede hacer es que en vez (si su ensamblador le permite) de ajustar el registro CX con el valor inmediato, disponer de una constante (es lo mismo, pero no en código) o si prefiere (aunque también depende de lo que haga el programa y sus necesidades), es usar una variable que especifique el número de repeticiones; y por último, usar INC para sumar un solo número y gastar menos bytes.

Aquí le dejo un ejemplo más o menos de lo que dije anteriormente:
Código: (asm) [Seleccionar]
; Programa escrito en TASM para sumar todos los números de un arreglo.

MODEL Tiny
DATASEG
lista DB  1,2,3,4 ; es igual a 0A (10, en decimal)
suma  DB  0
NREP  EQU 4

CODESEG
ORG 100h
start:
LEA SI, lista
LEA DI, suma
MOV CX, nrep
XOR DL, DL

repetir:
MOV AL, [SI]
ADD DL, AL
INC SI

LOOP repetir
MOV [DI], DL

END start

~ DtxdF
Los seres humanos son robots, cuyo combustible es el afanado dinero.

Desconectado ErielSinh

  • *
  • Underc0der
  • Mensajes: 11
  • Actividad:
    0%
  • Country: 00
  • Reputación 1
  • The karma is a bitch
    • Ver Perfil

Re:listas en assembler ciclo loop emu8086 [facil]

  • en: Diciembre 10, 2020, 01:52:29 am
gracias por las recomendaciones, estoy haciendo un curso de assembler para luego empezar con cracking quise compartir algunos ejercicios que habia resuelto para practicar algunos ejercicios

Desconectado DtxdF

  • *
  • Moderador Global
  • Mensajes: 916
  • Actividad:
    100%
  • Country: 00
  • Reputación 19
  • Eres un auto y tienes dos opciones: Parar o Seguir
    • Ver Perfil
    • Mi repositorio de Github donde encontraras herramientas para tu trabajo.
    • Email

Re:listas en assembler ciclo loop emu8086 [facil]

  • en: Diciembre 10, 2020, 03:04:38 am
@ErielSinh

Excelente que tenga deseos por adentrarse en este hermoso mundo. Siga así y no le tiemble el pulso a la hora de seguir compartiendo estos grandiosos aportes, que de seguro, ayudarán a muchos.

Suerte.

~ DtxdF
Los seres humanos son robots, cuyo combustible es el afanado dinero.