Prac6 ej2

Prac6 ej2

de Juan Sebastian Korenko Crisera -
Número de respuestas: 6
me quedo hiper largo y no se si esta bien. Alguna sugerencia??

Otra duda es el uso del CMP, es similar al SUB pero sin guardar el resultado en ningun lado??

Gracias

INICIO
SETLO 0x01 REG3;
SETHI 0x01 REG3; REG3 = 0101 (inferior)
SETLO 0x65 REG2;
SETHI 0x01 REG2; REG2 = 0165 (superior)
SETLO 0x00 REG4;
SETHI 0x01 REG4; REG4 = 0100 (dato)
LOAD REG4, REG1; REG1 = dato
DIVISION
CMP REG2,REG3; REG2-REG3
SETLO 0x02 REG4;
SETHI 0x00 REG4; REG4 = 0002
SETLO 0x01 REG6;
SETHI 0x00 REG6; REG6 = 0001
SETLO 0x00 REG8;
SETHI 0x00 REG8; REG8 = 0000
RESTO2
JZ 0x008; 8 lugares adelante a SIGO
ADD REG8,REG3,REG7; copio el inferior al reg7
ADD REG8,REG3,REG5; copio el inferior al reg5
ADD REG5, REG4, REG5; sumo dos al inferior
CMP REG2, REG5;
JN 0x003; 3 lugares adelantes a SIGO
ADD REG7, REG6, REG7; sumo 1 al inferior (guardara medio)
JMP 0xFF9; 7 lugares atras al RESTO2
SIGO
LOAD REG7 REG4;
CMP REG4, REG1; dato - memoria[medio]
JZ 0x003; 3 lugares adelante a ENCONTRADO
JN 0x008; 8 lugares adelante a MENOR
JMP 0x00B; 11 lugares adelante a MAYOR
ENCONTRADO
SETLO 0x66 REG1;
SETHI 0x01 REG1; REG1 = 0166 (guarda dato)
SETLO 0x01 REG2;
SETHI 0x00 REG2; REG2 = 0001
STORE REG2 REG1;
JMP 0x00F; 15 lugares adelante hacia FIN
MENOR
SETLO 0x01 REG4;
SETHI 0x00 REG4; REG2 = 0001
SUB REG7,REG4,REG2; superior = medio-1
JMP 0x004; 4 lugares adelante a COMPARACION
MAYOR
SETLO 0x01 REG4;
SETHI 0x00 REG4; REG2 = 0001
ADD REG7,REG4,REG3; inferior = medio+1
COMPARACION
CMP REG3-REG2; inferior-superior
JN 0xFDE; 34 lugares para atras a donde arranca la division;
NO ENCONTRADO
SETLO 0x66 REG1;
SETHI 0x01 REG1; REG1 = 0166 (guarda dato)
SETLO 0x00 REG2;
SETHI 0x00 REG2; REG2 = 0000
STORE REG2 REG1;
FIN
NOP
En respuesta a Juan Sebastian Korenko Crisera

Re: Prac6 ej2

de Juan Saavedra -
Por lo que llegué a ver, hay un CMP

DIVISION
CMP REG2,REG3; REG2-REG3
SETLO 0x02 REG4;

Que sobra (no lo entiendo).

Tip: Para dividir entre dos, utilizá SR (shift right). Para multiplicar por dos, SL (shift left).
SR 1 : Divide por dos
SR 2 : Divide por cuatro
SR 3 : Divide por ocho
...

Análogo para SL.
Probá escribirlo con SR a ver si queda más corto/sencillo.

Saludos.
En respuesta a Juan Saavedra

Re: Prac6 ej2

de Cesar Schroeder Knappe -
Tengo una duda en este ejercicio. Los registros son de 16 bits verdad? Y según la letra, el "dato" de la búsqueda está en la dirección 0100h, y la "lista ordenada" empieza en 0101h, por lo que entonces los datos en la memoria son de 1 byte (?) es decir, que cada vez que hago "Load" estoy trayendo 2 bytes (2 números)(?). O no es así?
Porque si los datos fueran de 2 bytes, no tendría que avanzar de a 2? es decir, que la lista empiece en 0102h (?)
En respuesta a Cesar Schroeder Knappe

Re: Prac6 ej2

de Juan Saavedra -
Si te fijśa, es posible deducir que la memoria se debe recorrer de a palabras y no de a bytes. Esto surge de que el largo es de 100 elementos y las direcciones van de 101h a 165h. (64h es 100).

En cualquier caso, sigue siendo una excelente observación.

Si fuese de a bytes (como lo es habitualmente) debería ser:
En 0x100 el dato, en 0x102 arranca la lista con 100 elementos que llega hasta 0x1CA. En 0x1CC debería ir el dato. Y si, deberías incrementar de a dos.

Espero se entienda, cualquier duda a las órdenes.

Saludos.
En respuesta a Juan Saavedra

Re: Prac6 ej2

de Cesar Schroeder Knappe -
Ahhh. Claro claro. Se recorre la memoria por palabras. Ahora que vuelvo a mirar la letra sí, se da a entender eso.
Gracias
En respuesta a Cesar Schroeder Knappe

Re: Prac6 ej2

de Usuario eliminado -
Los numeros negativos se representan en complemento a dos suponemos?
Y por ejemplo, si quiero ir:
JMP xxx // de aca a llegada
...algo...
...algo...
...algo...
LLEGADA

en xxx debería ir 4?
Igual supongo que eso es particular de este ejercicio, lo que si interesa es saber como suponemos generalemente que se representan los números con signo.
En respuesta a Usuario eliminado

Re: Prac6 ej2

de Juan Saavedra -
Si, debería ir 4 ya que le pasás el número de instrucciones a saltearse.

Por lo general y si no se especifica lo contrario, si se habla de enteros con signo se puede asumir complemento a 2. En cualquier caso, lo mejor es preguntar.

Saludos.