fredericopissarra Postado Março 27, 2019 em 00:44 Compartilhar Postado Março 27, 2019 em 00:44 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 para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Abril 24, 2019 em 07:20 Compartilhar Postado Abril 24, 2019 em 07:20 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 para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.