; Naprogramujte podprogram ‹bezout›, který obdrží dvě celá čísla ⟦a⟧ ; a ⟦b⟧ a s využitím rozšířeného Euklidova algoritmu nalezne jejich ; koeficienty do Bézoutovy rovnosti, tj. celá čísla ⟦α⟧ a ⟦β⟧ taková, ; že ; ; ⟦ α·a + β·b = gcd( a, b ) ⟧ ; ; Dle obvyklé volací konvence očekávejte ⟦a⟧ v ‹l1› a ⟦b⟧ v ‹l2›. ; Protože podprogram vrací dva výsledky, je potřeba volací konvenci ; ad-hoc rozšířit: ⟦α⟧ nechť je v ‹rv›, ⟦β⟧ v ‹l1›. main: put 0 → t1 jmp .main.loop ; Řešení včetně návěští ‹bezout› můžete psát třeba sem. ; Testovací data data: ; a, b → gcd( a, b ) .word 1, 1, 1 .word 2, 2, 2 .word 18, 15, 3 .word 20, 30, 10 .word -1 ; Zbytek souboru je implementace testů a můžete jej ignorovat. .main.loop: ld t1, data → l1 eq l1, 0xffff → t2 jnz t2, .main.leave ld t1, data + 2 → l2 push t1 call bezout pop t1 .trigger set _tc_expect_ 4 .trigger inc _tc_ ld t1, data → l3 ld t1, data + 2 → l4 ld t1, data + 4 → l5 mul l3, rv → rv mul l4, l1 → l1 add l1, rv → rv eq rv, l5 → rv asrt rv add t1, 6 → t1 jmp .main.loop .main.leave: halt