Autor |
Mensaje |
tuky
Nivel 3
Edad: 39
Registrado: 26 Feb 2008
Mensajes: 28
Ubicación: Buenos Aires
Carrera: Mecánica
|
|
Hola, el ejercicio es este "Hacer un programa que sume los contenidos de 10 posiciones de memoria a partir de la posición 2A y si el resultado es <0 colocar un 1 en el registro 1 y si no colocar un 0"
La verdad es que estoy trabado por que no sé como hacer para que mediante un ciclo ir cambiando la posición de memoria de la cual extraigo el patron de bits.
desde ya muchas gracias
|
|
|
|
_________________ sobre toda cosa guardada, guarda tu corazón, por que de él emana la vida
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
¿No te dieron ninguna instrucción para acceso directo, indexado o indirecto a memoria?
¿Hay algún enlace en el que se pueda ver el pseudoassembler que les dieron?
Deberia haber alguna instrucción onda:
MOV r, posicion + offsetenunregistro
O:
MOV r, @registroquemedalaposicion
Si no te dieron ninguna de esas dos, tendrás que hacer algo de la onda de:
MOV r, 0x2A ...
MOV r, 0x2A + 1 ...
MOV r, 0x2A + 2 ...
...
MOV r, 0x2A + 9 ...
Igual, ni idea, la palabra pseudoassembler es un poco mejor que la que usaban antes, pero tampoco dice mucho.
|
|
|
|
_________________
Última edición por Sebastian Santisi el Mar Jun 23, 2009 4:09 pm, editado 1 vez
|
|
|
|
|
tuky
Nivel 3
Edad: 39
Registrado: 26 Feb 2008
Mensajes: 28
Ubicación: Buenos Aires
Carrera: Mecánica
|
|
Gracias por contestar, el pseudoassembler que almenos enseñan en la cátedra de Strobino se basa en 9 Instrucciones básicas escritas binario que usan los procesadores intel, ejemplo de programa:
262A
2501
200A
2200
2100
B114
las instrucciones que vos señalas me parece que son otra cosa
el tema es que en clase hicieron este ejercicio pero se ve que copié mal por que hay cosas que no me cierran y el viernes es el parcial, ya no puedo consultarlo.
|
|
|
|
_________________ sobre toda cosa guardada, guarda tu corazón, por que de él emana la vida
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
Ah, es que eso no es assembly, entonces, es código máquina... la gracia del assembly es ponerle mnemónicos a esas cosas e incluso nombrar igual a instrucciones de máquina que son similares y se sacan del contexto.
¿Sabés qué instrucciones son esas 9? (me da paja buscar la referencia de Intel)
|
|
|
|
_________________
|
|
|
|
|
Guido_Garrote
Moderador
Edad: 35
Registrado: 14 Oct 2007
Mensajes: 3319
Ubicación: AHÍ!
Carrera: Civil
|
|
tenes que hacer que la posicion de memoria la lea de un registro, e ir haciendo que ese registro varie en 1 posicion de memoria.
Prometo que mañana lo resuelvo
|
|
|
|
_________________
|
|
|
|
|
Bimba
Nivel 8
Edad: 35
Registrado: 13 Sep 2007
Mensajes: 587
Carrera: Química
|
|
Las instrucciones deben ser estas:
|
|
|
|
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
Con esas instrucciones, entonces es el enfoque de hacerlo 10 veces. La onda sería algo del estilo de:
Cargar lo que está en 2A en 0
Cargar lo que está en 2B en 1
Sumar 0 y 1 y guardarlo en 0
Cargar lo que está en 2C en 1
Sumar 0 y 1 y guardarlo en 0
Cargar lo que está en 2D en 1
Sumar 0 y 1 y guardarlo en 0
...
Cargar lo que está en 34 en 1
Sumar 0 y 1 y guardarlo en 0
Después de eso, en 0 tenés la suma.
Con las instrucciones pedorras que te dan, si querés saber si es menor que cero, deberías fijarte en el contenido del bit de signo. Para eso, supongo que deberías hacer un AND entre el registro 0 y el byte 0x80..0 (no sé en cuántos bits laburan, supongo que 8, así que sería el 80), y el resultado va a ser cero o distinto de cero. Si dio cero, entonces es mayor o igual que cero, si dio uno, era negativo. El resto es un salto condicional dependiendo de ese resultado.
No lo codifico porque eso es lo que tenés que practicar vos.
Dentro de todo el ejercicio está completo en el hecho de que te están evaluando que sepas bien la representación numérica, y sepas operar en hexa y binario. Fuera de eso, es una paja .
|
|
|
|
_________________
|
|
|
|
|
Racoon
Nivel 3
Registrado: 02 Mar 2008
Mensajes: 51
Carrera: Industrial
|
|
Despues de mucho pelearme con este ejercicio, porq no entendia ni lo que habia hecho strobino ni lo que habia querido copiar yo, creo que entendi lo de ir variando la posicion de memoria.
No estoy segura de que sea asi: si alguien puede confirmar que no entendi cualquier mandioca, mejor.
Ponele q cargaste lo que habia en la posicion 2A en el registro 3 mediante:
132A, y que esta intruccion quedo en la posicion 0A (este 0A seria de la numeracion que pone strobino a la izquierda).
Para ir modificando el numero de posicion que queda guardado en el registro 3, despues de la primera vez que pasas por ahi tenes que guardar en algun reg el 2A (lo guardo en el registro 6 con 262A) y en otro un uno (lo guardo en el registro 1), y los sumas con la instruccion 5 (5661).
Y ahora (esta es la instruccion que hace que vaya variando la posicion de memoria) usas 360B. Esto hace que la proxima vez que vayas por la posicion 0B se reemplace lo que sea que haya ahi con lo que hay en el registro 6 (que va a ir variando).
Puse 0B porq es donde se guardo el 2A al principio: la instruccion 132A empezaba en 0A, entonces el 13 se guarda en 0A y el 2A en 0B.
Trate de respetar los numeros de registros q uso en clase para que puedas seguir un poco mejor lo enredada que fue mi explicacion. Espero que te sirva, y que realmente sea asi q hay que hacerlo.
|
|
|
|
|
|
|
|
|
Guido_Garrote
Moderador
Edad: 35
Registrado: 14 Oct 2007
Mensajes: 3319
Ubicación: AHÍ!
Carrera: Civil
|
|
Racoon escribió:
|
Despues de mucho pelearme con este ejercicio, porq no entendia ni lo que habia hecho strobino ni lo que habia querido copiar yo, creo que entendi lo de ir variando la posicion de memoria.
No estoy segura de que sea asi: si alguien puede confirmar que no entendi cualquier mandioca, mejor.
Ponele q cargaste lo que habia en la posicion 2A en el registro 3 mediante:
132A, y que esta intruccion quedo en la posicion 0A (este 0A seria de la numeracion que pone strobino a la izquierda).
Para ir modificando el numero de posicion que queda guardado en el registro 3, despues de la primera vez que pasas por ahi tenes que guardar en algun reg el 2A (lo guardo en el registro 6 con 262A) y en otro un uno (lo guardo en el registro 1), y los sumas con la instruccion 5 (5661).
Y ahora (esta es la instruccion que hace que vaya variando la posicion de memoria) usas 360B. Esto hace que la proxima vez que vayas por la posicion 0B se reemplace lo que sea que haya ahi con lo que hay en el registro 6 (que va a ir variando).
Puse 0B porq es donde se guardo el 2A al principio: la instruccion 132A empezaba en 0A, entonces el 13 se guarda en 0A y el 2A en 0B.
Trate de respetar los numeros de registros q uso en clase para que puedas seguir un poco mejor lo enredada que fue mi explicacion. Espero que te sirva, y que realmente sea asi q hay que hacerlo.
|
Es asi, tal cual =)
|
|
|
|
_________________
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
¡Argh!; ¿les plantearon un modelo en el que la memoria del programa y la memoria de los datos es la misma y que un programa puede automodificar su código?
Es bastante bastante bizarro... jamás hubiera hecho esa asunción. Si en los micros viejos Intel se podía, era simplemente por una falencia del hardware.
Eeeeen, fiiiin...
|
|
|
|
_________________
|
|
|
|
|
|
|
Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro No podés responder a temas en este foro No podés editar tus mensajes en este foro No podés borrar tus mensajes en este foro No podés votar en encuestas en este foro No Podéspostear archivos en este foro No Podés bajar archivos de este foro
|
Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker365 Attacks blocked.
|