miércoles, 14 de agosto de 2019

Inspiraciones en Dragon Ball de viaje al Oeste


La obra anónima Viaje al oeste relata la historia ficticia del monje Tripitaka Tang al oeste para conseguir de Buda las escrituras sagradas y poderlas llevar al reino del este. Acompañado de sus discípulos sortea una gran cantidad de problemas, la mayoría de las veces siempre con monstruos de alguna montaña rumbo al oeste. 

El principal y más interesante de sus discípulos es nada mas y nada menos que Sun Wu Kung (también conocido como peregrino sun, gran sabio sosia del cielo, gran mariscal de los juncales celestes, hermoso rey de los monos, dios del trueno). El cual tiene una personalidad muy despreocupada y agradable, además de ser inteligente, fuerte, mágico, artista marcial,  y muy bromista como un auténtico genio de mitología.

Esta obra es tan influyente como corriente literaria y filosófica en oriente, debido a que está cargada de principios taoístas y  budistas,  de china y también de la india, breve mente hace alusión a los modales de un letrado que debe seguir un adepto de la corriente del confucionismo. Akira Toriyama en una entrevista confeso ser fan de la obra y haberse inspirado en ella para crear su obra más conocida como lo es Dragon Ball. A continuación mencionare las inspiraciones del viaje al oeste que aparecen en todo Dragon Ball:
   




Ulong: Esta basado en el personaje Chu-Ba-Chie  que es un cerdo con orejas y hocico grande al que le encantan las mujeres y la comida, sabe hacer transformaciones aunque no conoce el arte de las 72 transformaciones como el rey mono.






Picoro se come a Goku y este lo golpea desde adentro: Varias veces el rey mono llego a derrotar a sus enemigos desde su interior, como sucede en la batalla del torneo de artes marciales.


Son Goku: Está basado en Sun Wu Kung el hermoso rey de los monos, con su báculo sagrado y su poderoso darma(Ki).






La técnica del mafu ba: Está basado en uno de los tesoros de lao tse que absorbe a las personas en un jarrón cuando estas contestan al llamado de su nombre, así también la espada z está basado en la espada de los 7 filos y el abanico de los vientos también está basado en el abanico de lao-tse que usa para avivar el fuego de su horno.






 Las nubes voladoras: Los personajes usan nubes voladoras para transportarse, pero no pueden transportar a humanos, debido a que la existencia de un humano recorriendo el sendero del bien, es más pesada que la de un inmortal instruido en el conocimiento del tao, esto se puede comparar con que solo las personas de corazones puros pueden montar una nube.






La técnica de la tele transportación: El rey mono puede volar distancias inimaginables y llegar a cualquier lugar en cuestión de segundos, así como recitar magia de tele-transportación y llegar a cualquier reino a visitar a algún inmortal.




Krilin: Un monje rapado, claramente basado en el monje Tripitaka Tang, el cual ha estado entregado a la practica de la virtud, durante diez generaciones seguidas.Es la reencarnación del discípulo mano derecha del mismo buda conocido como cigarra de oro.Fue condenado a reencarnar como humano debido a que se quedo dormido y no presto atención a la lectura de las escrituras.Quien coma su carne vivirá tanto como el mismo cielo.Por esa razón todos los monstruos quieren comerlo.






La personalidad de Goku: Sun Wu Kung no sabe nada del amor, es atrevido, siempre quiere pelear, es un genio en las batallas, es confiado, inocente, conoce incontables técnicas igual que Son Goku




El camino de la serpiente: Los personajes experimentan episodios como el descrito en el camino de la serpiente, donde Goku se encuentra con la princesa serpiente y esta quiere casarse con él, en el viaje al oeste los peregrinos son tentados a casarse con doncellas a cambio de riquezas y tierras.







Picoro Dai ma Ku: El rey Picoro es un monstruo típico de viaje al oeste, que tiene hijos y diablillos como subordinados.






Entrenamiento con el maestro Roshi: Sun Wu Kung es instruido por un inmortal anciano en los secretos del tao, así obtiene grandes conocimientos de magia, y el camino de la inmortalidad no le supone ningún secreto.



Báculo sagrado: Sun Wu Kung obtiene su barra de los extremos dorados que crece y disminuye de forma complaciente, igual que el báculo sagrado de Goku.


Dioses de Dragon Ball: En viaje al oeste existen inmortales del cielo y de la tierra. Así como  dioses del reino de las sombras y las estrellas.


