Ensamblador - Rotacion de bits

 
Vista:
sin imagen de perfil

Rotacion de bits

Publicado por Diego (3 intervenciones) el 29/08/2014 00:46:09
Buenas noches, tengo un problema que me da un dolor de cabeza.
Y dice así:
Escribir una subrutina ROTARIZ que haga una rotación hacia la izquierda de los bits de un byte almacenado en la
memoria del microprocesador. Dicho byte y el número de posiciones a rotar deben pasarse por valor desde el programa
principal a la subrutina a través de registros.

4)Entendí más omenos bien la parte del pasaje de parametros, pero logro saber bien como es que rotaría los bits, ya que solo trabaja en parte alta y baja({BX} bh bl), ambas de 2 bits cada una. Aunque quizás me equivoque en lo que estoy afirmando.


Planeaba hacer algo así como apilar numeros y luego desapilarlos.
Pero lo veo un poco complicado además este ejercicio tiene que servir para otros 2 de ahí mi preocupación.
8)Usando la subrutina ROTARIZ del ejercicio 4, escriba una subrutina ROTARDER que haga una rotación hacia la
derecha de un byte almacenado en la memoria del microprocesador. Dicho byte y el número de posiciones a rotar
deben pasarse por valor desde el programa principal a la subrutina a través de registros.

9) Escriba la subrutina ROTARDER del ejercicio anterior, pero sin usar la subrutina ROTARIZ. Compare que ventajas
tiene cada una de las soluciones.
Adjunto el set de instrucciones que nos dieron para trabajar en toda la cursada.


part1
part_2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Rotacion de bits

Publicado por Pico (50 intervenciones) el 29/08/2014 10:07:47
Bh y bl son de ocho bits cada uno.

¿El problema es cómo rotar bits sin instrucciones de rotación de bits?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Rotacion de bits

Publicado por Diego (3 intervenciones) el 29/08/2014 15:42:52
Gracias por aclarrme lo del tamaño, yo tampoco entendí muy bien ya que nosé si se refiere a hacer un intercambio entre la parte alta y baja o a rotar los bits dentro de alguna de las dos partes.

Ej:
1- 15b3 h; 15 3b h ^ 51 b3 h
2- 15b3 h; b3 15 h

Si es el 1° caso, no tengo mucha ideade como hacerlo, en el 2° podría usar ua instruccion de rotar, que creo que si existe aunque no esté en las instrucciones que nos dieron, o podría usar un auxiliar para guardar un contenido y luego reemplazar todo.

Si podés orientarme un poco más te lo agradecería, ya que quiero resolverlo sin importar el modo en que se interprete el enunciado.

Escribir una subrutina ROTARIZ que haga una rotación hacia la izquierda de los bits de un byte almacenado en la
memoria del microprocesador. Dicho byte y el número de posiciones a rotar deben pasarse por valor desde el programa
principal a la subrutina a través de registros.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Rotacion de bits

Publicado por Pico (50 intervenciones) el 29/08/2014 17:20:23
Un procesador x86 sí tiene instruccones de rotación, las tiene hasta un z80, pero el emulador msx88 no parece que las tenga. Como de lo que se trata es de aprender a programar, habrá que hacer rotaciones sin usar la instrucción de rotación.

Con una rotación se puede intercambiar la parte alta y baja de un registro rotando la mitad del número de bits del registro, claro. Si es de 16 bits, con una rotación de 8 se intercambian las dos partes.

Con las instrucciones que tienes habrá que hacerlo usando el and. Con él puedes meter en un vector de bytes cada uno de los bits de un número y luego formar otro empezando a contar por un puesto del vector distinto de 0.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Rotacion de bits

Publicado por Diego (3 intervenciones) el 31/08/2014 18:17:28
Te agradezco mucho la ayuda, luego de leerlo otra vez biendo otra forma, en clase pregunté como podría ser y me dijeron que simplemente era hacer una rotación de la representación en biinario del número.

Ya pude resolverlo y lo vimos en clase.
Nuevamente, gracias..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rotacion de bits

Publicado por geronimo eandi (1 intervención) el 08/04/2021 01:30:43
hola estoy en la misma situacion que estuviste vos , con los mismos ejercicios exacatamente por lo que pude deducir de la solucion que diste me quedo asi el programa pero dudo mucho que sea la forma correcta

Escribir una subrutina ROTARIZ que haga una rotación hacia la izquierda de los bits de un byte almacenado en la
memoria del microprocesador. Dicho byte y el número de posiciones a rotar deben pasarse por valor desde el programa
principal a la subrutina a través de registros.


1
2
3
4
5
6
7
8
9
10
11
12
13
org 1000h
num1 dw 11001011b
 
org 3000h
rotariz: mov ax, 10010110b
mov bx, offset num1
mov [bx] ,ax
ret
org 2000h
mov ax, num1
call rotariz
hlt
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar