Cómo acceder a una matriz de caracteres y cambiar letras minúsculas a mayúsculas, y viceversa

Actualmente estoy trabajando en un proyecto de clase para Structured Computer Organization usando un procesador x86. El valor al que estoy accediendo es un carácter de 1 byte, pero no sé cómo compararlo con mayúsculas. Dijeron usar una tabla ASCII del formato hexadecimal, pero no estoy seguro de cómo comparar los dos.

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
    }
}

Cualquier cosa ayuda en este punto. ¡Gracias por adelantado por la ayuda

editar 1:

Gracias por todas las sugerencias y puntos de claridad, edité mi código para reflejar el cambio. Algún problema con la infracción de acceso ahora.

editar 2 (+):

Gracias por los ojos útiles personas. Todavía estoy llegando a traducir todas las letras ahora.

Respuestas a la pregunta(5)

Su respuesta a la pregunta