Elixir de la vida que bebe el maestro Roshi: En viaje al oeste hay incontables maneras para conseguir ser un inmortal, entre ellas está la de beber algún elixir o píldora.



Rey Yemma y el libro de los muertos: Sun Wu Kung en su rebeldía con el cielo se borra del libro de la muerte y al no tener fecha de muerte se vuelve aún más inmortal, además de amenazar varias veces al rey yama con traer el caos al infierno.


Diferentes reinos: En viaje al oeste se habla de diferentes reinos tales como el reino de los muertos, el reino del cielo, la tierra, el reino de los mares, el reino de las estrellas.


Batallas épicas con técnicas y artes marciales: Sun Wu Kung constantemente pelea contra monstruos y espíritus de las montañas, lagos y cavernas, las batallas son tan épicas como las de Dragon Ball.




Las semillas del ermitaño: También encuentran su inspiración en las incontables píldoras existentes en el mundo de viaje al oeste.


El elixir de los dioses: para volverse más fuerte también está basado en los incontables elixires que hay en el viaje al oeste.


Revivir a los muertos: En un capítulo de viaje al oeste Sun Wu Kung visita a lao-tse, para que le dé una píldora que puede revivir a los muertos, y solo se puede revivir si el cuerpo esta conservado, en caso contrario, el alma se puede transferir a un cuerpo sintético o prestado.




El tayoken:  Que deja ciegos temporalmente, es una de las técnicas usadas por Sun Wu Kung.


El osaru: el rey mono tiene la capacidad de agigantarse o empequeñecerse tanto como él quiera


El agua de los dioses: En el viaje al oeste hay agua prácticamente para lo que sea, por ejemplo en un capitulo el monje Tang queda embarazado por beber el agua del río del embarazo, y luego el rey de los monos va en busca del agua del aborto para curarlo.


La habitación del tiempo: El tiempo pasa más lento en el cielo que en la tierra. Así que la habitación del tiempo también es inspirada por viaje al oeste.


Librar reinos controlados por demonios(Salvar a la humanidad): Incontables veces el rey mono salva reinos enteros controlados por reyes tiranos o por monstruos manipuladores.


Pasar poder a otro guerrero o despertar el poder oculto: En cierta ocasión el hermoso rey de los monos despierta el poder en sus tres discípulos permitiéndoles cargar armas de más de 10000 kilos

Saliva de Dabura: Es una de las técnicas del rey mono, de un escupitajo paralizaba a unos diablillos


El viaje de Bulma con Goku: Se asemeja al viaje que hace el monje Tang con el rey mono hacia el oeste en busca de las escrituras sagradas, siendo estas las esferas del dragón debido a que  con ellas puedes desvelar cualquier misterio (cumplir cualquier deseo).


Técnica de la multiplicación: El rey mono puede hacer réplicas del mismo, tantas veces como pelo tenga.


La magia de chaos: La magia de. chaos. Sin explicación muy al estilo de la magia del rey mono.


La conmoción con que resuena. El universo en una pelea: El cielo se estremece y el universo se obscurece, y los dioses temen por lo peor.



Lijuria del maestro Roshi: La lujuria del maestro Roshi basada en la lujuria de chu-bachie


El final de dragón ball GT: Al final de la travesía tras entregar las escrituras sagradas al reino del este, el rey mono se convierte en un buda al igual que el monje Tang y sus demás discípulos.



Zenosama esta basado en el principio del zen: En toda la obra se menciona el zen como el camino a seguir para alcanzar la inmortalidad y descubrir cualquier misterio.


También cabe mencionar que la mayoría de las adaptaciones del cine del viaje al oeste  cambian la historia y no siguen el guin del libro, por ejemplo:

El reino prohibido: El rey mono jamas a perdido su barra de los extremos dorados,  el señor de jade nunca es villano, tripitaka nunca aprende kung-fu.

Así como también en las  adaptaciones de netflix: 
La leyenda del rey mono uno: Donde el rey toro es el villano y el señor de jade es bueno. 
En la leyenda del rey mono dos: Solo se basa en un capitulo donde vencen a una diablesa.

Referencia: 
Libro viaje al oeste LAS AVENTURAS DEL REY MONO
Anónimo
ISBN:978-84-7844-774-9



lunes, 17 de diciembre de 2018

NASM

NASM(The Netwide Assembler)

Es un  ensamblador libre  x80x86 y x86-64 diseñado para tener potabilidad, modularidad, es potable para cualquier sistema operativo y de fácil uso, debido a que esta diseñado para ser simple de usar.

