Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- max=100
- hex_br_max = 10
- .section .data
- ispis1: .ascii "Unesite izraz:\0"
- unos: .fill max,1,0
- ispis2: .ascii "\0"
- error1: .ascii "Pogresan prvi operand!\0"
- error2: .ascii "Pogresan drugi operand!\0"
- error3: .ascii "Nepoznata operacija!\0"
- error: .byte 0
- hex_br: .fill hex_br_max,1,0
- ispis4: .ascii "Rezultat: \0"
- .section .text
- .globl main
- main:
- movl $4, %eax
- movl $1, %ebx
- leal ispis1, %ecx
- movl $15, %edx
- int $0x80
- movl $3, %eax
- movl $0, %ebx
- leal unos, %ecx
- movl $max, %edx
- int $0x80
- movl $unos, %esi
- xorl %eax, %eax #%eax=0
- xorl %ebx, %ebx
- movl $16, %ecx #%ecx= baza
- xorl %ebp, %ebp
- nadji_broj:
- movb (%esi), %bl
- cmpb $' ', %bl
- je dobijeno_a
- cmpb $10, %bl #proverava da li je doslo do kraja stringa
- je izracunaj #ako jeste dobili smo oba broja
- cmpb $'0', %bl
- jl greska
- cmpb $'9', %bl
- jle broj
- cmpb $'A', %bl
- jl greska
- cmpb $'F', %bl
- jle veliko_slovo
- cmpb $'a', %bl
- jl greska
- cmpb $'f', %bl
- jle malo_slovo
- greska:
- incb error
- cmpl $0, %ebp
- je ispisi_gresku_1 #ako nismo dosli do znaka greska je u prvom operandu
- incb error
- jmp ispisi_gresku_2
- malo_slovo:
- subb $87, %bl
- mull %ecx
- addl %ebx, %eax
- incl %esi
- jmp nadji_broj
- veliko_slovo:
- subb $55, %bl
- mull %ecx
- addl %ebx, %eax
- incl %esi
- jmp nadji_broj
- broj:
- subb $'0', %bl
- mull %ecx
- addl %ebx, %eax
- incl %esi
- jmp nadji_broj
- dobijeno_a:
- movl %eax, %edi #prvi broj sacuva u %edi
- xorl %eax, %eax
- nadji_logicku:
- incl %esi
- movb (%esi), %bl
- cmpb $'^', %bl
- je log_xor
- cmpb $'&', %bl
- je log_i
- cmpb $'|', %bl
- je log_ili
- cmpb $' ', %bl
- jne greska2
- jmp nadji_logicku
- log_xor:
- movl $'^', %ebp
- jmp nadji_ad_b
- log_i:
- movl $'&', %ebp
- jmp nadji_ad_b
- log_ili:
- movl $'|', %ebp
- jmp nadji_ad_b
- greska2:
- movl $4, %eax
- movl $1, %ebx
- leal error3, %ecx
- movl $21, %edx
- int $0x80
- jmp kraj
- nadji_ad_b: #trazi adresu od b
- incl %esi
- movb (%esi), %bl
- cmpb $' ', %bl
- je nadji_ad_b
- jmp nadji_broj
- izracunaj: #prvi broj je u %edi a drugi u %eax
- cmpl $'^', %ebp
- je odradi_xor
- cmpl $'&', %ebp
- je odradi_i
- orl %edi, %eax
- jmp kraji
- odradi_xor:
- xorl %edi, %eax
- jmp kraji
- odradi_i:
- andl %edi, %eax
- jmp kraji
- ispisi_gresku_1:
- movl $4, %eax
- movl $1, %ebx
- leal error1, %ecx
- movl $22, %edx
- int $0x80
- jmp kraj
- ispisi_gresku_2:
- movl $4, %eax
- movl $1, %ebx
- leal error2, %ecx
- movl $23, %edx
- int $0x80
- jmp kraj
- kraji: #konvertovanje u string
- leal hex_br, %edi
- movl $16, %ebx
- hex_cifra:
- xorl %edx, %edx
- divl %ebx
- cmpb $9, %dl
- ja slovo
- addb $'0', %dl
- movb %dl, (%edi)
- incl %edi
- andl %eax, %eax
- jnz hex_cifra
- movb $0, (%edi)
- decl %edi
- leal hex_br, %esi
- jmp obrni
- slovo:
- addb $55, %dl
- movb %dl, (%edi)
- incl %edi
- andl %eax, %eax
- jnz hex_cifra
- movb $0, (%edi)
- decl %edi
- leal hex_br, %esi
- jmp obrni
- obrni:
- cmpl %edi, %esi
- jae krajii
- movb (%esi), %ah
- movb (%edi), %al
- movb %al, (%esi)
- movb %ah, (%edi)
- decl %edi
- incl %esi
- jmp obrni
- krajii: #poslednji ispis ukoliko postoji rezultat
- movl $4, %eax
- movl $1, %ebx
- leal ispis4, %ecx
- movl $11, %edx
- int $0x80
- movl $4, %eax
- movl $1, %ebx
- leal hex_br, %ecx
- movl $10, %edx
- int $0x80
- kraj:
- movl $1, %eax
- movl $0, %ebx
- int $0x80
Advertisement
Add Comment
Please, Sign In to add comment