Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .section .text
- .global kodiraj
- # int kodiraj(long long* vrijednost)
- kodiraj:
- pushl %ebp
- movl %esp, %ebp
- pushl %ebx
- pushl %esi
- movl 8(%ebp), %edx # pokazivac na long long
- movl $0, %ecx # brojac jedinica
- movl $1, %eax # maskica
- movl $0, %esi # povratna vrijednost
- nizi:
- testl %eax, (%edx)
- jz next_nizi
- incl %ecx # povecaj broj jedinica
- next_nizi:
- shll %eax
- jnc nizi
- movl $1, %eax # vrati maskicu na pocetak
- visi:
- testl %eax, 4(%edx)
- jz next_visi
- incl %ecx # povecaj broj jedinica
- next_visi:
- shll %eax
- jnc visi
- ### prebrojali smo jedinice u broju
- movl (%edx), %ebx # nizi dio u ebx, da ne bi promjenili originalni broj
- movl $0xFFFF, %eax # 0-15
- andl %eax, %ebx # setovani bitovi 0-15
- orl %ecx, %ebx # ILI broj jedinica
- addl %ebx, %esi
- movl (%edx), %ebx
- shll $16, %eax # 16-31
- andl %eax, %ebx
- orl %ecx, %ebx
- addl %ebx, %esi
- # visi dio, ista stvar, samo offset 4 od pokazivaca koji je u edx
- movl 4(%edx), %ebx # nizi dio u ebx, da ne bi promjenili originalni broj
- movl $0xFFFF, %eax # 0-15 gornjeg dijela, znaci 32-47
- andl %eax, %ebx # setovani bitovi 0-15
- orl %ecx, %ebx # ILI broj jedinica
- addl %ebx, %esi
- movl 4(%edx), %ebx
- shll $16, %eax # 16-31 (48-63)
- andl %eax, %ebx
- orl %ecx, %ebx
- addl %ebx, %esi
- movl %esi, %eax # return value
- kraj:
- popl %esi
- popl %ebx
- movl %ebp, %esp
- popl %ebp
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement