Programa ensamblador

hammou -  
 hammou -
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. DevGnode
     
    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,
    0
    1. Hammou
       
      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.
      0
      1. DevGnode > Hammou
         
        Guau, 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,
        0
  2. jevousshouaiteunebonnej Mensajes publicados 2 Estado Miembro
     
    0
    1. DevGnode
       
      Muchas gracias, voy a mirar eso pero sin asegurarte de nada, nunca he hecho este tipo de ASM, parece Core War ^^
      0
  3. jevousshouaiteunebonnej Mensajes publicados 2 Estado Miembro
     
    Ok, de nada, gracias de todos modos.
    0
    1. DevGnode
       
      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,
      0
  4. hammou
     
    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
    0
    1. DevGnode
       
      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?
      0
      1. hammou > DevGnode
         
        Esta 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
        0