Como acessar uma matriz de caracteres e alterar letras minúsculas para maiúsculas e vice-versa

Atualmente, estou trabalhando em um projeto de classe para a Structured Computer Organization usando um processador x86. O valor que estou acessando é um caractere de 1 byte, mas não sei como compará-lo com maiúsculas. Eles disseram usar uma tabela ASCII do formato hexadecimal, mas não tenho certeza de como comparar os doi

void changeCase (char char_array[], int array_size ) {
    __asm {
            // BEGIN YOUR CODE HERE

        mov eax, char_array;        //eax is base image
        mov edi, 0;

    readArray:
        cmp edi, array_size;
        jge  exit;
        mov ebx, edi;           //using ebx as offset
        shl ebx, 2;
        mov cl, [eax + ebx];    //using ecx to be the storage register

    check:
        //working on it
        cmp cl, 0x41;       //check if cl is <= than ASCII value 65 (A)
        jl next_indx;
        cmp cl, 0x7A;       //check if cl is >= than ASCII value 122 (z)
        jg next_indx;
        cmp cl, 'a';
        jl convert_down;
        jge convert_up;


    convert_down:
        or cl, 0x20;        //make it lowercase
        jmp write;

    convert_up:
        and cl, 0x20;       //make it uppercase
        jmp write;

    write:
        mov byte ptr [eax + ebx], cl    //slight funky town issue here,

    next_indx:
        inc edi;

    exit:
        cmp edi, array_size;
        jl readArray;

    mov char_array, eax;
            // END YOUR CODE HERE
    }
}

Qualquer coisa ajuda neste momento. Agradeço antecipadamente a ajuda

edit 1:

Obrigado por todas as sugestões e pontos de clareza, editei meu código para refletir as alterações. Algum problema com a violação de acesso agora.

edit 2 (+):

Obrigado pelos olhos úteis pessoas. Ainda estou conseguindo traduzir todas as letras agora.

questionAnswers(5)

yourAnswerToTheQuestion