Programa ensamblador

Hola,

Quiero escribir en ensamblador que calcule la suma de los n primeros enteros no sé cómo empezar
necesito un empujón.
En este ensamblador exactamente:
http://www.peterhigginson.co.uk/AQA/

4 respuestas

  1. Buenas noches,

    Antes de lanzarte a un lenguaje de bajo nivel como ASM, sería bueno aprender la base del funcionamiento de las arquitecturas x86.

    - La segmentación de la memoria ( text, data, bss )
    - Los registros ( generales, offsets, segmentos )
    - Las flags
    - Los opcodes y sus usos
    - Uso de la pila.
    https://fr.wikibooks.org/wiki/Programmation_Assembleur/x86/Registres

    lo mejor aún sería para empezar trabajar con los registros de 16 bits y luego pasar a 32 bits y luego a 64 bits.

    Si trabajas en Windows también mira el formato PE ( portable executable ) de los encabezados Windows ( PEB, TEB )

    Y verás que todo se aclarará para tu problema, entrena para hacer bucles (EAX, ECX ), trabajar cadenas de caracteres etc...

    Para desarrollar en ASM lo mejor sería usar :

    - notepad++, gedit o otro editor ( para la edición del código ).
    - nasm & ld para compilar tu producción. ( x86, x64 )
    - Immunity Dbg o OllyDBG para depurar tu programa ( Windows ), IDA Dbg ( linux )
    - hexdump ( linux y Windows )
    - objdump ( linux y Windows )

    Cdt,
    1. Disculpa, pero no es por ganas, es porque tengo que hacerlo; es un deber que debo completar, más bien una parte de un deber de primer año.
    2. @HammouGuau, de acuerdo, pero con este emulador http://www.peterhigginson.co.uk/AQA/
      no sabría ayudarte, lo siento. ¿Por qué has elegido ese emulador en especial? ¿Ha sido impuesto?

      ¿Puedes, por favor, enviar el enunciado completo de todas formas?

      Bien cordialmente,
    1. Muchas gracias, voy a mirar eso pero sin asegurarte de nada, nunca he hecho este tipo de ASM, parece Core War ^^
  2. Ok, de nada, gracias de todos modos.
    1. la respuesta a
      cambiar :
       cmp R1,#5 

      por
       cmp R1,#10 


      b

       mov R1,#1 B maboucle maboucle: add R0,R0,R1 add R2,R0,R2 cmp R0,#10 bne maboucle str R2,100 halt 


      R0 est n
      R1 est ta raison
      R2 est le terme

      le terme est placé à l'adresse 100

      j'espère que c'est ça que tu chercher.

      pour n = 5, R = 1, T = 15
      pour R0= 5, R1=1, R2=15

      cdlt,
  3. no funciona enf hay que añadir una línea para n porque n debe ser elegido por el usuario
    INP RO,2 (2 para el tipo) en función de esta variable el programa debe girar
    pero no logro hacer funcionar tu programa con y sin la variable el valor enviado en la memoria 100 es falso me envían 55 .
    ps: he indentado correctamente así como ajustado las mayúsculas
    1. Sí, devuelve 55 porque hago para n = 10

      n se encuentra en el opcode (offset 6 de EIP (PC)):
       cmp R0,#10 


      no mayúsculas o minúsculas esto no cambiará nada, todo depende si el compilador distingue pero aquí no.

      para N = 10, R = 1, T = 55

      pero espera voy a intentar iniciar en otro registro R3 tu valor n antes del bucle y recuperarlo en la comparación.

      estoy en el trabajo voy a mirar en 1 hora. ¿cuándo necesitas que lo entregue?
    2. @DevGnodeEsta noche pero finalmente encontré   0       MOV R1,#1
        1       INP R0,2
        2       MOV R2,#1
        3       B maboucle
          maboucle:
        4       ADD R1,R1,#1
        5       ADD R2,R2,R1
        6       CMP R1,R0
        7       BNE maboucle
        8       STR R2,100
        9       HALT

      sur ceux merci bonne soirée