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