x64 the language español art assembly x86-64

x64 - the art of assembly language en español



Intel 64, rsi y rdi registra (1)

en la arquitectura Intel 64 hay los registros rax..rdx que son simplemente registros de propósito general A..D.

Pero también hay registros llamados rsi y rdi que son los registros de "índice de origen" y "índice de destino". ¿Por qué estos registros tienen nombres reales (en comparación con solo A, etc.)?
¿Qué significa realmente "índice de origen" e "índice de destino"? ¿Y hay alguna convención que diga que estos registros deberían usarse en circunstancias específicas?


Estos registros originalmente se usaron implícitamente en instrucciones repetitivas, por ejemplo MOVSB , que copian un byte de DS:SI (DataSegment: SourceIndex) a ES:DI (ExtraSegment: DestinationIndex), en el momento de las computadoras de 16 bits con memoria segmentada en modo real Y también como registros de índice en modos de direccionamiento de 16 bits como [bx + si] .

En este momento, estos registros se utilizan, por ejemplo, para transmitir los primeros dos parámetros de función (enteros) en x86_64 ABI de UNIX , lejos de su propósito original. (Consulte también ¿Cuáles son los convenios de llamada para las llamadas de sistema UNIX y Linux en i386 y x86-64 )

Los nombres de los nuevos rXX 64 bits muestran claramente que los nombres de registros antiguos solo están aquí para familiaridad y compatibilidad rXX . (Pero tenga en cuenta que algunas instrucciones aún funcionan solo con algunos registros, por ejemplo, rep movsb solo funciona como un memcpy(rdi, rsi, rcx) , y de hecho es por eso que RDI y RSI fueron elegidos como los primeros 2 registros de aprobación de argumentos en el ABI x86-64 del sistema V: algunas funciones llaman memset o memcpy con sus primeros 1 o 2 argumentos, por lo que en ese caso la rep movsb/d es más barata.)