- ;alg euklidesa
- default rel
- global main
- extern printf
- extern scanf
- section .data
- format db "%d",10,0
- format_stos db "%d",10,0
- section .text
- main:
- push rbp
- mov rbp,rsp
- mov edi,3084
- mov esi,1424
- call stos
- call nwd
- mov rdi, format
- mov esi, eax
- xor rax,rax
- call printf wrt ..plt
- call stos
- mov rsp,rbp
- pop rbp
- ret ;zwraca to co w raxie i konczy program
- nwd:
- call stos ;kolejne wywolania rekurencyjne
- cmp esi,0
- je _zwroc_a
- mov eax,edi
- xor edx,edx
- div esi
- mov edi,esi
- mov esi,edx ;reszta dzielenia w edx edi=a esi=b
- call nwd
- _zwroc_a:
- mov eax,edi
- ret
- stos:
- push rsi
- push rdi
- mov rdi, format_stos
- lea rsi,[rsp+24]
- xor rax,rax
- call printf wrt ..plt ;wypisywanie adresu powrotu //rekurencja
- pop rdi
- pop rsi
- ret
- //2
- default rel
- global main
- extern scanf
- extern printf
- section .data
- zmienna10 dd 10
- tab TIMES 100 dd 0
- format_wypisz db "wartosc to %d",10,0
- section .text
- main:
- push rbp
- mov rbp,rsp
- mov r12,[tab]
- mov r13d,0
- _petla:
- cmp r13d,100 ;petla
- je _dalej
- mov eax,r13d ;wkladam nr iteracji do dzielnika
- xor edx,edx
- div dword[zmienna10] ; dziele przez 10
- mov r14d,eax ;wynik przenosze do r14d jest to nr kolumny
- mov r15d,edx ;to jest nr wiersza w kolumnie
- add r14d,r15d ;dodaje nr iteracji i nr kolumny
- mov [tab+4*r13],r14d
- inc r13d
- jmp _petla
- _dalej:
- mov r12,[tab]
- mov r13d,0
- _lop:
- cmp r13d,100
- je _koniec
- mov rdi,format_wypisz
- mov rsi,[tab+r13d*4]
- xor rax,rax
- call printf wrt ..plt
- inc r13d
- jmp _lop
- _koniec:
- mov rsp,rbp
- pop rbp
- ret
- //3
- default rel
- global main
- extern scanf
- extern printf
- section .data
- format db "%d"
- format_wypisz db "najwieksza liczba to %d",10,0
- tab TIMES 10 DB 0
- section .text
- main:
- push rbp
- mov rbp,rsp
- mov r12,tab
- mov r14d,10
- _petla:
- cmp r14d,0
- je _dalej
- mov rdi,format
- mov rsi,r12
- xor rax,rax
- call scanf wrt ..plt
- dec r14d
- add r12,4
- jmp _petla
- _dalej:
- mov r13d,[tab]
- mov r14d,1
- _lop:
- cmp r14d,10
- je _koniec
- cmp r13d,[tab+4*r14d] ;porownaj r13d z po prawej
- jl _mniejsza; jesli r13d mniejsze skoczz
- mov r13d,[tab+4*r14d]
- _mniejsza:
- inc r14d
- jmp _lop
- _koniec:
- mov rdi,format_wypisz
- mov esi,r13d
- xor rax,rax
- call printf wrt ..plt
- mov rsp,rbp
- pop rbp
- ret
- //4
- default rel
- global main
- extern scanf
- extern printf
- section .data
- format db "%d"
- ;format_wy db "%d",10,0
- zm dd 0
- blad db "zla ocena",10,0
- dwa db "dwa",10,0
- trzy db "trzy",10,0
- cztery db "cztery",10,0
- piec db "piec",10,0
- tab dq _blad, _blad, _dwa, _trzy, _cztery, _piec, _blad
- section .text
- main:
- push rbp
- mov rbp,rsp
- mov rdi,format
- mov esi,zm
- xor rax,rax
- call scanf wrt ..plt
- mov r15d,dword[zm]
- jmp qword[tab+8*r15d]
- _blad:
- mov rdi,blad
- xor rax,rax
- call printf wrt ..plt
- jmp _koniec
- _dwa:
- mov rdi,dwa
- xor rax,rax
- call printf wrt ..plt
- jmp _koniec
- _trzy:
- mov rdi,trzy
- xor rax,rax
- call printf wrt ..plt
- jmp _koniec
- _cztery:
- mov rdi,cztery
- xor rax,rax
- call printf wrt ..plt
- jmp _koniec
- _piec:
- mov rdi,piec
- xor rax,rax
- call printf wrt ..plt
- _koniec:
- mov rsp,rbp
- pop rbp
- ret
- //5
- section .text
- global zliczcyfry
- zliczcyfry:
- push rbp
- mov rbp,rsp
- mov r14d,0
- _loop:
- cmp edi,10
- jl _koniec
- mov eax,edi
- xor rdx,rdx
- div dword[liczba10]
- mov edi,eax
- inc r14d
- jmp _loop
- _koniec:
- mov eax,r14d
- mov rsp,rbp
- pop rbp
- ret
- section .data
- liczba10 dd 10
- //5 cpp
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- extern "C" int zliczcyfry(int a);
- int main()
- {
- int a=19942;
- int wynik = zliczcyfry(a);
- cout<<wynik<<endl;
- int b = a;
- int licz = 0;
- while(b>10)
- {
- licz++;
- b/=10;
- }
- cout<<licz<<" :/"<<endl;
- return 0;
- }