01 - Que es erick assembly y cosas basicas

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 instruction function

  • 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

3 Me gusta

¿Como se supone que se obtiene las herramientas para trabajar sobre este lenguaje? Ya que no creo que los interesados podamos usarlo…

Y no sé si esté disponible para Linux…

aqui esta el proyecto del compilador S-SUN/kernel/usr/sasm at main · ErickStudios/S-SUN
y sobre S-SUN no se pueden meter archivos directamente , el unico que puede leer archivos directamente desde el pendrive donde se encuentra es KellyBootloader : ErickStudios/KellyBootloader: source code for the KellyBootloader that boots .bin files in root with the ErickBinaryFormat opcodes , is the same that the binary instructions that use S-SUN for execute programs
aqui hay una foto que demuestra que el ls funciona, pero solo puede bootear archivos .bin que estan en la raiz

1 me gusta