vi el siguiente código:Ensamblaje - instrucción shr encender bandera de acarreo?
shr AL, 1
jnc bit_0
No entiendo cuando la bandera de acarreo se encienda debido a instrucrion SHR?
Gracias
vi el siguiente código:Ensamblaje - instrucción shr encender bandera de acarreo?
shr AL, 1
jnc bit_0
No entiendo cuando la bandera de acarreo se encienda debido a instrucrion SHR?
Gracias
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.
¿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? –
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? –
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
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.
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.
Está probando si AL es par o impar. – harold