;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