Advertisement
K1SR

qebicbjabcj

Mar 26th, 2022 (edited)
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 21.30 KB | None | 0 0
  1. Unesite izraz: n=2, m=10, niz={100, 200, 210, 210, 500, 1000, }dodatak Ukupno brojeva koji ispunjavaju uslov: 0X2
  2. Unesite izraz: n=2g, m=10, niz={100, 200, 210, 210, 500, 1000, }dodatak GRESKA: Problem prilikom konverzije brojeva.
  3. Unesite izraz: n=4294967296, m=10, niz={100, 200, 210, 210, 500, 1000, )dodatak GRESKA: Problem prilikom konverzije brojeva.
  4. Unesite izraz: n=2, m=10, niz={100, 200, 210, 210,500,0, } GRESKA: Prekoracenje kod provere uslova. (objašnjenje: pošto su brojevi neoznačeni, kad proveravamo poslednji uslov i uradimo 0-10, doći će prekoračenja)
  5. Unesite izraz: n=2, m=10, niz={100, 200, 210, 2147483648,500, 1000, } GRESKA: Prekoracenje kod provere uslova. (objašnjenje: pošto su brojevi 32-bitni, kad proveravamo poslednji uslov i uradimo 2147483648*2, doći će do prekoračenja)
  6. Unesite izraz: n=2, m=10, niz={} Ukupno brojeva koji ispunjavaju uslov: 0x0
  7. #
  8. #
  9. #
  10. #
  11. .section .data
  12. novi_red: .ascii "\n"
  13. novi_len=.-novi_red
  14. ulaz: .ascii "Unesite do 10 brojeva: \0"
  15. ulaz_len=.-ulaz
  16. str1: .fill 151,1,0
  17. str1_len=.-str1
  18. izlaz: .ascii "Transformacija: \0"
  19. izlaz_len=.-izlaz
  20. str2: .fill 151,1,0
  21. str2_len=.-str2
  22.  
  23. niz: .fill 10,4,0
  24. niz1: .fill 10,4,0
  25.  
  26. baza: .long 10
  27. baza1: .long 36
  28. .section .text
  29. .globl main
  30. main:
  31.     movl $4, %eax
  32.     movl $1, %ebx
  33.     movl $ulaz, %ecx
  34.     movl $ulaz_len, %edx
  35.     int $0x80
  36.  
  37.     movl $3, %eax
  38.     movl $0, %ebx
  39.     movl $str1, %ecx
  40.     movl $str1_len, %edx
  41.     int $0x80
  42.  
  43.     movl %ecx, %esi
  44.     movl $0, %eax
  45.     movl $0, %ecx
  46.     movl $0, %ebx
  47. petlja:
  48.     movb (%esi), %bl
  49.     cmpb $'\n' , %bl
  50.     je greska1
  51.     cmpb $' ' , %bl
  52.     jne predprovere1
  53.     incl %esi
  54.     jmp petlja
  55. predprovere1:
  56.     movb (%esi), %bl
  57.     movl %esi, %edi
  58. provere1:
  59.     cmpb $'\n' , 1(%edi)
  60.     je provere
  61.     cmpb $'\n' , %bl     #aba\n
  62.     je dodaj_u_niz
  63.     cmpb $' ' , 1(%edi)
  64.     je provere
  65.     cmpb $' ' , %bl
  66.     je dodaj_u_niz
  67.     cmpb %bl, 1(%edi)
  68.     je dalje
  69.     incl %edi
  70.     jmp provere1
  71. dalje:
  72.     incl %esi
  73.     jmp predprovere1
  74.        
  75. provere:
  76.     cmpb $'\n' , %bl
  77.     je dodaj_u_niz
  78.     cmpb $' ' , %bl
  79.     je dodaj_u_niz
  80.     cmpb $'0' , %bl
  81.     jb greska1
  82.     cmpb $'9' ,%bl
  83.     jbe cifra
  84.     subb $39, %bl
  85. cifra:
  86.     subb $'0' , %bl
  87.     cmpb $35, %bl
  88.     ja greska1
  89.     movl $0, %edx
  90.     mull baza1
  91.     jc greska1
  92.     addl %ebx, %eax
  93.     jc greska1
  94.     incl %esi
  95.     jmp predprovere1
  96.    
  97. dodaj_u_niz:
  98.     movl %eax, niz(,%ecx,4)
  99.     incl %ecx
  100.     movl $0, %eax
  101.     cmpb $'\n' , %bl
  102.     je saberi_niz
  103.     incl %esi
  104.     jmp petlja
  105.    
  106.    
  107. saberi_niz:
  108.     movl $0, %esi
  109.     movl $0, %edi
  110.     movl $0, %ebx
  111. saberi:
  112.     cmpl $0, %ecx
  113.     je konverzija
  114. saberi1:
  115.     addl niz(,%edi,4), %ebx #1 2 3 4 -> 1 3 6 10
  116.     cmpl %esi, %edi
  117.     je sledeci
  118.     incl %edi
  119.     jmp saberi1
  120. sledeci:
  121.     movl %ebx, niz1(,%esi,4)
  122.     movl $0, %edi
  123.     incl %esi
  124.     decl %ecx
  125.     movl $0, %ebx
  126.     jmp saberi
  127.    
  128. konverzija:
  129.    
  130. kraj:
  131.     movl $1, %eax
  132.     int $0x80
  133.    
  134.    
  135. greska1:
  136.     movl $4, %eax
  137.     movl $1, %ebx
  138.     movl $ulaz, %ecx
  139.     movl $ulaz_len, %edx
  140.     int $0x80
  141.     movl $1, %ebx
  142.     jmp kraj
  143.  
  144.  
  145.  
  146.  
  147.  
  148. ###
  149. #
  150. #
  151. #
  152. ##
  153.  
  154. #K1SR
  155. .section .data
  156. unesi_string: .ascii "Unesite niz: \0"
  157. unesi_string_len=.-unesi_string
  158. veca_parna: .ascii "Veca je aritmeticka sredina parnih brojeva!\n\0"
  159. veca_parna_len=.-veca_parna
  160. veca_neparna: .ascii "Veca je aritmeticka sredina neparnih brojeva!\n\0"
  161. veca_neparna_len=.-veca_neparna
  162. iste_su: .ascii "Iste su aritmeticke sredine partnih i neparnih brojeva!\n\0"
  163. iste_su_len=.-iste_su
  164. rezultat_greske0: .ascii "Rezultat greske je: 0\n\0"
  165. rezultat_greske0_len=.-rezultat_greske0
  166. rezultat_greske1: .ascii "Rezultat greske je: 1\n\0"
  167. rezultat_greske1_len=.-rezultat_greske1
  168. rezultat_greske2: .ascii "Rezultat greske je: 2\n\0"
  169. rezultat_greske2_len=.-rezultat_greske2
  170. rezultat_greske3: .ascii "Rezultat greske je: 3\n\0"
  171. rezultat_greske3_len=.-rezultat_greske3
  172. prekor: .ascii "Prekoracenje!\n\0"
  173. prekor_len=.-prekor
  174. neodg_operand: .ascii "Neodgovarajuci operand!\n\0"
  175. neodg_operand_len=.-neodg_operand
  176. prazan_string: .ascii "String je prazan\n\0"
  177. prazan_string_len=.-prazan_string
  178.  
  179. brojac_parnih: .long 0
  180. brojac_neparnih: .long 0
  181. privremena: .long 0
  182. dva: .long 2
  183. unos_stringa_max=51
  184. unos_stringa: .fill unos_stringa_max,1,0
  185. parni_niz: .fill 10,4,0
  186. neparni_niz: .fill 10,4,0
  187. baza: .long 10
  188. zbir_parnih: .long 0
  189. zbir_neparnih: .long 0
  190. .section .text
  191. .globl main
  192. main:
  193.     movl $4, %eax
  194.     movl $1, %ebx
  195.     movl $unesi_string, %ecx
  196.     movl $unesi_string_len, %edx
  197.     int $0x80
  198.        
  199.     movl $3, %eax
  200.     movl $0, %ebx
  201.     movl $unos_stringa, %ecx
  202.     movl $unos_stringa_max, %edx
  203.     int $0x80
  204.     #string u ecx-u
  205.    
  206.     movl $0, %eax
  207.     movl $0, %ebx
  208.     movl $0, %edx
  209.     movl %ecx, %esi
  210.     movl $0, %ecx
  211. glavna_petlja:
  212.     movb (%esi), %bl
  213.     cmpb $'\n', %bl
  214.     je predlogika
  215.     cmpb $32, %bl
  216.     jne nasao_broj
  217.     incl %esi
  218.     jmp glavna_petlja
  219. nasao_broj:
  220.     cmpb $'\n', %bl
  221.     je dodaj_u_niz
  222.     cmpb $'0', %bl
  223.     jl greska2
  224.     cmpb $'9', %bl 
  225.     jg greska2
  226.    
  227.    
  228.     subb $'0' ,%bl
  229.     movl $0, %edx  
  230.     mull baza
  231.     jc greska1 #prekoracenje
  232.     addl %ebx, %eax
  233.     jc greska1 #prekoracenje
  234.     incl %esi
  235.     movb (%esi), %bl
  236.     cmpb $32, %bl
  237.     jne nasao_broj
  238.    
  239. dodaj_u_niz:
  240.     movl $0, %edx
  241.     movl %eax, %edi
  242.     divl dva
  243.     cmpl $0, %edx
  244.     je paran_br
  245.     incl brojac_neparnih
  246.     movl %edi, neparni_niz(,%ecx,4)
  247.     incl %ecx
  248.     jmp dalje
  249. paran_br:
  250.     movl privremena, %edx
  251.     movl %edi, parni_niz(,%edx,4)
  252.     incl brojac_parnih
  253.     incl privremena
  254. dalje:
  255.     movl $0, %eax
  256.     cmpb $'\n', %bl
  257.     je predlogika
  258.     incl %esi
  259.     jmp glavna_petlja
  260.    
  261.    
  262. #################################################
  263. predlogika:
  264.     cmpl $unos_stringa, %esi
  265.     je greska3
  266.     movl $0, %esi
  267.     movl $0, %ecx #zbir parnih
  268.     movl $0, %edx #zbir neparnih
  269. logika:
  270.     cmpl $10, %esi
  271.     je sredina
  272.     addl parni_niz(,%esi,4), %ecx
  273.     jc greska1
  274.     addl neparni_niz(,%esi,4), %edx
  275.     jc greska1
  276.     incl %esi
  277.     jmp logika
  278.  
  279. sredina:
  280.  
  281.     movl %edx,%eax
  282.     movl $0, %edx
  283.     divl brojac_neparnih
  284.     movl %eax, %edi
  285.    
  286.     movl %ecx,%eax
  287.     movl $0, %edx
  288.     divl brojac_parnih
  289.     movl %eax, %ecx
  290.    
  291. ispitaj:
  292.     cmpl %ecx, %edi
  293.     ja vise_neparnih_brojeva
  294.     jb vise_parnih_brojeva
  295.    
  296.     movl $4, %eax
  297.     movl $1, %ebx
  298.     movl $iste_su, %ecx
  299.     movl $iste_su_len, %edx
  300.     int $0x80
  301.    
  302.     movl $4, %eax
  303.     movl $1, %ebx
  304.     movl $rezultat_greske0, %ecx
  305.     movl $rezultat_greske0_len, %edx
  306.     int $0x80
  307.     movl $0, %ebx
  308.     jmp kraj
  309.    
  310.  
  311. vise_neparnih_brojeva:
  312.     movl $4, %eax
  313.     movl $1, %ebx
  314.     movl $veca_neparna, %ecx
  315.     movl $veca_neparna_len, %edx
  316.     int $0x80
  317.    
  318.     movl $4, %eax
  319.     movl $1, %ebx
  320.     movl $rezultat_greske0, %ecx
  321.     movl $rezultat_greske0_len, %edx
  322.     int $0x80
  323.     movl $0, %ebx
  324.     jmp kraj
  325.    
  326. vise_parnih_brojeva:
  327.     movl $4, %eax
  328.     movl $1, %ebx
  329.     movl $veca_parna, %ecx
  330.     movl $veca_parna_len, %edx
  331.     int $0x80
  332.    
  333.     movl $4, %eax
  334.     movl $1, %ebx
  335.     movl $rezultat_greske0, %ecx
  336.     movl $rezultat_greske0_len, %edx
  337.     int $0x80
  338.     movl $0, %ebx
  339. kraj:
  340.     movl $1, %eax
  341.     int $0x80
  342.    
  343. greska1:
  344.     movl $4, %eax
  345.     movl $1, %ebx
  346.     movl $prekor, %ecx
  347.     movl $prekor_len, %edx
  348.     int $0x80
  349.    
  350.     movl $4, %eax
  351.     movl $1, %ebx
  352.     movl $rezultat_greske1, %ecx
  353.     movl $rezultat_greske1_len, %edx
  354.     int $0x80
  355.    
  356.     movl $1, %ebx
  357.     jmp kraj
  358.    
  359. greska2:
  360.    
  361.     movl $4, %eax
  362.     movl $1, %ebx
  363.     movl $neodg_operand, %ecx
  364.     movl $neodg_operand_len, %edx
  365.     int $0x80
  366.    
  367.     movl $4, %eax
  368.     movl $1, %ebx
  369.     movl $rezultat_greske2, %ecx
  370.     movl $rezultat_greske2_len, %edx
  371.     int $0x80
  372.    
  373.     movl $2, %ebx
  374.     jmp kraj
  375.    
  376. greska3:
  377.     movl $4, %eax
  378.     movl $1, %ebx
  379.     movl $prazan_string, %ecx
  380.     movl $prazan_string_len, %edx
  381.     int $0x80
  382.    
  383.     movl $4, %eax
  384.     movl $1, %ebx
  385.     movl $rezultat_greske3, %ecx
  386.     movl $rezultat_greske3_len, %edx
  387.     int $0x80
  388.    
  389.     movl $3, %ebx
  390.     jmp kraj
  391.    
  392.    
  393.     ####
  394. #
  395. #
  396. #
  397. #
  398. #
  399. #
  400. #
  401. #
  402.  
  403. #K1SR
  404. .section .data
  405. unesi_string: .ascii "Unesite izraz: \0"
  406. unesi_string_len=.-unesi_string
  407. rezultat_greske1: .ascii "greska1.\n\0" #prekoracenje
  408. rezultat_greske1_len=.-rezultat_greske1
  409. rezultat_greske2: .ascii "greska2.\n\0" #greska prilikom konverzije
  410. rezultat_greske2_len=.-rezultat_greske2
  411. suma_ispis: .ascii "Suma: \0"
  412. suma_ispis_len=.-suma_ispis
  413. sume_jednake: .ascii "Sume su jednake.\n\0"
  414. sume_jednake_len=.-sume_jednake
  415. suma_u_opsegu_manja: .ascii "Suma brojeva u opsegu je manja.\n\0"
  416. suma_u_opsegu_manja_len=.-suma_u_opsegu_manja
  417. suma_u_opsegu_veca: .ascii "Suma brojeva u opsegu je veca.\n\0"
  418. suma_u_opsegu_veca_len=.-suma_u_opsegu_veca
  419.  
  420. string_zbir_van_opsega: .fill 11,1,0
  421. string_zbir_van_opsega_len=.-string_zbir_van_opsega
  422. string_zbir_u_opsegu: .fill 11,1,0
  423. string_zbir_u_opsegu_len=.-string_zbir_u_opsegu
  424.  
  425. privremena: .long 0
  426. unos_stringa_max=101
  427. unos_stringa: .fill unos_stringa_max,1,0
  428. zbir_van_opsega: .long 0
  429. zbir_u_opsegu: .long 0
  430. baza: .long 10
  431. baza16: .long 16
  432. donja_granica: .long 0
  433. gornja_granica: .long 0
  434. #parni_niz: .fill 10,4,0
  435. #neparni_niz: .fill 10,4,0
  436. .section .text
  437. .globl main
  438. main:
  439.    
  440.     movl $4, %eax
  441.     movl $1, %ebx
  442.     movl $unesi_string, %ecx
  443.     movl $unesi_string_len, %edx
  444.     int $0x80
  445.    
  446.     movl $3, %eax
  447.     movl $0, %ebx
  448.     movl $unos_stringa, %ecx
  449.     movl $unos_stringa_max, %edx
  450.     int $0x80
  451.     movl %ecx, %esi
  452.     movl $0, %eax
  453.     movl $0, %ebx
  454.     movl $0, %edx #ecx i edi slobodni za sad
  455.     incl %esi
  456. za_donju_granicu:
  457.     movb (%esi), %bl
  458.     cmpb $',' , %bl
  459.     je pred_gornju_granicu
  460.     subb $'0' , %bl
  461.     movl $0, %edx
  462.     mull baza
  463.     jc greska2
  464.     addl %ebx, %eax
  465.     jc greska2
  466.     incl %esi
  467.     jmp za_donju_granicu
  468.    
  469. pred_gornju_granicu:
  470.     movl %eax, donja_granica
  471.     movl $0, %eax
  472.     incl %esi
  473. za_gornju_granicu:
  474.     movb (%esi), %bl
  475.     cmpb $',' , %bl
  476.     je pred_glavna_petlja
  477.     subb $'0' , %bl
  478.     movl $0, %edx
  479.     mull baza
  480.     jc greska2
  481.     addl %ebx, %eax
  482.     jc greska2
  483.     incl %esi
  484.     jmp za_gornju_granicu
  485.    
  486. pred_glavna_petlja:
  487.     movl %eax, gornja_granica
  488.     movl $0, %eax
  489.     addl $3, %esi
  490. glavna_petlja:
  491.     movb (%esi), %bl   
  492.     cmpb $',' , %bl
  493.     je dodaj_u_niz
  494.     subb $'0' , %bl
  495.     movl $0, %edx
  496.     mull baza
  497.     jc greska2
  498.     addl %ebx, %eax
  499.     jc greska2
  500.     incl %esi
  501.     jmp glavna_petlja
  502.    
  503. dodaj_u_niz:
  504.     cmpl donja_granica, %eax
  505.     jb van_opsega  
  506.     cmpl gornja_granica, %eax
  507.     ja van_opsega
  508.     addl %eax, zbir_u_opsegu
  509.     jc greska1
  510.     incl %esi
  511.     movl $0, %eax
  512.     cmpb $'}' , (%esi)
  513.     je predlogika
  514.     jmp glavna_petlja
  515.  
  516. van_opsega:
  517.     addl %eax, zbir_van_opsega
  518.     jc greska1
  519.     incl %esi
  520.     movl $0, %eax
  521.     cmpb $'}' , (%esi)
  522.     je predlogika
  523.     jmp glavna_petlja
  524. ###############################
  525. ###########################
  526. ####################
  527. ######################################################
  528. #345/10 edx=5 +48
  529. predlogika:
  530.     movl zbir_van_opsega, %eax
  531.     movl $0, %edx
  532.     movl $string_zbir_van_opsega, %ecx
  533.     movl $string_zbir_u_opsegu, %edi
  534.     movb $'0' , (%ecx)
  535.     incl %ecx
  536.     movb $'X' , (%ecx)
  537.     incl %ecx
  538.     movb $'0' , (%edi)
  539.     incl %edi
  540.     movb $'X' , (%edi)
  541.     incl %edi
  542. ##################################
  543. suma_van_opsega:
  544.     cmpl $0, %eax
  545.     je pred_obrtanje1
  546.     divl baza16
  547.     addb $'0' , %dl
  548.     cmpb $'9' , %dl
  549.     jle dalje_suma_van_opsega
  550.     addb $7 , %dl
  551. dalje_suma_van_opsega: 
  552.     movb %dl, (%ecx)
  553.     incl %ecx
  554.     movl $0, %edx
  555.     jmp suma_van_opsega
  556.  
  557. pred_obrtanje1:
  558.     movb $'\n' , (%ecx)
  559.     movl $string_zbir_van_opsega, %ebx
  560.     incl %ebx
  561.     incl %ebx
  562.     decl %ecx
  563. obrtanje1:
  564.     movb (%ecx), %dl
  565.     movb (%ebx), %dh
  566.     movb %dl, (%ebx)
  567.     movb %dh, (%ecx)
  568.     incl %ebx
  569.     decl %ecx
  570.     cmpl %ebx, %ecx
  571.     ja obrtanje1
  572. ################################################## 
  573. predsuma:
  574.    
  575.     #movb $'\n' , (%ecx)
  576.     movl zbir_u_opsegu, %eax
  577.     movl $0, %edx
  578. suma_u_opsegu:
  579.     cmpl $0, %eax
  580.     je pred_obrtanje2
  581.     divl baza16
  582.     addb $'0' , %dl
  583.     cmpb $'9' , %dl
  584.     jle dalje_suma_u_opsegu
  585.     addb $7 , %dl  
  586. dalje_suma_u_opsegu:
  587.     movb %dl, (%edi)
  588.     incl %edi
  589.     movl $0, %edx
  590.     jmp suma_u_opsegu
  591.  
  592.  
  593. pred_obrtanje2:
  594.     movb $'\n' , (%edi)
  595.     movl $string_zbir_u_opsegu, %ebx
  596.     incl %ebx
  597.     incl %ebx
  598.     decl %edi
  599. obrtanje2:
  600.     movb (%edi), %dl
  601.     movb (%ebx), %dh
  602.     movb %dl, (%ebx)
  603.     movb %dh, (%edi)
  604.     incl %ebx
  605.     decl %edi
  606.     cmpl %ebx, %edi
  607.     ja obrtanje2
  608. logika:
  609.     #movb $'\n' , (%edi)
  610.     movl zbir_van_opsega, %ecx
  611.     cmpl %ecx, zbir_u_opsegu
  612.     ja vise_u_opsegu
  613.     jb manje_u_opsegu
  614.    
  615.     movl $4, %eax
  616.     movl $1, %ebx
  617.     movl $sume_jednake, %ecx
  618.     movl $sume_jednake_len, %edx
  619.     int $0x80
  620.    
  621.     movl $4, %eax
  622.     movl $1, %ebx
  623.     movl $suma_ispis, %ecx
  624.     movl $suma_ispis_len, %edx
  625.     int $0x80
  626.    
  627.     movl $4, %eax
  628.     movl $1, %ebx
  629.     movl $string_zbir_van_opsega, %ecx
  630.     movl $string_zbir_van_opsega_len, %edx
  631.     int $0x80
  632.     movl $0, %ebx
  633.     jmp kraj
  634. vise_u_opsegu:
  635.     movl $4, %eax
  636.     movl $1, %ebx
  637.     movl $suma_u_opsegu_veca, %ecx
  638.     movl $suma_u_opsegu_veca_len, %edx
  639.     int $0x80
  640.     movl $4, %eax
  641.     movl $1, %ebx
  642.     movl $suma_ispis, %ecx
  643.     movl $suma_ispis_len, %edx
  644.     int $0x80  
  645.     movl $4, %eax
  646.     movl $1, %ebx
  647.     movl $string_zbir_van_opsega, %ecx
  648.     movl $string_zbir_van_opsega_len, %edx
  649.     int $0x80
  650.     movl $0, %ebx
  651.     jmp kraj
  652. manje_u_opsegu:
  653.     movl $4, %eax
  654.     movl $1, %ebx
  655.     movl $suma_u_opsegu_manja, %ecx
  656.     movl $suma_u_opsegu_manja_len, %edx
  657.     int $0x80
  658.     movl $4, %eax
  659.     movl $1, %ebx
  660.     movl $suma_ispis, %ecx
  661.     movl $suma_ispis_len, %edx
  662.     int $0x80  
  663.     movl $4, %eax
  664.     movl $1, %ebx
  665.     movl $string_zbir_u_opsegu, %ecx
  666.     movl $string_zbir_u_opsegu_len, %edx
  667.     int $0x80
  668.     movl $0, %ebx
  669.  
  670. kraj:
  671.     movl $1, %eax
  672.     int $0x80
  673.    
  674. greska1:
  675.     movl $4, %eax
  676.     movl $1, %ebx
  677.     movl $rezultat_greske1, %ecx
  678.     movl $rezultat_greske1_len, %edx
  679.     int $0x80
  680.     movl $1, %ebx
  681.     jmp kraj
  682.  
  683. greska2:
  684.     movl $4, %eax
  685.     movl $1, %ebx
  686.     movl $rezultat_greske2, %ecx
  687.     movl $rezultat_greske2_len, %edx
  688.     int $0x80
  689.     movl $1, %ebx
  690.  
  691.    
  692.    
  693.    
  694.    
  695.     ###
  696. #
  697. #
  698. #
  699. #
  700. #
  701.  
  702. .section .data
  703. pocetni_ispis: .ascii "Unesite izraz: \0"
  704. pocetni_ispis_len=.-pocetni_ispis
  705. greska1_string: .ascii "GRESKA: Problem prilikom konverzije brojeva.\n\0"
  706. greska1_string_len=.-greska1_string
  707. greska2_string: .ascii "GRESKA: Prekoracenje kod provere uslova.\n\0"
  708. greska2_string_len=.-greska2_string
  709. ispis1: .ascii "Ukupno brojeva koji ispunjavaju uslov: \0"
  710. ispis1_len=.-ispis1
  711.  
  712. unos_max=101
  713. unos: .fill unos_max,1,0
  714.  
  715. broj_string: .fill 12,1,0
  716. broj_string_len=.-broj_string
  717.  
  718. brojac_el: .long 0
  719. niz1: .fill 21,4,0
  720. baza: .long 10
  721. baza16: .long 16
  722. n: .long 0
  723. m: .long 0
  724. brojac: .long 0
  725. .section .text
  726. .globl main
  727. main:
  728.     movl $4, %eax
  729.     movl $1, %ebx
  730.     movl $pocetni_ispis, %ecx
  731.     movl $pocetni_ispis_len, %edx
  732.     int $0x80
  733.        
  734.     movl $3, %eax
  735.     movl $0, %ebx
  736.     movl $unos, %ecx
  737.     movl $unos_max, %edx
  738.     int $0x80
  739.        
  740.     movl $0, %eax
  741.     movl $0, %ebx
  742.     movl $0, %edx
  743.     movl %ecx, %esi #esi je adresa
  744.     movl $0, %ecx
  745.     movl $0, %edi
  746.     #ecx i edi su slobodni
  747.     addl $2, %esi
  748. uzmi_vr_n:
  749.     movb (%esi), %bl
  750.     cmpb $',' , %bl
  751.     je pred_uzmi
  752.     cmpb $'0' , %bl
  753.     jl greska1
  754.     cmpb $'9' , %bl
  755.     jg greska1
  756.     subb $'0' , %bl
  757.     movl $0, %edx
  758.     mull baza
  759.     jc greska1
  760.     addl %ebx, %eax
  761.     jc greska1
  762.     incl %esi
  763.     jmp uzmi_vr_n
  764. pred_uzmi:
  765.     movl %eax, n
  766.     movl $0, %eax
  767.     addl $4, %esi
  768. uzmi_vr_m:
  769.     movb (%esi), %bl
  770.     cmpb $',' , %bl
  771.     je pred_petlja
  772.     cmpb $'0' , %bl
  773.     jl greska1
  774.     cmpb $'9' , %bl
  775.     jg greska1
  776.     subb $'0' , %bl
  777.     movl $0, %edx
  778.     mull baza
  779.     jc greska1
  780.     addl %ebx, %eax
  781.     jc greska1
  782.     incl %esi
  783.     jmp uzmi_vr_m
  784. ############################################################   
  785.    
  786. pred_petlja:
  787.     movl %eax, m
  788.     movl $0, %eax
  789.     addl $7, %esi  
  790.    
  791. glavna_petlja:
  792.     movb (%esi), %bl
  793.     cmpb $'}' , %bl
  794.     je pred_konverzija
  795.     cmpb $',' , %bl
  796.     je pod_petlja
  797.     cmpb $'0' , %bl
  798.     jl greska1      #123 1(49-48=1) eax=0*10=0+1   1*10=10+2=12
  799.     cmpb $'9' , %bl
  800.     jg greska1
  801.     subb $'0' , %bl
  802.     movl $0, %edx
  803.     mull baza
  804.     jc greska1
  805.     addl %ebx, %eax
  806.     jc greska1
  807.     incl %esi
  808.     jmp glavna_petlja
  809. pod_petlja:
  810.     movl %eax, niz1(,%edi,4)
  811.     incl brojac_el
  812.     cmpb $'}' , 2(%esi)
  813.     je pred_logika
  814.     incl %edi
  815.     movl $0, %eax
  816.     incl %esi
  817.     incl %esi
  818.     jmp glavna_petlja
  819. ###################################################
  820. pred_logika:
  821.     movl $1, %edi
  822.     movl $0, %eax
  823.     movl $0, %ebx
  824.     movl $0, %edx
  825.     movl $0, %ecx
  826.     cmpl $3, brojac_el
  827.     jb pred_konverzija
  828.     subl $2, brojac_el
  829. logika:
  830.     cmpl $0, brojac_el
  831.     je pred_konverzija
  832.     movl niz1-4(,%edi,4), %eax
  833.     movl niz1+4(,%edi,4), %ebx
  834.     movl $0, %edx
  835.     mull n
  836.     jc greska2
  837.     subl m, %ebx
  838.     jc greska2
  839.     cmpl %eax, niz1(,%edi,4)
  840.     jb dalje
  841.     cmpl %ebx, niz1(,%edi,4)   
  842.     ja dalje
  843.     incl brojac
  844.     decl brojac_el
  845.     incl %edi
  846.     movl $0, %eax
  847.     movl $0, %ebx
  848.     jmp logika
  849. dalje:
  850.     incl %edi
  851.     decl brojac_el
  852.     movl $0, %eax
  853.     movl $0, %ebx
  854.     jmp logika
  855. ######################################################
  856.    
  857. pred_konverzija:
  858.     movl $broj_string, %esi
  859.     movl brojac, %eax   #31/10 eax=3 edx=1
  860.     movl $0, %ebx
  861.     movl $0, %edx
  862.     movl $0, %ecx
  863.     movl $'0' , (%esi)
  864.     incl %esi
  865.     movl $'X' , (%esi)
  866.     incl %esi
  867.     movl %esi, %edi
  868.    
  869. konverzija:
  870.     cmpl $0, %eax
  871.     je predobrtanje
  872.     movl $0, %edx
  873.     divl baza16
  874.     addl $'0' , %edx
  875.     cmpl $'9' , %edx
  876.     jle preskoci
  877.     addl $7, %edx
  878. preskoci:
  879.     movb %dl, (%esi)
  880.     incl %esi
  881.     jmp konverzija
  882.    
  883. predobrtanje:
  884.     cmpl $0, brojac
  885.     jne predobrtanje1
  886.     movb $'0' , (%esi)
  887.     incl %esi
  888. predobrtanje1:
  889.     movb $'\n' , (%esi)
  890.     decl %esi
  891.     movl $0, %edx
  892. obrtanje:
  893.     movb (%esi), %dl
  894.     movb (%edi), %dh
  895.     movb %dh, (%esi)
  896.     movb %dl, (%edi)
  897.     decl %esi
  898.     incl %edi
  899.     cmpl %esi, %edi
  900.     jb obrtanje
  901.  
  902.     movl $4, %eax
  903.     movl $1, %ebx
  904.     movl $ispis1, %ecx
  905.     movl $ispis1_len, %edx
  906.     int $0x80
  907.    
  908.     movl $4, %eax
  909.     movl $1, %ebx
  910.     movl $broj_string, %ecx
  911.     movl $broj_string_len, %edx
  912.     int $0x80
  913.     movl $0, %ebx
  914. ##############################################################
  915. kraj:
  916.     movl $1, %eax
  917.     int $0x80
  918.    
  919. greska1:
  920.     movl $4, %eax
  921.     movl $1, %ebx
  922.     movl $greska1_string, %ecx
  923.     movl $greska1_string_len, %edx
  924.     int $0x80
  925.     movl $1, %ebx
  926.     jmp kraj
  927.    
  928. greska2:
  929.     movl $4, %eax
  930.     movl $1, %ebx
  931.     movl $greska2_string, %ecx
  932.     movl $greska2_string_len, %edx
  933.     int $0x80
  934.     movl $1, %ebx
  935.     jmp kraj
  936.    
  937.  
  938.  
  939.  
  940.  
  941. #####################
  942. #
  943. #
  944. #
  945. #
  946.  
  947. #casovnik.s
  948. .section .data
  949. ispis1: .ascii "Unesite vreme: \0"
  950. ispis1_len=.-ispis1
  951. greska11: .ascii "Greska1!\n\0"
  952. greska11_len=.-greska11
  953. greska22: .ascii "Greska2!\n\0"
  954. greska22_len=.-greska22
  955. greska33: .ascii "Greska3!\n\0"
  956. greska33_len=.-greska33
  957.  
  958. unos_max=9
  959. unos: .fill unos_max,1,0
  960.  
  961. string_max=10
  962. string: .fill string_max,1,0
  963.  
  964. sati: .long 0
  965. minuti: .long 0
  966.  
  967. baza: .long 10
  968. .section .text
  969.  
  970. .globl main
  971. main:
  972.     movl $4, %eax
  973.     movl $1, %ebx
  974.     movl $ispis1, %ecx
  975.     movl $ispis1_len, %edx
  976.     int $0x80
  977.    
  978.     movl $3, %eax
  979.     movl $0, %ebx
  980.     movl $unos, %ecx
  981.     movl $unos_max, %edx
  982.     int $0x80
  983.    
  984.     movl %ecx, %esi
  985.     movl $0, %eax
  986.     movl $0, %ebx
  987.     movl $0, %edx
  988.     #slobodni su edi i ecx
  989.    
  990. nula_jedan:
  991.     movb (%esi), %bl
  992.     cmpb $'0' , %bl
  993.     jl greska1
  994.     cmpb $'1' , %bl
  995.     jg greska1
  996.     subb $'0' , %bl
  997.     #mull baza
  998.     addl %ebx, %eax
  999.     jc greska2
  1000.  
  1001.     movl $0, %edx
  1002.     incl %esi
  1003.     movb (%esi), %bl
  1004.     cmpb $'0' , %bl
  1005.     jl greska1
  1006.     cmpb $'9' , %bl
  1007.     jg greska1
  1008.     subb $'0' , %bl
  1009.     mull baza
  1010.     addl %ebx, %eax
  1011.     jc greska2
  1012.    
  1013.     cmpl $11, %eax
  1014.     jg greska3
  1015.  
  1016.     movl %eax, sati
  1017.     movl $0, %eax
  1018.     movl $0, %edx
  1019.     addl $2, %esi
  1020.     movb (%esi), %bl
  1021.     cmpb $'0' , %bl
  1022.     jl greska1
  1023.     cmpb $'5' , %bl
  1024.     jg greska1
  1025.     subb $'0' , %bl
  1026.     #mull baza
  1027.     addl %ebx, %eax
  1028.     jc greska2
  1029.    
  1030.     movl $0, %edx
  1031.     incl %esi
  1032.     movb (%esi), %bl
  1033.     cmpb $'0' , %bl
  1034.     jl greska1
  1035.     cmpb $'9' , %bl
  1036.     jg greska1
  1037.     subb $'0' , %bl
  1038.     mull baza
  1039.     addl %ebx, %eax
  1040.     jc greska2
  1041.    
  1042.     movl %eax, minuti
  1043.     cmpl $59, %eax
  1044.     jg greska3
  1045.    
  1046.     incl %esi
  1047.     incl %esi
  1048.    
  1049.     movb (%esi), %bl   
  1050.     cmpb $'a' , %bl
  1051.     je prepodne1
  1052.     cmpb $'p' , %bl
  1053.     je poslepodne1
  1054.     jmp greska3
  1055. ##################################################################
  1056. prepodne1:
  1057.     movl $string, %esi
  1058.     movl %esi, %edi
  1059.     movl sati, %eax
  1060.     movl $0, %edx
  1061.     cmpl $0, %eax
  1062.     jne prepodne_provera
  1063.     movb $'0' , (%esi)
  1064.     incl %esi
  1065.     movb $'0' , (%esi)
  1066.     incl %esi
  1067.     jmp obrni1
  1068. prepodne_provera:
  1069.     cmpl $10, %eax
  1070.     jge prepodne
  1071.     movb $'0' , (%esi)
  1072.     incl %esi
  1073.     addl $48, %eax
  1074.     movb %al, (%esi)
  1075.     incl %esi
  1076.     movb $':' , (%esi)
  1077.     decl %esi
  1078.     jmp petlja_minuti1 
  1079. prepodne:
  1080.     cmpl $0, %eax
  1081.     je obrni1
  1082.     movl $0, %edx  
  1083.     divl baza
  1084.     addb $48, %dl
  1085.     movb %dl, (%esi)
  1086.     incl %esi
  1087.     jmp prepodne
  1088. obrni1:
  1089.     movb $':' , (%esi)
  1090.     decl %esi
  1091.     movb (%esi), %dl
  1092.     movb (%edi), %dh
  1093.     movb %dh, (%esi)
  1094.     movb %dl, (%edi)
  1095.     jmp petlja_minuti1
  1096. ##############################################################################
  1097.  
  1098. poslepodne1:
  1099.     movl $string, %esi
  1100.     movl %esi, %edi
  1101.     movl sati, %eax
  1102.     addl $12, %eax
  1103.     movl $0, %edx
  1104. poslepodne:
  1105.     cmpl $0, %eax
  1106.     je obrni3
  1107.     movl $0, %edx
  1108.     divl baza
  1109.     addb $48, %dl
  1110.     movb %dl, (%esi)
  1111.     incl %esi
  1112.     jmp poslepodne
  1113. obrni3:
  1114.     movb $':' , (%esi)
  1115.     decl %esi
  1116.     movb (%esi), %dl
  1117.     movb (%edi), %dh
  1118.     movb %dh, (%esi)
  1119.     movb %dl, (%edi)
  1120.     jmp petlja_minuti1
  1121.    
  1122. #################################################################
  1123.  
  1124. petlja_minuti1:
  1125.     addl $2, %esi
  1126.     movl %esi, %edi
  1127.     movl minuti, %eax
  1128.     movl $0, %edx
  1129.    
  1130.     cmpl $0, %eax
  1131.     jne petlja_minuti_provera
  1132.     movb $'0' , (%esi)
  1133.     incl %esi
  1134.     movb $'0' , (%esi)
  1135.     jmp dodaj_n1
  1136. petlja_minuti_provera:
  1137.     cmpl $10, %eax
  1138.     jge petlja_minuti
  1139.     movb $'0' , (%esi)
  1140.     incl %esi
  1141.     addl $48, %eax
  1142.     movb %al, (%esi)
  1143.     incl %esi
  1144.     movb $'\n' , (%esi)
  1145.     jmp ispisi_ga
  1146.    
  1147. petlja_minuti:
  1148.     cmpl $0, %eax
  1149.     je obrni2
  1150.     movl $0, %edx  
  1151.     divl baza
  1152.     addb $48, %dl
  1153.     movb %dl, (%esi)
  1154.     incl %esi
  1155.     jmp petlja_minuti
  1156. obrni2:
  1157.     decl %esi
  1158.     movb (%esi), %dl
  1159.     movb (%edi), %dh
  1160.     movb %dh, (%esi)
  1161.     movb %dl, (%edi)
  1162.     incl %edi
  1163.     incl %edi
  1164.     jmp dodaj_n
  1165. dodaj_n1:
  1166.     movl $string, %edi
  1167.     addl $5, %edi
  1168. dodaj_n:
  1169.     movb $'\n' , (%edi)
  1170.  
  1171. ispisi_ga: 
  1172.     movl $4, %eax
  1173.     movl $1, %ebx
  1174.     movl $string, %ecx
  1175.     movl $string_max, %edx
  1176.     int $0x80
  1177.     movl $0, %ebx
  1178.    
  1179. kraj:
  1180.     movl $1, %eax
  1181.     int $0x80
  1182.    
  1183.    
  1184. greska1:
  1185.     movl $4, %eax
  1186.     movl $1, %ebx
  1187.     movl $greska11, %ecx
  1188.     movl $greska11_len, %edx
  1189.     int $0x80
  1190.     movl $1, %ebx
  1191.     jmp kraj
  1192.    
  1193. greska2:
  1194.     movl $4, %eax
  1195.     movl $1, %ebx
  1196.     movl $greska22, %ecx
  1197.     movl $greska22_len, %edx
  1198.     int $0x80
  1199.     movl $2, %ebx
  1200.     jmp kraj
  1201.    
  1202. greska3:
  1203.     movl $4, %eax
  1204.     movl $1, %ebx
  1205.     movl $greska33, %ecx
  1206.     movl $greska33_len, %edx
  1207.     int $0x80
  1208.     movl $3, %ebx
  1209.     jmp kraj   
  1210.    
  1211.    
  1212.    
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement