2011-02-27 76 views
5

Estoy tratando de entender el lenguaje ensamblador MARIE. No entiendo muy bien skipcond para haciendo cosas como <, o >, o multiplicar o dividir.¿Cómo funciona `Skipcond` en el lenguaje ensamblador MARIE?

estoy tomando este sencillo programa:

x = 1 
while x < 10 do 
x = x +1 
endwhile; 

Lo que no entiendo es cómo utilizar ciertas condiciones de salto:

Skipcond 800 if AC > 0, 
Skipcond 400 if AC = 0, 
Skipcond 000 if AC < 0 

Ahora, sé que me reste de x 10 y prueba usando skipcond.

No estoy seguro de cuál y por qué. Supongo que si supiera cómo funcionan realmente, quizás sería más fácil de entender. ¿Por qué se usa para comparar con cero?

Esto es lo que tengo:

100  load one 
101  store x 
102  subt ten 
103  skipcond400 if x-10 = 0? // or skpcond000 x -10 < 0?? 

Respuesta

1
while x < 10 do 
    x = x + 1 

saltará fuera del circuito tan pronto como sea x es igual a 10. Si se resta el 10 de x, obtendrá un valor negativo hasta que x es igual 10 (y el valor es 0). Entonces, usar skpcond000 sería incorrecto ya que saltaría demasiado pronto. Entonces skpcond400 es correcto.

Tal vez sea más fácil de entender si se cambia el código C por lo que será más cerca del código de montaje:

Original:   while (x < 10) do 
Subtract 10:   while ((x - 10) < 0) do 
Use != instead of <: while ((x - 10) != 0) do 

También tenga en cuenta que usted tiene que aumentar xdespués la condición de reproducir un comportamiento idéntico al lazo while.

Cuestiones relacionadas