ErickAssembly o S-SUN Assembly es un tipo de ensamblador creado por ErickCraftStudios para escribir programas para los sistemas de ErickCraftStudios y Markarian
Antes de empensar
no le tengas miedo a ErickAssembly, este ensamblador no es como otros, esta diseñado para ser facil de leer y escribir y poder hacer programas grandes sin que la cabeza de los programadores explote
algunos puntos en tomar son
-
los registros no se representan como eax , bx , cx aunque es opcional, aqui los registros son numeros y para modificarlos tienes que poner el numero de registro
-
tambien el registro
10(tambien llamado “stack_address” es el punto de ejecucion del programa)
empezamos con un codigo inicial :
Una base para que no esten perdidos y puedan construir cosas increibles con las cosas ya definidas es este codigo
EA
; helloworld.easm*
;
; este programa imprime "hello world"
; en la pantalla de la consola de S-SUN
;
;*
; section variables*
;
; MyCharacter
;
; represents a character
*
MyCharacter = 1
MyColor = 2
; section calls_vectors*
;
; PrintChar_interruption
;
; prints a character with the parameter
*
PrintChar_interruption = 1
;
; ClearScreen_call
;
; clears the screen
*
ClearScreen_call = 2
;
; ChangeForeground_call
;
; changes the foreground color to the register in the param
*
ChangeForeground_call = 3
;
; ChangeBackground_call
;
; changes the background color to the register in the param
*
ChangeBackground_call = 4
;
; ChangeCursorX_call
;
; changes the cursor x pos to the register in the param
*
ChangeCursorX_call = 5
;
; ChangeCursorY_call
;
; changes the cursor y pos to the register in the param
*
ChangeCursorY_call = 7
;
; PrintCharWithoutUpdateScreen_call
;
; is PrintChar_interruption but the diference is that PrintChar_interruption updates the screen when make that
; and PrintCharWithoutUpdateScreen_call no
*
PrintCharWithoutUpdateScreen_call = 8
;
; ManuallyScreenUpdate_call
;
; updates the screen manually
*
ManuallyScreenUpdate_call = 9
;
; UefiStall_call
;
; a shortcut to the uefi stall function
*
UefiStall_call = 10
;
; WaitForKeyEvent_call
;
; waits for a key
*
WaitForKeyEvent_call = 11
;
; ReadKey_call
;
; reads the last pressed key
*
ReadKey_call = 12
;
; GetTime
;
; get the time
*
GetTime = 13
;
; DrawPixel
;
; draws a pixel
*
DrawPixel = 34
; section variables.colors*
colors.black = 1
colors.lightblack = 2
colors.darkgray = 3
colors.gray = 4
colors.lightgray = 5
colors.white = 6
;
; tonos rojizos
;*
colors.darkred = 7
colors.red = 8
colors.brred = 9
;
; tonos anaranjados
;*
colors.darkorange = 10
colors.orange = 11
colors.brorange = 12
;
; tonos amarillozos
;*
colors.darkyellow = 13
colors.yellow = 14
colors.bryellow = 15
;
; tonos verdosos
;*
colors.darkgreen = 16
colors.green = 17
colors.brgreen = 18
;
; tonos cianes
;*
colors.darkcyan = 19
colors.cyan = 20
colors.brcyan = 21
;
; tonos teales
;*
colors.darkyeal = 22
colors.teal = 23
colors.brteal = 24
;
; tonos azulosos
;*
colors.darkblue = 25
colors.blue = 26
colors.brblue = 27
las primero, las primeras 2 letras del archivo seran utilizadas como el identificador en el binario , por ejemplo si ponemos “MP” las primeras 2 letras del binario seran “MP” , en mi formato hay dos tipos
- MP : para drivers y algunas partes del kernel del propio sistema
- EA : para programas normales
Instrucciones basicas
Las instrucciones en erick assembly no son tan dificiles como las de ensamblador normal, son mas legibles, mas faciles de entender y mas faciles de depurar
antes de pasar a las instrucciones tenemos que saber que SASM , el compilador captura los parametros con , asi que cualquier parametro esta dividido por una ,
las instrucciones van asi
instruccion parametro1,parametro2
por cierto aunque todas las comas se consideran hay unos escapes de caracteres para compensarlos
'\c' ← se convierte en “,”
'\s' ← se convierte en " "
aqui hay una tabla de instrucciones:
-
{Nombre_de_la_Macro} = {Sustituto}
Cantidad de parametros: 2
uso: crea una macro con el nombre indicado antes del signo=y al compilar el codigo todas las apariciones de la macro se remplazaran por el valor que se indica despues del signo= -
move
Cantidad de parametros: 2
uso : mueve el valor literal del parametro 2 al registro indicado en el parametro 1 -
set_value_with_value
Cantidad de parametros: 2
uso : extrae el valor del registtro indicado en el parametro parametro 2 y cambia el valor del registro indicado en el parametro 1 con el valor extraido -
function
Cantidad de parametros: 1
uso : indica que el inicio de la funcion {parametro2} como numero, el nombre de la funcion solo puede ser un numero aunque puedes hacer una macro con el nombre de la funcion y ya en tiempo de compilacion todas las ocurrencias de la macro se remplazan por el contenido de la macro, por lo que puedes definir el nombre y ponerle el numero que es y cuando se compile se remplazara el nombre de la funcion por el id -
call_function
Cantidad de parametros: 1
uso : llama a una funcion definida con la instructionfunction -
add
Cantidad de parametros: 2
uso : obtiene el valor del registro indicado en el parametro 1 y le suma el valor del registro indicado en el parametro 2 -
sub
Cantidad de parametros: 2
uso : obtiene el valor del registro indicado en el parametro 1 y le resta el valor del registro indicado en el parametro 2 -
divide
Cantidad de parametros: 2
uso : obtiene el valor del registro indicado en el parametro 1 y le divide el valor del registro indicado en el parametro 2 -
multiplique
Cantidad de parametros: 2
uso : obtiene el valor del registro indicado en el parametro 1 y le multiplica el valor del registro indicado en el parametro 2 -
system_call
Cantidad de parametros: 2
uso : hace una llamada al sistema toma el parametro 1 como el id de la llamada que le va a hacer al sistema y el parametro 2 , ahi pon un registro o cualquier valor, algunas llamadas usan el valor del registro que pasaste , otras usan literalmente el valor que pasaste por el parametro 2
