Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #long long Racunaj(long long *A, long long *B, char *operacija, int *greska);
- .section .text
- .globl Racunaj
- Racunaj:
- pushl %ebp
- movl %esp, %ebp #klasika za svaku funkciju
- pushl %ebx
- pushl %esi
- pushl %edi #ova tri registra smjestamo na stek
- movl 8(%ebp), %esi # *A
- movl 12(%ebp), %edi # *B
- movl 20(%ebp), %ecx
- movl $0, (%ecx) #postavlja gresku prekoracenja na 0
- #odredi operaciju
- movl 16(%ebp), %ecx # *operacija
- cmpb $'*', (%ecx)
- je pomnozi
- cmpb $'+', (%ecx)
- je saberi
- cmpb $'-', (%ecx)
- je oduzmi
- #ako je dosao do ovdje operacija nije validna
- jmp greskaOperacija
- saberi:
- movl (%esi), %eax
- movl 4(%esi), %edx
- movl (%edi), %ecx
- movl 4(%edi), %ebx
- addl %ecx, %eax
- adcl %ebx, %edx
- jo greskaPrekoracenje
- jmp kraj
- oduzmi:
- movl (%esi), %eax
- movl 4(%esi), %edx
- movl (%edi), %ecx
- movl 4(%edi), %ebx
- subl %ecx, %eax
- sbbl %ebx, %edx
- jo greskaPrekoracenje
- jmp kraj
- pomnozi:
- movl (%esi), %eax
- movl 4(%esi), %edx
- movl (%edi), %ecx
- movl 4(%edi), %ebx
- cmpl $0, %edx
- je pomnoziEax
- cmpl $0, %ebx
- je pomnoziEcx
- jmp greskaPrekoracenje
- pomnoziEax:
- movl $1, %esi
- movl %ecx, %edx
- pomnoziEdxPetlja:
- cmpl %esi, %eax
- je pomnoziEdxPetljaKraj
- addl %edx, %ecx
- adcl $0, %ebx
- jo greskaPrekoracenje
- incl %esi
- jmp pomnoziEdxPetlja
- pomnoziEdxPetljaKraj:
- movl %ecx, %eax
- movl %ebx, %edx
- jmp kraj
- pomnoziEcx:
- movl $1, %esi
- movl %eax, %ebx
- pomnoziEcxPetlja:
- cmpl %esi, %ecx
- je pomnoziEcxPetljaKraj
- addl %ebx, %eax
- adcl $0, %edx
- jo greskaPrekoracenje
- incl %esi
- jmp pomnoziEcxPetlja
- pomnoziEcxPetljaKraj:
- jmp kraj
- greskaOperacija:
- movl 20(%ebp), %ecx
- movl $1, (%ecx)
- greskaPrekoracenje:
- movl 20(%ebp), %ecx
- movl $-1, (%ecx)
- kraj:
- popl %edi
- popl %esi
- popl %ebx #zbog onog `pushl` sa pocetka
- movl %ebp, %esp #klasika za svaku funkciju
- popl %ebp
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement