• Domingo 22 de Diciembre de 2024, 14:06

Autor Tema:  Manejo De Caracteres  (Leído 2225 veces)

olberillo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Manejo De Caracteres
« en: Miércoles 22 de Noviembre de 2006, 15:48 »
0
Alguien ke me enseñe un codigo de como determinar si un caracter es Numero, min o MAyuscula.

Otro es ke al digitar dos caracteres de hexa me enseñe su valor en asci.
Gracias

Olber Utria

olberillo@hotmail.com

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Manejo De Caracteres
« Respuesta #1 en: Miércoles 22 de Noviembre de 2006, 15:55 »
0
Para saber si es un numero comparas el caracter contra '0' y '9' si es mayor o igual a '0' y menor o igual a '9' entonces es un numero. Para saber si es minuscula lo mismo pero comparando con 'A' y 'Z' y para minusculas con 'a' y 'z'.

En decimal:
'0' es 48, '9' es 57, 'A' es 65, 'Z' es 90, 'a' es 97 y 'z' es 122.

No se piden tareas ni codigo asi como asi, si tenes algun problema especifico te ayudaremos.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

olberillo

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Manejo De Caracteres
« Respuesta #2 en: Miércoles 22 de Noviembre de 2006, 23:32 »
0
Tengo esto realizado, y compare el caracter capturado si es un numero y funciona...pero en las otras comparaciones, me genera bastantes errores!



AQui lo envio para que me colabores...porfa...


cr EQU 13
lf EQU 10
 print macro arg1
   push ax
   push dx
   lea dx,arg1
   mov ah,9
   int 21h
   pop dx
   pop ax
 endm
 read macro arg1
   push ax
   push dx
   lea dx,arg1
   mov ah,10
   int 21h
   pop dx
   pop ax
 endm
dades SEGMENT PARA PUBLIC
   missatge DB 'Digita el caracter',cr,lf,'$'
   mis1    DB 'es numero',cr,lf,'$'
   mis3    DB 'ES MIN',cr,lf,'$'
   mis4    DB 'ES may',cr,lf,'$'
   maxcad DB 30
   lencad DB 0
   cadena DB 30 DUP(0)
   numero DB  5 DUP(0),'$'
   linia_blanc DB cr,lf,'$'
   missatge2 DB 'Desea salir?',cr,lf,'$'
   maxcad2 DB 2                    ;longitud máxima.
   lencad2 DB 0                    ;longitud leida.
   cadena2 DB 2 DUP(0)             ;buffer que contendrá el texto introducido.

blanc  DB  cr,lf,'$'



dades ENDS
codi SEGMENT PARA PUBLIC 'code'
main PROC FAR
ASSUME CS:codi,DS:dades,SS:pila,ES:dades
mov ax,dades
mov ds,ax
mov es,ax

inicio:
   print missatge         ;pide que se introduzca un mensaje y lo guarda en maxcad
   read maxcad
   print linia_blanc      ;imprime linea en blanco
   mov bx,0         ;pone el registro bx a 0
   
pushpila:
   mov al, cadena[bx]   ;movemos la cadena introducida a al
   push ax
   inc bl
   cmp bl, lencad      ;hacemos la comparacion para que el proceso se repita mientras bl no sea 0
   jne pushpila      
   
   mov bx, 0

caracter:

cmp numero[bx],0      ;Comprueba posicion a posicion que el caràcter introducido es un
   jb  error       ;numero decimal, por eso verifica si esta entre 0 y 9 si no esta
   cmp numero[bx],9      ;salta al bucle error.
   ja  error

   inc bl
   cmp bl,lencad
   jne caracter

   ; si no salta a numeros


error:                  
   print blanc
   print mis1
   print blanc
   jmp salir



salir:
   mov ax,4c00h
   int 21h
main ENDP
codi ENDS
pila SEGMENT PARA STACK 'stack'
DB 128 DUP(0)
pila ENDS
END main

podrrido

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Re: Manejo De Caracteres
« Respuesta #3 en: Jueves 23 de Noviembre de 2006, 07:30 »
0
Va  :comp:

TITLE LETRAS(EXE)
.MODEL SMALL
.STACK 64
;----------------------------------------------
.DATA
MAYUSCULA     DB  'ES LETRA MAYUSCULA','$'
NUMERO        DB  '**ES UN NUMERO**  ','$'
MINUSCULA     DB  '**ES MINUSCULA**  ','$'
NINGUNO       DB  ' NO ES NINGUNA  $ '
;--------------------------------------------------
.CODE
GABINOC PROC NEAR
MOV AX,@data
MOV DS,AX

CALL LIMPIAR                ;limpia pantalla
CALL CURSOR                 ;coloca cursor (no es necesario)

         MOV AH,10H         ;¿Que letra se preciono?
         INT 16H
         CMP AL,'A'        
         JB A20
         CMP AL,'Z'
         JA A20
         LEA DX,MAYUSCULA
         CALL ESCRIBIR
         JMP SALIR

    A20:
          CMP AL,'a'
          JB A30
          CMP AL,'z'
          JA A30
          LEA DX,MINUSCULA
         CALL ESCRIBIR
          JMP SALIR

   A30:
          CMP AL,'0'
         JB A40
         CMP AL,'9'
         JA A40
        LEA DX,NUMERO
        CALL ESCRIBIR
         JMP SALIR

    A40:
     LEA DX,NINGUNO
     CALL ESCRIBIR
       
SALIR:
MOV AH,10H
INT 16H
MOV AX,4C00H
INT 21H
GABINOC ENDP
;------------------------------------------------------------
ESCRIBIR PROC NEAR        ;dx entra desde atras
  MOV AH,09H              ;imprime
  INT 21H
   RET
ESCRIBIR ENDP
;------------------------------------------------------------
 LIMPIAR PROC NEAR
   MOV AX,0600H
   MOV BH,1BH
   MOV CX,0000
   MOV DX,184FH
   INT 10H
   RET
 LIMPIAR ENDP
;------------------------------------------------------------
CURSOR PROC NEAR
  MOV AH,02H
  MOV BH,00
  MOV DH,00
  MOV DL,00
  INT 10H
  RET
CURSOR ENDP
;-------------------------------------------------------------
     END GABINOC

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Manejo De Caracteres
« Respuesta #4 en: Jueves 23 de Noviembre de 2006, 08:16 »
0
Como podes ver en mi mensaje y en el codigo que te dejaron la comparacion no se hace contra 0 o 9 sino contra '0' y '9' osea contra sus equivalentes en ASCII. Lo mismo va para las mayusculas y minusculas.

podrrido: por favor que no se haga costumbre poner el codigo con la resolucion como primera medida, asi no aprende nadie.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.