Найдите троек Пифагора в сборке ARM - PullRequest
0 голосов
/ 12 июля 2020

Мой план состоит в том, чтобы проверить 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);
}

1 Ответ

0 голосов
/ 12 июля 2020

Вы не получаете никакого вывода, потому что вы не вызываете printf.

...