Pregunta

¿Hay una manera más rápida de dividir por 2, con signo, en el montaje de aquel en el ejemplo de abajo?

...
mov ecx, 2
idiv ecx
push eax #push the result
...
¿Fue útil?

Solución

Claro:

sar eax, 1

El código de operación sar difiere de shr en que el (signo) bit más significativo se conserva en sar, y se pone a 0 en shr. El aritmética cambiar página en Wikipedia muestra muchos más detalles sobre esta operación en un contexto general.

Tenga en cuenta que en la máquina de complemento a 2 (que es el 86) En realidad, esto calcula floor(eax / 2). En particular, esto significa que para un número entero x :

  • para x = 0 , el resultado es 0
  • para x> 0 , el resultado es piso (x / 2)
  • para x <0 , el resultado es también piso (x / 2) o -ceil (-x / 2)

Este último resultado da resultados que pueden ser inesperado. Por ejemplo, -3 sar 1 resultados en -2, -1 no. Por otra parte, 3 SAR 1 resultados en 1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top