Ejemplo de código ensamblador para obtener los números primos de un rango especifico

%include "asm_io.inc"
segment .data
Message db "Halle primos hasta: ", 0

segment .bss
Limit resd 1 ; halle primos hasta este l´ımite
Guess resd 1 ; la conjetura actual para el primo

segment .text
 global _asm_main
 _asm_main:
 enter 0,0 ; rutina de inicio
 pusha

 mov eax, Message
 call print_string
 call read_int ; scanf("%u", & limit );
 mov [Limit], eax

 mov eax, 2 ; printf("2\n");
 call print_int
 call print_nl
 mov eax, 3 ; printf("3\n");
 call print_int
 call print_nl

 mov dword [Guess], 5 ; Guess = 5;
 while_limit: ; while ( Guess <= Limit )
 mov eax,[Guess]
 cmp eax, [Limit]
 jnbe end_while_limit ; use jnbe ya que los n´umeros son sin signo

 mov ebx, 3 ; ebx is factor = 3;
 while_factor:
 mov eax,ebx
 mul eax ; edx:eax = eax*eax
 jo end_while_factor ; Si la respuesta no cabe en eax
 cmp eax, [Guess]
 jnb end_while_factor ; if !(factor*factor < guess)
 mov eax,[Guess]
 mov edx,0
 div ebx ; edx = edx:eax % ebx
 cmp edx, 0
 je end_while_factor ; if !(guess % factor != 0)

 add ebx,2 ; factor += 2;
 jmp while_factor
 end_while_factor:
 je end_if ; if !(guess % factor != 0)
 mov eax,[Guess] ; printf("%u\n")

 call print_int
 call print_nl
 end_if:
 add dword [Guess], 2 ; guess += 2
 jmp while_limit
 end_while_limit:

 popa
 mov eax, 0 ; retorna a C
 leave
 ret

Para compilar en windows haga uso de los siguientes comandos:
nasm -f prime.asm  
gcc -o prime prime.obj driver.c asm_io.obj 
prime.exe

El primer comando generara el archivo objeto en formato .obj para windows en caso de ser linux use -coff
El segundo comando enlaza los objetos para generar un ejecutable, note que antes de ejecutar el comando debe ya contar con el archivo drivers.c y asm_io.obj, los cuales se obtienen de los links mencionados en las referencias.


referencias:
https://es.wikipedia.org/wiki/Netwide_Assembler
Libro Lenguaje Ensamblador para PC
Paul A. Carter
18 de octubre de 2006
Recursos en Internet mencionados en el libro
Pagina del autor http://www.drpaulcarter.com/
Pagina de NASM en SourceForge http://sourceforge.net/projects/nasm/
DJGPP http://www.delorie.com/djgpp
Ensamblador con Linux http://www.linuxassembly.org/
The Art of Assembly http://webster.cs.ucr.edu/
USENET comp.lang.asm.x86
Documentación de Intel http://developer.intel.com/design/Pentium4/documentation.htm

Gas(GNU) Assembler


El gas, o GNU Assembler, es el ensamblador del proyecto GNU. Es el back end por defecto del GNU Compiler Collection y es usado para compilar Linux y otros sistemas operativos como el sistema operativo GNU
El gas puede ejecutar como también generar ensamblados para un número diferente de arquitecturas. Inicialmente utilizaba únicamente la sintaxis de AT&T en lugar de la sintaxis de Intel usada en muchos otros ensambladores, sin embargo, las últimas versiones soportan dicha sintaxis.

Ejemplo calculadora de dos números(suma, resta, multiplicación y división).

