SoloCodigo
Programación General => ASM (Ensamblador) => Mensaje iniciado por: Nquevedo en Martes 24 de Marzo de 2009, 19:01
-
Buen dia, les agradeceria me dieran una luz. Soy totalmente nuevo en esto.
Lo que deseo es que al ingresar el nombre en minusculas lo despligue en Mayusculas y viceversa, ya hice el programa que pide el nombre y lo despliega; pero no he podido realizar el cambio. Leyendo he visto que se usa una interrupcion 21 y/o una opcion Toupper; pero no he logrado entender cual usar y como usarlo y donde deberia de ingresarlo.
Gracias
Adjunto el codigo que ya realice.
global _start
section .data
mensage db 'Ingrese su nombre: ' ,10
lenmensage equ $ - mensage
nombre db' ',10
lennombre equ $ - nombre
saludo db 'Hola ',10
lensaludo equ $ - saludo
section .text _start:
mov eax,4
mov ebx,1
mov ecx, mensage
mov edx,lenmensage
int 80h
mov eax,3
mov ebx,0
mov ecx,nombre
mov edx, lennombre
int 80h
mov eax,4
mov ebx,1
mov ecx, saludo
mov edx, lensaludo
int 80h
mov ecx, nombre
mov eax,4
mov ebx,1
mov edx, lennombre
int 80h
mov ebx,0
mov eax,1
int 80h
-
Para convertir de mayúsculas/minúsculas no hace falta tanto. Sólo hay que sumar/restar, ya que los caracteres son en realidad códigos ASCII:
(http://enteos2.area.trieste.it/russo/IntroInfo2001-2002/CorsoRetiGomezel/ASCII-EBIC_files/ascii_table.jpg)
Con un bucle sencillo te vale. Y te ahorras usar funciones externas: más control sobre tu programa.
Salud
-
Hola.
La tabla que te pusieron en la respuesta anterior es de mucha ayuda para que observes el valor de los caracteres, como te dijeron, estos son ASCII y tienen una representación numérica. A la tabla anterior le hace falta la representación en binario.
Debido a que estas trabajando en ensamblador, lo más conveniente es manejar los valores en binario, ya que si obtienes el valor en binario de la letra
A = 1000001
a = 1100001
Continuando así, hasta la
Z = 1011010
z = 1111010
Si eres observador, notaras que entre las letras mayúsculas y minúsculas sólo existe un bit diferente, que es el segundo, por lo tanto, sólo debes de negar el segundo bit pero obtener un mayúscula a partir de una minúscula y viceverza.
Espero te sirva.
Hasta luego.
-
Previa comprobacion que sea una letra: xor 32.
La interrupcion 21h a la que te referis debe de MS-DOS y la funcion toupper la tenes que enlazar desde la libc (esta funcion no falla con la ñ por ejemplo).