c - Assembly 32bit - compare char -


i have c program calls function written in 32bit assembly check if input character or number, return 1 else return 0. i've done wrong because comparison return me same result.

here c code:

#include <stdio.h> #include <stdlib.h>  int aisalnum(int *ascii);  //char atoupper(char *a); //char astripnoalnum(char str[]);  int main(int argc, char **argv) {   char input;   int a;   printf("\npremi un tasto: ");   scanf("%c",&input);    = (int)(input);    int result = aisalnum(&a); //  printf("\nassembly ritorna: %d",result);   if(result == 1)     {       printf("\nil carattere e' una lettera o un numero\n");     }else{       printf("\n\nil carattere non e' ne lettera ne numero\n");     }    return 0; } 

and here assembly function:

extern printf  global aisalnum global atoupper global astripnoalnum  ;----------------------------------------------;  ;la funzione riceve un parametro; ;verifica se è una lettera o un numero; ;e ritorna 1, altrimenti ritorna 0; ;----------------------------------------------;  aisalnum:     push    ebp     ;salvo ebp     mov ebp,esp     ;carico lo stack pointer nel base pointer      xor ebx,ebx     ;azzero il registro nel quale poi     mov ebx,[ebp+8] ;recupero il parametro inserito     push    ebx     call    printf     pop eax      cmp ebx,48      ;verifico se il carattere ottenuto è maggiore di 48(zero)     jae up_o        ;e salto up_o (up of zero);     jmp none        ;se è minore non è ne lettera ne numero  up_o:   cmp ebx,57      ;verifico che il carattere sia minore o uguale di 57(nove)     jbe num     ;e salto num (il carattere è un numero)     jmp     ver_c       ;altrimenti verifico se è una lettera  ver_c:  cmp ebx,65      ;verifico se il carattere è maggiore o uguale di 65(a)     jae up_a        ;e salto ad up_a (up of 'a')     jmp     none        ;altrimenti non è nemmeno una lettera e salto  up_a:   cmp ebx,90      ;verifico se il carattere è minore o uguale di 90(z)     jbe char        ;e salto char (il carattere è una lettera)     jmp min     ;altrimenti potrebbe essere una lettera minuscola  min:    cmp ebx,97      ;verifico se è maggiore ouguale di 97(a)     jae up_a        ;e salto ad up_a (up of 'a')  up_a:   cmp ebx,122     ;verifico se è minore o uguale 122(z)     jbe char        ;e salto char (il carattere è una lettera)     jmp none        ;altrimenti non è un carattere e salto none  none:   mov eax,2       ;il carattere non è ne lettera ne numero     leave     ret         ;carico 0 in eax e termino  char:   mov eax,1       ;il carattere è una lettera qundi termino     leave     ret  num:    mov eax,1       ;il carattere è un numero quindi termino     leave     ret 

i've tried use ascii's hex value of char , char function jump 'none' , returns 0.

what wrong?

you're calling function address of a argument. when mov ebx,[ebp+8] you're getting address, not value stored @ address.

before first cmp should add mov ebx, [ebx] value of a (just don't add before call printf, because cause printf fail).


Comments

Popular posts from this blog

c++ - Difference between pre and post decrement in recursive function argument -

c# - Retrieve google contact -

javascript - How to insert selected radio button value into table cell -