Sigo intentando entender la arquitectura básica de la computadora y he estado escribiendo un poco de ensamblaje para el MSP430 (LED básico / Interruptores).
He estado explorando el conjunto de instrucciones, y las cosas están empezando a tener más sentido.
Sin embargo, por ejemplo, un JNE / JNZ (Saltar si no es igual / Saltar no es cero). Entiendo que estos están verificando los bits de estado (que quizás se configuraron desde una función CMP).
Sin embargo, la operación se ve así (tomada del conjunto de instrucciones):
if Z = 0: PC + 2*offset -> PC
if Z = 1: execute following instruction
Entonces, si Z es 0, vaya a la siguiente instrucción ... tiene sentido. Pero no entiendo la compensación PC + 2 * - > PC, creo que tal vez estoy confundido en la PC misma. La guía del usuario no entra en un GRAN detalle al respecto. ¿El PC presumiblemente apunta a la siguiente instrucción a ejecutar?
Cuando dice que apunta a que estoy adivinando, ¿qué es lo que sigue? (¿Es posible que tenga un MOV #020h,R9
o algo así? Que se convertiría en un bit de código binario op + de origen y destino (es decir, un total de 16 bits) (podría estar equivocado aquí)
Sin embargo, no entiendo la parte compensada de PC + 2 *, ¿compensación de qué? Creo que esa es la parte que me atrae. Pero creo que todo el "proceso" de lo que está sucediendo sigue siendo confuso, entiendo QUÉ se está escribiendo y dónde, pero tal vez no "cómo". (estoy llegando allí sin embargo!)
Edit: Creo que quizás también estoy olvidando que algo como MOV @ 020h, R9 es en realidad 3 palabras separadas de 16 bits (creo ... que serían 3 recuentos de PC diferentes) (ya que los registros son de 16 bits) ).
Edit2: aquí hay un ejemplo del libro MSP430: (tenga en cuenta que entiendo "qué" está haciendo, pero no por qué? y no entiendo la parte de compensación
DelayLoop: ;
inc.w R4 ; Increment loop counter
cmp.w #DELAYLOOPS ,R4 ; Compare with maximum value
jne DelayLoop ; Repeat loop if not equal