03 - manipulacion basica de memoria ErickAssembly

aqui aprenderas a como manipular la memoria en el lenguaje de maquina EBIB (Erick Binary Instructions Bunch) usando Erick Assembly

vamos alla!!

Primeras cosas que aclarar

  • la memoria en S-SUN de EBIB se gestiona con un array llamado memory_access donde se guardan todos los registros y puede contener mas de 1000 registros
  • no puedes acceder a memoria real, solo del sistema S-SUN asi que no puedes romper nada mas que el sistema
  • yo no soy totalmente experto en el tema del ensamblador pero si les puedo enseñar como hacerlo en el mio

ahora si continuemos

EA

; memorymani.easm*

system_call 2,0 ; limpiar la pantalla*

;
; configurar las macros
;*

_BufferPosition = 3 ; en donde se guardara la posicion en memoria del buffer*
_BufferSize = 4 ; que tamaño tendra el buffer, tiene que ser 4 por que la funcion de localizar buffer lo que hace
es que como el parametro que se le mandara a la llamada es el registro 3 en el registro 3 se guardara la posicion
del buffer en registros y en el siguiente registro (este, el 4) se considerara como parametro para el tamaño
*

_RTBufferSize = 3

move _BufferPosition,0 ; posision del buffer*
move _BufferSize,_RTBufferSize ; tamaño*

system_call 14,_BufferPosition ; esto tomara el registro 3 como la direccion donde se guardara el buffer para despues ser usado y 
el mismo registro pero sumandole 1 a su direccion de alli se extreaera su tamaño*

; consideremos que el registro empieza en la posicion 6 (por que 5 es para almacenar el tamaño del espacio) y termina en 9*

;
; almacenar la posicion del buffer de forma segura
; *

SafeRegister = 34

set_value_with_value SafeRegister,_BufferPosition

;
; almacenando numeros alli
;*

; numero 34*

set_value_with_value 33,SafeRegister ; mover el buffer al cual se escribira*
move 34,0 ; mover a que elemento de buffer se le escribira*
move 35,34 ; mover el valor que se escribira*

;
; obtener valores del pool
; *

; obtenemos el elemento 0*

set_value_with_value 20,SafeRegister ; el pool que se va a manejar*
move 21,0 ; el elemento que queremos obtener *
move 22,43 ; el registro al cual se le va a dirijir*

system_call 17,20

; imprimimos el numero*

system_call 18,22

system_call 20,SafeRegister ; liberar el buffer *

aqui deberia funcionar pero el maldito S-SUN esta tonto y no funciona y se borra el valor de 22 antes de imprimirlo como numero a texto con system_call 18,22

2 Me gusta

No he probado ErickASM, pero por lo que veo, se ve mas facil que ASM. Lo probare pronto!