;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 #include using namespace std; extern "C" int zliczcyfry(int a); int main() { int a=19942; int wynik = zliczcyfry(a); cout<10) { licz++; b/=10; } cout<