Autor
|
Tema: Ayuda con DEBUG MS-DOS (Leído 2,250 veces)
|
Ghio97
Desconectado
Mensajes: 9
|
Hola tengo una pregunta, tengo mi codigo en debug que convierte una cadena de letras de minusculas a mayusculas pero quiero saber como seria el caso en el que si tienes una cadena con minusculas y mayusculas las convierta en su contrario, apenas estoy empezando y no me a quedado claro aqui mi porgrama
-e ds:0200 "hola$" -a 0100 0100:mov si, 0200 0103: mov cx,0a 0106:mov al,[si] 0108:and al,df 010a:mov dl,al 010c:mov ah,02 010e: int 21 0110:inc si 0111: loop 0106 -g 0113 HOLA
|
|
|
En línea
|
|
|
|
Serapis
|
Si tomas el código de las letras mayúsculas y minúsculas, verás que la diferencia entre ellas es de 32, es decir cambia el bit 5
Sea x el valor númerico del carácter (vamos el contenido en un registro) Luego convertir Mayúscula a minúscula (poner el bit 5: x = x or 32 Aplicado en bucle sobre cada letra de la palabra: BIENvenido, el resultado sería bienvenido
De Minúscula a mayúscula (borrar el bit 5): x = x and (255-32) Aplicado en bucle sobre cada letra de la palabra: BIENvenido, el resultado sería BIENVENIDO
Aquí hemos usado una máscara... una máscara empieza siempre con todos sus bits a 1 (ó 0, según interese el caso), y luego desactivar el/los bits no deseados. Aplicando luego un operador AND, fuerza a que mantenga a uno los bits que en la máscara también son 1, y en cambio pone a cero los bits 1 que tuviere en la misma posición que la máscara tiene 0... Para entenderlo mejor, considera dos papeles, donde se representan los bits con un agujero cuando son 1 y sin agujero cuando son 0 (lógicamente correctamente alineados y equidistantes, etc...), la máscara sería uno tal que donde pone 1, tiene un agujero y donde tiene 0 es opaco... detrás está tu papel, con sus bits (huecos y no huecos), el resultado será 1 cuando logres ver a través de cada 'bit' de ambos papeles... y 0, cuando no logres ver que hay detrás de ambos papeles.
Todavía resulta de interés cambiar de mayúscula o minúscula a su contrario (sin necesidad de conocer su valor previamente): x= x xor 32 Aplicado en bucle sobre cada letra de la palabra: BiEnVenIDo, el resultado sería bIeNvENidO
|
|
|
En línea
|
|
|
|
|
|