Comparar ascii

kesh
29 de Mayo del 2006
Hola buenas, tengo un programa totalmente terminado, pero algo falla. El programa consiste en que dada una cadena de caractéres, terminada con el código ascii 0(no el carácter \\'0\\', sino el byte de valor 0), debo encontrar cuántos números aparecen. Entonces, inicializo el vector de la siguiente manera:
string DB \\'M\\',\\'u\\',\\'c\\',\\'a\\',\\'7\\',\\'n\\',\\'\\0\\'
Esto es correcto? al correr el turbo assembler, no me da fallo ahí. Donde me da fallo, es al comparar cada uno de los caractéres, ya que voy pasando al registro AL, cada uno de los caracteres, y comparando con \\'/0\\' cada uno de ellos, para saber si es el final de la cadena. Además, también los comparo(los caracteres) con \\'/48\\' y con \\'/57\\', que son los números 0 y 9 en ascii. Lo hago de la siguiente manera:

MOV AL,[SI+BX]
CMP AL, \\'\\0\\'
JE FIN
CMP AL,\\'\\48\\'

Al compilar, en la comparación de \\'\\48\\', me dice: \"Value out of range\". Y en la comparación con \\'\\0\\', \"Constant too large\".
Por último sólo me queda decir, que SI, apesar de ser un registro de índice, lo uso como registro que tiene la cadena de caracteres en la subrutina. Y que bx, funciona como índice, el cual voy incrementando de 1 en 1, ya que son bytes.
Si alguien pudiera ayudarme... muchas gracias!!

aruma
29 de Mayo del 2006
pues te recomiendo que pases todos a asccii y luego los compares. el binario asccii de los numeros es:
0011 0000 cero
0011 0001 uno
0011 0010 dos
0011 0011 tres
0011 0100 cuatro
0011 0101 cinco
0011 0110 seis
0011 0111 siete
0011 1000 ocho
0011 1001 nueve, osea del 30 al 39 hexadecimal