A menudo se nos dice que al hardware no le importa en qué idioma está escrito un programa, ya que solo ve el código binario compilado, sin embargo, esta no es toda la verdad. Por ejemplo, considere el humilde Z80; sus extensiones al conjunto de instrucciones 8080 incluyen instrucciones como CPIR, que es útil para escanear cadenas de estilo C (terminadas en NULL), por ejemplo, para realizar strlen()
. Los diseñadores deben haber identificado que ejecutar programas en C (a diferencia de Pascal, donde la longitud de una cadena está en el encabezado) era algo para lo que probablemente se usaría su diseño. Otro ejemplo clásico es la máquina Lisp .
¿Qué otros ejemplos hay? Por ejemplo, instrucciones, número y tipo de registros , modos de direccionamiento, que hacen que un procesador en particular favorezca las convenciones de un idioma en particular. Estoy particularmente interesado en las revisiones de la misma familia.
sizeof(int)
igual a 1 debe requerir que se firme el tipo char
(ya que un int
debe poder contener todos los valores de tipo char
). He escrito código para una máquina donde char
y int
son enteros con signo de 16 bits; Las mayores dificultades son que no se pueden usar uniones para la conversión de tipos, y el almacenamiento eficiente de una gran cantidad de bytes requiere el empaquetado y desempaquetado manual. Esos problemas son menores en comparación con la posibilidad en C de que sizeof (int) == sizeof (long), ya que ...
unsigned int
valores. C99 mejoró esa situación, pero antes de C99 no había una forma segura y segura de un solo paso para comparar un valor potencialmente negativo con un valor de tipo unsigned int
(uno tendría que probar si el número era negativo antes de hacer la comparación).