Su segunda opción producirá un error, x86 no tiene esa instrucción. X86 es un poco único con respecto a cargar bytes en ciertos registros. Sí, en la mayoría de las arquitecturas de conjuntos de instrucciones, el operando es cero o extendido, pero x86 le permite escribir solo el byte inferior o 16 bits más bajos de algunos de ellos.
Ciertamente hay otras opciones, como la limpieza del registro y luego incrementarlo, pero aquí hay tres opciones inicialmente razonables de aspecto tiene:
0: b8 01 00 00 00 movl $0x1,%eax
5: 31 c0 xorl %eax,%eax
7: b0 01 movb $0x1,%al
9: b0 01 movb $0x1,%al
b: 0f b6 c0 movzbl %al,%eax
La primera es de 5 bytes, el segundo 4, el tercer 5. Por lo tanto, el segundo es la mejor opción para optimizar el espacio; de lo contrario, supongo que el que corre más rápido es el primero. En la actualidad, el X86 está profundamente canalizado, de modo que las dos instrucciones se entrelazarán y la máquina puede necesitar bastantes estados de espera dependiendo de los detalles del hardware de la tubería.
Por supuesto, estas operaciones x86 se están traduciendo en formas específicas de la CPU en CPU micro-ops, y por lo que sabe lo que sucederá.
¿Qué tiene que ver el lanzamiento de un sistema operativo con las convenciones de nomenclatura de los tipos? –
Era una forma de hablar. La intención era indicar que una vez publicada, la especificación del conjunto de instrucciones no cambia de forma destructiva. –
Es por eso que prefiero la sintaxis Intel a la sintaxis GAS. Intel: mov dword eax, ecx GAS: movl eax, ecx El operando de tamaño "l" confunde a las personas. Más personas entienden que 'dword' significa 32 bits. – Jason