Category:Amazing Hopper: Difference between revisions

m
Line 2,809:
La instrucción BIT es una función tipo NAVAJA SUIZA, que encierra numerosas herramientas para el manejo de bits.
 
HOPPER DESCRIPCION ALTO NIVEL
-----------------------------------------------------------------------------------
{N}bit(CODIGO) Ejecuta una serie de cálculos de bits sobre N números enteros
de 16 bits (ver lista de códigos).
Si CODIGO es menor que 100, hace referencia a la posición del
bit.
Ejemplo (con macro FOR/NEXT):
num=4003
for(i=32, {i}is greater than (0),--i)
{num},bit(i), print
next
==> 00000000000000000000111110100011
 
{N}hex Convierte un número decimal a una cadena hexadecimal.
{200}hex ==> C8
 
{N}bin Convierte un número decimal a una cadena binaria.
{200}bin ==> 11001000
 
setbin(n) Establece un número "n" de dígitos binarios para la salida
de BIN.
setbin(15)
{200}bin ==> 000000011001000
 
{N}oct Convierte un número decimal a una cadena octal.
{200}oct ==> 310
 
 
Los códigos están definidos en HOPPER.H.
Line 2,844 ⟶ 2,843:
BITAND AND binario. Ejemplo:
{0xfffh,0x99h},bit(BITAND) ==> 153 (99h)
 
BITOR OR binario. Ejemplo:
{0xfffh,0x99h},bit(BITOR) ==> 4095 (FFFh)
 
BITXOR XOR (OR exclusivo) binario.
Ejemplo:
{0xfffh,0x80h},bit(BITXOR) ==> 3967 (F7Fh)
 
BITNOT NOT binario. Ejemplo:
{0xfffh},bit(BITNOT) ==> 4294963200 (FFFFF000h)
 
BITCLR Deja el bit indicado en 0 (lo apaga). El valor del TOP
es el entero a procesar; el resto, son las posiciones
Line 2,861 ⟶ 2,860:
num=0xfffh
{7,5,4,3,num},bit(BITCLR) ==> 4003 (111110100011)
 
BITSET Enciende el bit indicado. El valor del TOP es el entero
a procesar; el resto, son las posiciones de bits,
Line 2,868 ⟶ 2,867:
num=4003
{7,5,4,3,num},bit(BITSET) ==> 4095 (111111111111)
 
MIRRBYTE Invierte los bits de un entero. LOWBYTE y HIGHBYTE definen
los bits a reflejar (si solo el byte más bajo, o todo).
Line 2,875 ⟶ 2,874:
{LOWBYTE,num},bit(MIRRBYTE) ==> 0000100010001111 = 2191
{HIGHBYTE,num},bit(MIRRBYTE) ==> 1000111100010000 = 36624
 
BITROT Rota bits hacia la izquierda. El bit de más hacia la
izquierda (del byte más bajo o del más alto), pasa a ser
Line 2,881 ⟶ 2,880:
BITROT distingue LOWBYTE y HIGHBYTE.
Ejemplo 1 (LOWBYTE):
 
num = 2289 // (0000100011110001)
i=1
Line 2,887 ⟶ 2,886:
{LOWBYTE,i,num},bit(BITROT),bin,P_NL,print
++i,{5,i} jle(loop lowbyte)
 
Salida:
Line 2,895 ⟶ 2,894:
0000100000011111
0000100000111110
 
Ejemplo 2 (HIGHBYTE):
 
num = 2289 // (0000100011110001)
i=1
Line 2,903 ⟶ 2,902:
{HIGHBYTE,i,num},bit(BITROT),bin,P_NL,print
++i,{5,i} jle(loop highbyte)
 
Salida:
Line 2,921 ⟶ 2,920:
{5,num},bit(SHIFTR) ==> 0000001100100010 = 802
{5,num},bit(SHIFTL) ==> 1000100011000000 = 821440
 
HEXTODEC
OCTTODEC
Line 2,936 ⟶ 2,935:
HEXTODEC:1011754
OCTTODEC:15483
 
LOWBYTE Macro que señala el byte más bajo, usado en BITROT y MIRRBYTE.
HIGHBYTE Macro que señala el byte más alto, usado en BITROT y MIRRBYTE.
 
 
== ATRAPAMIENTO DE ERRORES ==
543

edits