Básico para bucle de ensamblaje 68k?
Pregunta
Estoy intentando escribir un programa que requiere el uso de un ciclo for, entre otras cosas. Estoy teniendo un tiempo terrible tratando de encontrar ejemplos de código básico como este en otros sitios web.
Si alguien podría por favor me proporcione con un simple bucle for, o incluso las instrucciones que debe mirar estaría agradecido. Y por favor, si usted sabe de un recurso bueno para principiantes, tutoriales 68k comentario más abajo!
Gracias!
Solución
aquí para obtener una respuesta a su consulta (tercera como resultado de búsqueda de google 68000 ensamblaje ')
[editar]
Añadir respuesta de enlace
El 68000 tiene la rara (único?) Característica de tener direcciones y de datos registros separados. Hay ocho registros de datos, D0-D7, y ocho registros de dirección, A0-A7. A7 es también el puntero de pila, SP. Esto significa que el lenguaje ensamblador 68000 tiende a ser más fácil de seguir porque se puede decir fácilmente qué registros contienen datos y los que tienen direcciones. Por ejemplo, esto es 68.000 montaje para calcular la suma de una serie de palabras:
moveq #0, d0
moveq #0, d1
moveq #5, d2
loop:
move.w (a0)+, d0
add.l d0, d1
dbra d2, loop
[/ editar]
Otros consejos
como se cita en EASy68K ayuda, la sintaxis de un bucle en 68 K es la siguiente:
FOR[.size] op1 = op2 TO op3 [BY op4] DO[.extent]
code
ENDF
o
FOR[.size] op1 = op2 DOWNTO op3 [BY op4] DO[.extent]
code
ENDF
En otras palabras:
for.size counter_location = starting_condition to ending_condition step_size
operations to be executed each loop
end of for loop
El step_size y .size son opcionales.
Un ejemplo en la práctica.
El siguiente código asume la siguiente variable
mayúscula dc.b 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 0
lea uppercase, a1 ; points a1 at the start of the uppercase variable
lea $002000, a2 ; points a2 at the start of the destination address
for d1 = #1 to #26 do.s
move.b (a1)+, (a2)+
endf
; Memory locations $002000 - $002019 now contain ABCDEFGHIJKLMNOPQRSTUVYWXYZ
Este bucle mueve 26 bytes de la dirección apuntada por a1, a la dirección a la que apunta a2. El contador se almacena en d1. El bucle se iniciará a 1 (# 1 indica un 'número prima' en forma decimal), aumentar cada vez, y terminan a 26. Los do.S al final de la primera trata de la línea con el tamaño de la rama hacia adelante para su uso. Es opcional también, pero lanza una advertencia en EASy68K. Por lo tanto, el siguiente ciclo for también trabajo si no es necesario para establecer la condición de rama.
for d1 = #1 to #26
move.b (a1)+, (a2)+
endf
En cuanto a un tutorial, recomiendo http://mrjester.hapisan.com/04_MC68/ . Que no se ocupa de algunos de los comandos más avanzados y temas, pero ofrece una buena comprensión de lo que está sucediendo en el nivel básico / intermedio.