v3n0w escreveu:
Bom, fazendo um progaminha, não vai dar pra notar a diferença.. Mas vejamos assim, um emulador de snes feito em asm, roda em 486(dos), já outro emulador de snes, feito em C, precisa de no minimo um pentium 2.
Dá sim. Com um programinha simples com algumas funções, loops, ponteiros e afins já é possível quantificar o quão eficiente o compilador é.
v3n0w escreveu:
Seria no caso, o ZSNES, e o SNES9X respectivamente.
E assim, o ZSNES é 86% em asm, sera que eles se dariam o trabalho de fazer em asm, por hobby mesmo, ou porque fica mais rapidao mesmo?
E eu não creio que o compilar gere um asm, a partir de C, que fique parecido como se fosse orignalmente progamado em asm.
Gera sim. Sente
só. Embora eu deva admitir que acho o trabalho de desenvolvimento de um emulador uma área aonde é bem possível achar muitos dos casos específicos que eu quis citar, isto não quer dizer muita coisa. Existem coisas muito mais complexas feitas em sua maior parte em C (vide o kernel do Linux, por exemplo).
E o que o Ashdrubal falou é verdade, é muito mais vantagem conhecer o compilador que você está usando (bem como as possibilidades de otimização que ele te fornece) e utilizado assembly aonde você sabe que o resultado não será bom, do que simplesmente escrever tudo usando assembly.
v3n0w escreveu:
Mas aproveitando o tópico, eu tenho mais algumas perguntinhas...
Como pode um progama ser progamado em 2 linguagens?? Onde ficaria o eixo entre as duas linguagem? Biblioteca C acessa ASM? Como ele seria compilado?
Isso varia de compilador para compilador. No caso do gcc, você usa uma "extensão" que é definida usando:
Código:
__asm__ ("
codigo ");
v3n0w escreveu:
Outra.. A maioria dos codigos fontes que eu pego eu simplismente não acho o MAIN, o codigo é super dividido... Ou seja, seria possivel de fazer um codigo em C, sem o main? Ou ele estaria em algum lugar e eu que não to achando?
Você não está achando porque:
1) Basicamente: não tem. main(), no C é apenas um alias para definir o começo do segmento "text" de um binário, ou seja, aonde realmente começa o código.
2) Entretanto, você deve encontrar a função inicial do programa a partir da definição do segmento. Ex.:
3) Varia de arquitetura para arquitetura.
Código:
.global: main
blá
blá
blá
main:
código
v3n0w escreveu:
Como exemplo olhem o codigo do pcsx2, emulador de psx2, e vejam se vocês acham um main, na coisa.
http://www.pcsx2.net/pcsx2download.php?aid=180Vlww

Esse código em questão tem um main sim (pelo menos para Linux). Ele está no arquivo Linux/LnxMain.c (linha 54).
Por fim, ressalto que alguma das coisas que eu falei podem não se aplicar a outras plataformas. Eu conheço
bem pouco de assembly, e em geral em Linux e FreeBSD.
[]'s