Мой план состоит в том, чтобы проверить 3 значения, если они являются пифогорейскими тройками в сборке. Для этого я написал несколько подпрограмм, но до сих пор не понимаю, почему я не получаю никакого вывода при компиляции, связывании и компоновке. Я новичок в сборке. Мне пришлось переместить a, b, c из их регистров в разные, чтобы mul принимал регистры. Конечно, я до сих пор не знаю, где именно я что-то пропустил, я не могу точно установить связь и часами ломал себе голову над этим. Был бы рад, если бы кто-нибудь помог.
// Nummer 2: Pythagoreisches Zahlentripel
.global main
main:
mov r0, #3 // a = 3
mov r1, #4 // b = 4
mov r2, #5 // c = 5
b checkTriple
checkTriple:
cmp r2, r3 /* if-Abfrage ob a*a + b*b = c*c */
beq DONE
mov r4, r0 /* placeholder a = r4 for mul */
mov r5, r1 /* placeholder b = r5 fuer mul */
mov r6, r2 /* placeholder c = r6 fuer mul */
mul r0, r4, r0 /* a = a*a */
mul r1, r5, r1 /* b = b*b */
mul r2, r6, r2 /* c = c*c */
add r2, r0, r1 /* a*a + b*b = c*c */
b checkTriple /* Springe zum aufrenden Programm */
// nested For-Loops for checkTriple
outerLoop:
mov r0, #1
cmp r0, r2
beq innerLoop
mov r0, #1
innerLoop:
mov r1, r0
b checkTriple
cmp r1, r2
beq innerLoopDone
add r1,r1,#1
b innerLoop
innerLoopDone:
add r0, r0, #1
b outerLoop
DONE:
Это мой C -код на основе кода руки:
Bool checkTriple(int a, int b, int c)
{
return a * a + b * b == c * c;
}
void pythTriple(int c)
{
for(int a = 1; a < c; ++a)
{
for(int b = a; b < c; ++b)
{
if(checkTriple(a,b,c))
{
printf("Triples for c: %d, %d, %d",a,b,c);
}
}
}
}
int main()
{
pythTriple(5);
}