All pastes #297164 Raw Edit

numOfHi

public text v1 · immutable
#297164 ·published 2006-12-30 22:09 UTC
rendered paste body
;funkce vracejici pocet velkych pismen v retezci, nejedna se o retezec ukonceny znakem \0
;prototyp funkce v C: int numOfHi(char *inputString, int strLen);

   global numOfHi

numOfHi:
   push  ebp      ;puvodni ebp:4, cs:2, ip:2, *inputString:4, strLen:4
   mov   ebp,esp

   ;volani porovnavani - provede se tolikrat kolik je hodnota promene strLen
   push  ecx
   push  edi
   push  ebx
   push  edx
   xor   edx,edx
   xor   ebx,ebx
   mov   edi,[ebp+8] ;inputString
   mov   ecx, dword[ebp+12]   ;strLen
cmp_loop:
   ;zavolani samotneho porovnani
   mov   al, byte[edi+ebx] ;dalsi znak
   sub   esp,1
   mov   [ss:esp], al   ;sup do zasobniku
   call  isHi
   add   esp,1 ;vraceni zasobniku do puvodniho stavu
   ;jestlize je pismeno velke je navratova hodnota funkce isHi nenulova
   cmp   eax,0
   je    numOfHi_neni_velke
   inc   edx   ;pocitadlo velkych pismen
numOfHi_neni_velke:
   inc   ebx   ;index
   loop  cmp_loop
   mov   eax,edx  ;navratova hodnota
   pop   edx
   pop   ebx
   pop   edi
   pop   ecx

   pop   ebp
   ret

isHi:
   ;porovnani jestli je velky
   push  ebp
   mov   ebp,esp  ;puvodni ebp:4, cs:2, ip:2, znak:1
   mov   al,byte[ebp+8] ;znak
   cmp   al,'A'
   jb    isHi_neni_velke
   cmp   al,'Z'
   ja    isHi_neni_velke

   mov   eax,1 ;je velke
   jmp   isHi_end

isHi_neni_velke:
   xor   eax,eax

isHi_end:
   pop   ebp
   ret