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

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