He estado aprendiendo x86 y x86_64 para escribir un ensamblador yo mismo. Si no va a escribir un ensamblador usted mismo, entonces algo de lo que contaré es bastante inútil. Aunque yo no sé sobre MIPS.
x86 direccionamiento indirecto es una cosa compleja. En una sola instrucción, puede hacerlo siguientes:
mov reg, [reg+offset]
mov reg, [reg*scale+base register+offset] # in where scale can be 1, 2, 4 or 8.
Su codificación de instrucciones es compleja debido a esto, pero es consistente para cada instrucción que codifica esta manera. Es posible que desee leer esto en sandpile.org. Si quieres saber más sobre la codificación, siempre puedes preguntar sobre esto. Otra instrucción que codifica detalles molestos relacionados son los prefijos. Cambian mucho el significado de la instrucción. Por ejemplo, 0x66 (si mal no recuerdo) al frente y algunas instrucciones se convierten en GPR de 16 bits en lugar de 32 bits.
GPR de 32 bits (en orden): EAX, ECx, EDX, EBX, esp, ebp, ESI, EDI
GPR de 64 bits: rax, RCX, RDX, rbx, RSP, RBP, RSI, RDI, r8 , r9, r10, r11, r12, r13, r14, r15
Observe cuán pocos registros de propósito general hay, esto forzará a la mayoría de los programas a usarlo más o menos de una manera apta para la máquina de pila. Un detalle doloroso rsp se usa para la pila (instrucciones pop, push) y rbp tiende a reservarse también. x86_64 tiene más registros, pero tomará tiempo cuando las personas lo adopten, incluso si cada uno de los consumidores tuviera un procesador capaz de hacerlo.
Hay dos conjuntos de instrucciones diferentes para la aritmética de coma flotante. XMM es el más nuevo. En x86_64 hay 16 registros de 128 bits disponibles y en x86 solo hay 8 de ellos. El conjunto de instrucciones más antiguo maneja los registros como una pila. Simplemente no tiene intercambio, mordisco ni podredumbre, por lo que trabajar con él es alucinante.
En uso x86 tiende a reducirse a una máquina RISC. Algunas de esas instrucciones complejas no brindan beneficios o son incluso más lentas en las máquinas más nuevas. Lo hará con la comprensión de 30-150 instrucciones dependiendo de lo que está leyendo o escribiendo. También puede ignorar por completo algunas instrucciones antiguas y AL/HL -stuff. Tenga en cuenta todos los orígenes de este desorden detrás de 1978, que es bastante sorprendente, no es peor, 31 años después de eso y 24 años desde la primera presentación de IA-32. Muchas cosas cambian su relevancia en ese momento.
Los saltos directos y las llamadas parecen ser relativas a las siguientes instrucciones en x86. Por lo tanto:
jmp nowhere # or call, jz, jg whatever...
nowhere:
nop
termina codificada a 'JMP imm: 0, NOP'. El jmp de registro indirecto que sí hace saltos absolutos. También es bueno notar que no hay saltos condicionales de registro indirecto, también me molestó.
Esto no es todo lo que debe saber, pero lo primero que me viene a la mente es su pregunta. Pero tal vez te puedas llevar bien con esto por ahora.
Puede solicitar el CD [aquí] (https://secure.hibbertgroup.com/intel/spm?programId=1). La copia impresa, lamentablemente, ya no se ofrece. – new123456
La arqueología entiende mejor el conjunto de instrucciones x86. Si ha visto lo que tiene un 8080, cómo informa vagamente el diseño de un 8088, y finalmente cómo el 386 agregó cosas encima, todo tiene sentido. De lo contrario, las reglas parecen un poco arbitrarias. – ijw