.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC2:
.ascii "Ingrese numero uno\0"
LC3:
.ascii "%f\0"
LC4:
.ascii "Ingrese numero dos \0"
LC5:
.ascii "cls\0"
.align 4
LC6:
.ascii "1.- Para sumar los dos numeros \0"
.align 4
LC7:
.ascii "2.- Para restar los dos numeros \0"
.align 4
LC8:
.ascii "3.- Para multiplicar los dos numeros \0"
.align 4
LC9:
.ascii "4.- Para dividir los dos numeros \0"
LC10:
.ascii "5.- salir\0"
LC11:
.ascii "%d\0"
LC12:
.ascii "La suma es: %f\0"
LC13:
.ascii "La resta es: %f\0"
LC14:
.ascii "La multiplicacion  es: %f\0"
LC15:
.ascii "La division es: %f\0"
LC16:
.ascii "Opcion no valida \0"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $48, %esp
call ___main
movl $0x00000000, %eax
movl %eax, 36(%esp)
movl $0x00000000, %eax
movl %eax, 32(%esp)
movl $0, 28(%esp)
movl $0, %eax
movl $0, %edx
movl %eax, 40(%esp)
movl %edx, 44(%esp)
movl $LC2, (%esp)
call _puts
leal 36(%esp), %eax
movl %eax, 4(%esp)
movl $LC3, (%esp)
call _scanf
movl $LC4, (%esp)
call _puts
leal 32(%esp), %eax
movl %eax, 4(%esp)
movl $LC3, (%esp)
call _scanf
L10:
movl $LC5, (%esp)
call _system
movl $LC6, (%esp)
call _puts
movl $LC7, (%esp)
call _puts
movl $LC8, (%esp)
call _puts
movl $LC9, (%esp)
call _puts
movl $LC10, (%esp)
call _puts
leal 28(%esp), %eax
movl %eax, 4(%esp)
movl $LC11, (%esp)
call _scanf
movl 28(%esp), %eax
cmpl $5, %eax
ja L2
movl L8(,%eax,4), %eax
jmp *%eax
.section .rdata,"dr"
.align 4
L8:
.long L2
.long L3
.long L4
.long L5
.long L6
.long L7
.text
L3:
movl 32(%esp), %edx
movl 36(%esp), %eax
movl %edx, 4(%esp)
movl %eax, (%esp)
call _suma
fstpl 40(%esp)
movl 40(%esp), %eax
movl 44(%esp), %edx
movl %eax, 4(%esp)
movl %edx, 8(%esp)
movl $LC12, (%esp)
call _printf
call _getch
jmp L9
L4:
movl 32(%esp), %edx
movl 36(%esp), %eax
movl %edx, 4(%esp)
movl %eax, (%esp)
call _resta
fstpl 40(%esp)
movl 40(%esp), %eax
movl 44(%esp), %edx
movl %eax, 4(%esp)
movl %edx, 8(%esp)
movl $LC13, (%esp)
call _printf
call _getch
jmp L9
L5:
movl 32(%esp), %edx
movl 36(%esp), %eax
movl %edx, 4(%esp)
movl %eax, (%esp)
call _multiplicacion
fstpl 40(%esp)
movl 40(%esp), %eax
movl 44(%esp), %edx
movl %eax, 4(%esp)
movl %edx, 8(%esp)
movl $LC14, (%esp)
call _printf
call _getch
jmp L9
L6:
movl 32(%esp), %edx
movl 36(%esp), %eax
movl %edx, 4(%esp)
movl %eax, (%esp)
call _division
fstpl 40(%esp)
movl 40(%esp), %eax
movl 44(%esp), %edx
movl %eax, 4(%esp)
movl %edx, 8(%esp)
movl $LC15, (%esp)
call _printf
call _getch
jmp L9
L7:
movl $1, (%esp)
call _exit
L2:
movl $LC16, (%esp)
call _puts
L9:
movl 28(%esp), %eax
cmpl $5, %eax
jne L10
movl $0, %eax
leave
ret
.globl _suma
.def _suma; .scl 2; .type 32; .endef
_suma:
pushl %ebp
movl %esp, %ebp
flds 8(%ebp)
fadds 12(%ebp)
popl %ebp
ret
.globl _resta
.def _resta; .scl 2; .type 32; .endef
_resta:
pushl %ebp
movl %esp, %ebp
flds 8(%ebp)
fsubs 12(%ebp)
popl %ebp
ret
.globl _multiplicacion
.def _multiplicacion; .scl 2; .type 32; .endef
_multiplicacion:
pushl %ebp
movl %esp, %ebp
flds 8(%ebp)
fmuls 12(%ebp)
popl %ebp
ret
.globl _division
.def _division; .scl 2; .type 32; .endef
_division:
pushl %ebp
movl %esp, %ebp
flds 8(%ebp)
fdivs 12(%ebp)
popl %ebp
ret
.def _puts; .scl 2; .type 32; .endef
.def _scanf; .scl 2; .type 32; .endef
.def _system; .scl 2; .type 32; .endef
.def _printf; .scl 2; .type 32; .endef
.def _getch; .scl 2; .type 32; .endef
.def _exit; .scl 2; .type 32; .endef




A continuación para compilarlo usar:
gcc -o calculadora -m32 calcauladora.s

Generara un ejecutable windows .exe y a continuación ingresar dos números y proceder con las operaciones.



Referencias:
https://es.wikipedia.org/wiki/GNU_Assembler
GAS Manual