2011-12-04 48 views
17

He aprendido a trabajar con el ensamblador 80x86, por lo que en la operación de cambio de bits, me enfrenté a un problema con el uso de SAL y SHL. I significa la diferencia entre las líneas de código de la siguiente manera:Diferencia entre SHL y SAL en 80x86

MOV X, 0AAH 
SAL X, 4 

MOV X, 0AAH 
SHL X, 4 

¿Cuándo debemos usar SHL y cuándo usar SAL? ¿Cuál es la diferencia de ellos?

Respuesta

24

Según this, que son los mismos:

La aritmética desplazamiento a la izquierda (SAL) y cambian izquierda lógica (SHL) instrucciones realizan la misma operación; cambian los bits en el operando de destino a la izquierda (hacia las ubicaciones de bit más significativas ). Para cada recuento de turnos, el bit más significativo del operando de destino se desplaza al indicador CF y se borra el bit menos significativo (consulte la Figura 7-7 en Intel®64 y IA-32 Architectures Software Developer'sManual , Volúmen 1).

Ambos fueron probablemente incluidos simplemente para la corrección ya que es una distinción para diestros y turnos.

+0

gracias por hacer que el concepto sea claro. Todo este tiempo tuve el concepto equivocado de que SAL desplaza los bits una posición hacia la izquierda, pero en lugar de borrar el lsb, mantiene el bit lsb sin cambios. – Abrar

+0

SAL y SHLtienen el mismo código de operación, es solo un sinónimo mnemónico como 'jne' contra' jnz'. Entonces, no hay forma posible de que la CPU sepa siquiera cuál escribió; ellos tienen que comportarse igual. –

4

No hay ninguna diferencia aparte de Intel y AMD que desean depreciar el SAL duplicado.

1

funcionan igual, ya que un cambio aritmético es igual a un cambio en modo bit cuando está a la izquierda (aumentando). sar, por otro lado, será diferente de shr si se establece el bit de signo.

1

Son lo mismo si usa la dirección de la izquierda.

-1

en realidad ambos son los mismos ..! pero SAL utiliza cuando multiplicación numérica está destinada Ejemplo SAL:

Multiply AX by 8 
MOV CL, 3 
SAL AX, CL 

ambos son mayoría trabajan iguales y tienen el mismo código de máquina

2

shl y Sal están la same.They tener el mismo código de máquina .
SHR y SAR se NO la same.They tiene casi mismo código máquina. (Pero no)
Comprobar this.