fredericopissarra Posted March 27, 2019 at 12:44 AM Share Posted March 27, 2019 at 12:44 AM Já reparou que o GCC (e o VC++, bem como outros compiladores) não usam instruções tradicionais como INC, DEC e LOOP? INC e DEC são bem fáceis de entender e, por conseguinte, são intuitivas: Elas incrementam e decrementam, respectivamente, um registrador ou conteúdo de memória. Já a instrução LOOP salta para um endereço se RCX (x86-64) ou ECX (i386) não forem 0, decrementando esse registrador antes de cada salto. O nome da função é intuitivo também... O motivo do não-uso dessas instruções é que elas são mais lentas que as equivalentes... ADD e SUB, com o operando fonte imediato 1, é 1 ou 2 ciclos mais rápida que INC e DEC porque essas últimas não preservam o flag de Carry (CF). Elas efetivamente fazem um ciclo de leitura-modificação-escrita nos flags... E LOOP é mais lento que a sequência: SUB ECX,1/JNZ ... Essas duas instruções podem ser "fundidas" (micro-fusão), gastando, em certos casos, menos que 1 ciclo... Outro detalhe é que o seu compilador sempre prefere lidar com registradores de 32 bits (EAX, EBX, ...) ao invés de 8, 16 ou 64. Ele só lidará com registradores menores se não tiver jeito e, maiores, se estiver lidando com cálculo de endereços efetivos (porque a instrução não exigirá um prefixo 0x67)... Tenha em mente que seu processador, mesmo tendo uma extensão de 64 bits, é, ainda, de 32... Para acessar pedaços dos registradores é necessário algum mascaramento interno que consumirá algum tempinho (ou seja, MOV AX,2 é mais lento que MOV EAX,2, por exemplo). Por isso, em C, sempre que possível, use os tipos int ou unsigned int ao invés de char, short e long (ou long long)... Este é outro motivo pelo qual, às vezes, você vê o uso de instruções como MOVSX e MOVZX para estender um dos aliases de registradores, como: movsx eax,al Que parece não fazer muito sentido... trata-se apenas da conversão de um char num int. Seu compilador também não usa outras instruções como XLAT e JECXZ pelo mesmo motivo (lentidão). Link to comment Share on other sites More sharing options...
Fernando Mercês Posted April 24, 2019 at 07:20 AM Share Posted April 24, 2019 at 07:20 AM Cara, só continue com essas dicas, na boa. Estão resolvendo várias dúvidas antigas e algumas novas que eu nem sabia que tinha! ? Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.