Ich bin sehr neu in der Montage und ich möchte alle pythagoreischen Tripel in einem Bereich von 1 bis 100 finden. Ich erzeuge alle Zahlen in C und alle anderen Berechnungen sollten in Assembly SSE erfolgen. Ich habe versucht, dies mit dem Befehl sqrt (ich habe alle versucht), aber ich konnte es nicht funktionieren .. Kann mir jemand sagen, wie es gemacht werden soll?Wie findet man Pythagoras-Tripel mit Hilfe der SSE-Montageanleitung?
Das ist, was ich bisher habe:
int main(){
for (int i = 1; i <= 100; i++)
{
a++;
if (a > 100)
a = 0;
for (int j = 1; j <= 100; j++)
{
b++;
if (b > 100)
b = a;
_asm //tricky part begins here:
{
movups xmm0, a
movups xmm1, b
pmuludq xmm0, xmm0
pmuludq xmm1, xmm1
//movups xmm2, 0
//paddd xmm2, xmm0
//paddd xmm2, xmm1
movups z, xmm0
}
printf("%d\n", z);
}
}
}
"Ich möchte dies in der Montage tun, weil ich weiß, dass es schneller ist als C." Wie kannst du das Wissen? Weil es wahrscheinlich nicht sein wird. –
Ich würde nicht davon ausgehen, dass Ihre handschriftliche asm schneller als eine C-Compiler-Ausgabe sein wird. Compiler sind intelligente, moderne CPUs sind komplex. – Blorgbeard
Notieren Sie zuerst Ihren Algorithmus in C oder Pseudocode. – Jester