Creаte аn HLA functiоn thаt lооps through a single string argument and counts all the characters that are not capital Z, returning this value in AL. This function should have the following signature:procedure countNotZs( stringData : dword ); @nodisplay; @noframe;This function should return into AL an int8 value which in every case will be zero or more. To receive full credit, your endsWithZ( ) function must not allocate any storage. You must use the utility functions gets and puts provided here by downloading this file. Unzip it to find the .hla file inside. These are the some of the same routines you used in Unit 15. Once you acquire the file, you can include it in your code by saying: #include( "cs17string.hla" );Your function should replicate the following C code:bool countNotZs( char * stringData ){ int i = 0; char letter = ‘ ‘; int count = 0; while ( stringData[ i ] != NULL ) { // loop looking for anything that isn't a Z letter = stringData[ i ]; i = i + 1; if (letter != 'Z') { count = count + 1; } } return( count );} IN ORDER TO RECEIVE FULL CREDIT, YOU MUST USE THE TEMPLATE SOLUTION SHOWN BELOW. Of course, you will need to add code to the function to implement the desired algorithm explained above. In addition, you will need to push the parameters to the function. // String Parameter Template Solution For CS 17 Final// CS 17 Students must use this template as the basis for their solution.// Please look at the two TODO: notes below program StringProgram;#include( "stdlib.hhf" );// The file cs17string.hla is downloadable from the hyperlink shown above.// Place it in the same folder as this hla file you are working on #include( "cs17string.hla" ); static stringData : dword; answer : int8; // TODO: CS 17 Students add code below to implement this function// Several hints are supplied procedure countNotZs( stringData : dword ); @nodisplay; @noframe;staticdReturnAddress : dword;begin countNotZs;// TODO: CS 17 Students will need to preserve registerspop( dReturnAddress ); // TODO: CS 17 Students need to get stringData off the stack // push back the return addresspush( dReturnAddress ); // preserve registers // begin function implementation // leave the answer in EAX // restore the registers used ret(); end countNotZs; begin StringProgram; stdout.put( "Please enter a string to process", nl );// this code allocates a string of size 80mov( @size( int8 ), AL );mov( 80, BL );inc( BL );mul( BL );mov( 0, EBX );mov( AX, BX );malloc( EBX );mov( EAX, stringData );// let's try reading a value into the stringmov( stringData, EAX );push( EAX );mov( 80, CX );push( CX );call gets;// print the stringstdout.put( "----> here is the string you entered: " );mov( stringData, EAX );push( EAX );call puts;stdout.newln();// initialize EAX before calling the function.mov( 0, EAX ); // TODO: CS 17 Students need to pass a string parameter to the function call countNotZs;mov( AL, answer ); // show the resultsstdout.put( "after countNotZs --- result=" );stdout.put( answer );stdout.newln();// return what you malloc'edfree( stringData ); end StringProgram;