[HLA] - Error de comprensión

Iniciado por criskapunk, 8 Febrero 2012, 14:32 PM

0 Miembros y 2 Visitantes están viendo este tema.

criskapunk

Buenas,

Tengo una duda bastante boluda, pero prefiero preguntarlo. Estoy leyendo Art of Assembly y cuando habla de valores booleanos dice lo siguiente:

CitarFurthermore, as long you ensure that your boolean variables only contain zero and one, you can use de 80x86 AND, OR, XOR and NOT instructions...

Que las variables booleanas solamente contengan ceros y unos? Según tengo entendido esos son los ÚNICOS valores que pueden tener. Es un error del manual o me estoy equivocando en algo?

Un saludo y disculpas por semejante pregunta.

Eternal Idol

La minima unidad a la que podes acceder atomicamente es un byte, supongo que se refiere entonces a eso, mientras te asegures que en tu byte solo hay unos o ceros ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

criskapunk

Que el valor almacenado dentro del byte sea únicamente cero o uno? Si es una variable booleana, únicamente no puede tener esos valores?

Creo que me estoy complicando mucho con algo simple :P

Gracias Eternal, un saludo.

Eternal Idol

¿Que es una variable? Un espacio en memoria ... tal vez HLA permite definir variables de un tipo llamado boolean y asignarle valores mayores a 1 (por la razon que te di antes, minimo ocupa un byte).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

_Enko

El bit es lo unico que puede tener como valor 1 o 0.
Un byte almacena 8 bits en x86. Por eso puede tener valores de 0 a 255.

Normalmente, si es 0 es FALSE.
Si es cualquier otro valor, TRUE. Es decir, TRUE == not FALSE.
( por ejemplo 5 seria true)


Esta muy sacado de contexto, habria que leer el texto completo para ver a que se referia.

criskapunk

#5
El tema está en que HLA usa 0 para false y 1 para true, no otros valores:

CitarInternally, HLA represents the value true using the numeric value one; HLA represents false using the value zero. Most programs treat zero as false and anything else as true, so HLA's representations for true and false should prove sufficient.

Entonces por eso me parece raro que diga que te asegures que en el byte solo haya uno y cero.

Edit:
Se podría ver que valor en binario tienen las variables booleanas en tiempo de ejecución? Como lo podría hacer?
Según el texto, únicamente podrían valer 00000000 o 00000001, no?

Edit 2:
El texto que habla sobre los valores booleanos es el siguiente:

:http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.artofasm.com/Windows/HTML/HelloWorlda2.html#998344

Y ahí me surgió otra duda, porque al principio dice que HLA usa 0 para false y 1 para true, sin embargo al final dice lo siguiente:

CitarThis routine prints the text "true" or "false" depending upon the value of the boolean parameter ( zero is false, anything else is true).

Cero es falso y todo lo demás verdadero? Pero si sólo puedo usar los valores true y false :huh: En el siguiente código si pongo cualquier otro valor que no sea verdadero o falso tira un error:

Código (asm) [Seleccionar]
program prueba3;

// Bibliotecas
#include("stdlib.hhf");

// Variables
static
bool:boolean:=true;

begin prueba3;

stdout.put("El valor de bool es: ", bool, nl);

end prueba3;


Un saludo y disculpas nuevamente.

_Enko

#6
Sinceramente, hasta ahí tenia alguna idea.

Pocas ganas de tratar de entender un lenguaje que es una mezcolanza entre Pascal, C y Asm.
No le veo utilidad. C con inline assembly me parece una opción mejor.
Que va, Pascal con Inline assembly me sigue pareciendo una  mejor alternativa.

Me imagino que stdout.put debe ser parte de una libreria interna de hla, de manera que acepta solo 1 o 0 para booleanos, otro valor y emite un error.
Si quieres saltearte eso, usa el stdout de la winapi o de c runtime que es mas sencillo.

criskapunk

Buenas _Enko,
Estoy tratando de aprender HLA porque es el lenguaje que explica en el libro Art of Assembly (Por lo que vi en internet, es de los mejores libros para aprender asm), y si, como bien decís, stdout.put forma parte de la biblioteca stdlib.hhf (La biblioteca estándar de HLA).
El problema no creo que sea dicha función, ya que lo único que hace es mostrar el texto en pantalla con la correspondiente constante booleana (true o false).

Un saludo y gracias.

_Enko

#8
Citar
Por lo que vi en internet, es de los mejores libros para aprender asm),
No, definitivamente no. Mejor revisa la sección de Libros y Entry Point de este subforo.

Demas decir que su sintaxis se aleja de cualquiera de los ensambladores BUENOS del mercado como masm, fasm, nasm (mh... tasm32?).

masm está hiper documentado y es el ensamblador mas usado para windows.
Si quieres programar para otros OS ademas de windows, fasm o masm.

Citar
(true o false).
ya creo que habia quedado que guarda 1 o 0.
Habria que depurar esa funcion, pero se me hace que es algo asi:

if var=1
   print("true")
elseif var=0
   print("false")
else
   exception
endif



Saludos.

criskapunk

#9
Pero la duda que yo tengo no es sobre la función en si, sino sobre los valores que tienen las variables booleanas, como expliqué en el primer mensaje.

Cita de: _Enko en 11 Febrero 2012, 20:50 PM
No, definitivamente no. Mejor revisa la sección de Libros y Entry Point de este subforo.

Entry point

CitarThe Art of Assembly Language: Uno de los libros mas recomendados para aprender assembly.

Un saludo.