nex036ara

Untitled

May 22nd, 2011
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. max=100
  3. hex_br_max = 10
  4. .section .data
  5. ispis1: .ascii "Unesite izraz:\0"
  6. unos: .fill max,1,0
  7. ispis2: .ascii "\0"
  8. error1: .ascii "Pogresan prvi operand!\0"
  9. error2: .ascii "Pogresan drugi operand!\0"
  10. error3: .ascii "Nepoznata operacija!\0"
  11. error: .byte 0
  12. hex_br: .fill hex_br_max,1,0
  13. ispis4: .ascii "Rezultat: \0"
  14. .section .text
  15. .globl main
  16. main:
  17.     movl $4, %eax
  18.     movl $1, %ebx
  19.     leal ispis1, %ecx
  20.     movl $15, %edx
  21.     int $0x80
  22.  
  23.     movl $3, %eax
  24.     movl $0, %ebx
  25.     leal unos, %ecx
  26.     movl $max, %edx
  27.     int $0x80
  28.  
  29.     movl $unos, %esi
  30.     xorl %eax, %eax    #%eax=0
  31.     xorl %ebx, %ebx
  32.     movl $16, %ecx     #%ecx= baza
  33.     xorl %ebp, %ebp
  34. nadji_broj:
  35.     movb (%esi), %bl
  36.     cmpb $' ', %bl
  37.     je dobijeno_a
  38.     cmpb $10, %bl      #proverava da li je doslo do kraja stringa
  39.     je izracunaj      #ako jeste dobili smo oba broja
  40.     cmpb $'0', %bl
  41.     jl greska
  42.     cmpb $'9', %bl
  43.     jle broj
  44.     cmpb $'A', %bl
  45.     jl greska
  46.     cmpb $'F', %bl
  47.     jle veliko_slovo
  48.     cmpb $'a', %bl
  49.     jl greska
  50.     cmpb $'f', %bl
  51.     jle malo_slovo
  52. greska:
  53.     incb error
  54.     cmpl $0, %ebp
  55.     je ispisi_gresku_1   #ako nismo dosli do znaka greska je u prvom operandu
  56.     incb error
  57.     jmp ispisi_gresku_2
  58. malo_slovo:
  59.     subb $87, %bl
  60.     mull %ecx
  61.     addl %ebx, %eax
  62.     incl %esi
  63.     jmp nadji_broj
  64. veliko_slovo:
  65.     subb $55, %bl
  66.     mull %ecx
  67.     addl %ebx, %eax
  68.     incl %esi
  69.     jmp nadji_broj
  70. broj:
  71.     subb $'0', %bl
  72.     mull %ecx
  73.     addl %ebx, %eax
  74.     incl %esi
  75.     jmp nadji_broj
  76. dobijeno_a:    
  77.     movl %eax, %edi     #prvi broj sacuva u %edi
  78.     xorl %eax, %eax
  79. nadji_logicku:
  80.     incl %esi
  81.     movb (%esi), %bl
  82.     cmpb $'^', %bl
  83.     je log_xor
  84.     cmpb $'&', %bl
  85.     je log_i
  86.     cmpb $'|', %bl
  87.     je log_ili
  88.     cmpb $' ', %bl
  89.     jne greska2
  90.     jmp nadji_logicku
  91. log_xor:
  92.     movl $'^', %ebp
  93.     jmp nadji_ad_b
  94. log_i:
  95.     movl $'&', %ebp
  96.     jmp nadji_ad_b
  97. log_ili:
  98.     movl $'|', %ebp
  99.     jmp nadji_ad_b
  100. greska2:
  101.     movl $4, %eax
  102.     movl $1, %ebx
  103.     leal error3, %ecx
  104.     movl $21, %edx
  105.     int $0x80
  106.     jmp kraj
  107. nadji_ad_b:            #trazi adresu od b
  108.     incl %esi
  109.     movb (%esi), %bl
  110.     cmpb $' ', %bl
  111.     je nadji_ad_b
  112.     jmp nadji_broj
  113. izracunaj:   #prvi broj je u %edi a drugi u %eax
  114.     cmpl $'^', %ebp
  115.     je odradi_xor
  116.     cmpl $'&', %ebp
  117.     je odradi_i
  118.     orl %edi, %eax
  119.     jmp kraji
  120. odradi_xor:
  121.     xorl %edi, %eax
  122.     jmp kraji
  123. odradi_i:
  124.     andl %edi, %eax
  125.     jmp kraji
  126. ispisi_gresku_1:
  127.     movl $4, %eax
  128.     movl $1, %ebx
  129.     leal error1, %ecx
  130.     movl $22, %edx
  131.     int $0x80
  132.     jmp kraj
  133. ispisi_gresku_2:
  134.     movl $4, %eax
  135.     movl $1, %ebx
  136.     leal error2, %ecx
  137.     movl $23, %edx
  138.     int $0x80
  139.     jmp kraj
  140. kraji:   #konvertovanje u string
  141.     leal hex_br, %edi
  142.     movl $16, %ebx
  143. hex_cifra:
  144.     xorl %edx, %edx
  145.     divl %ebx
  146.     cmpb $9, %dl
  147.     ja slovo
  148.     addb $'0', %dl
  149.     movb %dl, (%edi)
  150.     incl %edi
  151.     andl %eax, %eax
  152.     jnz hex_cifra
  153.     movb $0, (%edi)
  154.     decl %edi
  155.     leal hex_br, %esi
  156.     jmp obrni
  157. slovo:
  158.     addb $55, %dl
  159.     movb %dl, (%edi)
  160.     incl %edi
  161.     andl %eax, %eax
  162.     jnz hex_cifra
  163.     movb $0, (%edi)
  164.     decl %edi
  165.     leal hex_br, %esi
  166.     jmp obrni
  167. obrni:
  168.     cmpl %edi, %esi
  169.     jae krajii
  170.     movb (%esi), %ah
  171.     movb (%edi), %al
  172.     movb %al, (%esi)
  173.     movb %ah, (%edi)
  174.     decl %edi
  175.     incl %esi
  176.     jmp obrni
  177. krajii:    #poslednji ispis ukoliko postoji rezultat
  178.     movl $4, %eax
  179.     movl $1, %ebx
  180.     leal ispis4, %ecx
  181.     movl $11, %edx
  182.     int $0x80
  183.    
  184.     movl $4, %eax
  185.     movl $1, %ebx
  186.     leal hex_br, %ecx
  187.     movl $10, %edx
  188.     int $0x80
  189.  
  190.    
  191.    
  192.    
  193. kraj:
  194.     movl $1, %eax
  195.     movl $0, %ebx
  196.     int $0x80
Advertisement
Add Comment
Please, Sign In to add comment