Programa ensamblador
hammou
-
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/
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
-
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, -
-
-
la respuesta a
cambiar :cmp R1,#5
porcmp 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,
-
-
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-
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?
-
