2012-03-22 140 views

Respuesta

0

No; scr (shift con carry) hace. Sin embargo, la prueba podría significar (y lo hace) probar cómo se estableció el bit de acarreo ANTES de que se ejecutara shr.

+1

¿Estás seguro? Mi libro da el siguiente ejemplo: Antes del turno: AL = 10101110 ; shr AL, 1 ; Después del turno: 01011100, CF = 1 ; ¿Es un error? –

+1

Fuente: http://en.wikibooks.org/wiki/X86_Assembly/Shift_and_Rotate Además, si lo hiciera, ¿cuál sería el sentido de tener scr? –

+3

No hay 'scr'. 'shr' y' shl' cambian al bit de acarreo. Fuente: http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-2b-manual.pdf – ughoavgfhw

9

shr AL, 1 mueve todos los bits en AL un solo lugar.

El bit más a la derecha original se desplaza fuera del registro AL en el indicador de acarreo (y el nuevo bit situado más a la izquierda se establece en 0). Por ejemplo:

+------------------------+    +------------------------+ 
| 1 0 0 1 0 1 0 1 |    | 0 1 1 0 0 1 0 0 | 
+------------------------+    +------------------------+ 
    \ \ \ \ \ \ \ \  or   \ \ \ \ \ \ \ \ 
    \ \ \ \ \ \ \ \     \ \ \ \ \ \ \ \ 
+------------------------+ CF   +------------------------+ CF 
|(0) 1 0 0 1 0 1 0 | 1    |(0) 0 1 1 0 0 1 0 | 0 
+------------------------+    +------------------------+ 

En su comentario en otra respuesta:

Mi libro da el siguiente ejemplo: Antes de turno: AL = 10101110; shr AL, 1; Después del turno: 01011100, CF = 1; ¿Es un error?

Si eso es lo que dice, entonces sí. Eso es un desplazamiento a la izquierda (shl AL, 1), no un cambio a la derecha: los bits en AL se han movido a la izquierda en un lugar, y el indicador de transporte se ha establecido en el bit que se desplazó fuera del extremo izquierdo.

0

para añadir algunas aclaraciones:

SHR AL, 1; será (SH) ift (R) ight (1) x el valor contenido en el registro AL, que es 8 bytes más bajos del registro AX. Por lo tanto, dividirá por 2 el valor contenido en AL.

Si AL era previamente incluso como 0b100 (4) se convertirá en 0b10 (2) y pondrá 0 en el indicador de acarreo. Indicador de acarreo es el bit 0 en el registro de indicador https://en.wikipedia.org/wiki/FLAGS_register

Si AL tenía anteriormente un valor impar como 0b101 (5), se convertirá en 0b10 (2) y pondrá 1 en el registro de banderas. Por lo tanto, la bandera de acarreo actuará como un resto si se divide por 2.

jnc bit_0; Será (J) ump para etiquetar 'bit_0' si se estableció (N) o (C) la bandera de Arry, es decir, si el valor era par (como 0b100 en el ejemplo anterior) antes del cambio.

Cuestiones relacionadas