KolibriOS: probando ensamblador / Sudo Null IT News

Decidí practicar en ensamblador bajo x86 y mi elección recayó en KolibryOS. Después de todo, este sistema operativo fue escrito en ensamblador y para usar ensamblador. Y quería escribir código desde el propio KolibriOS. Pero… probablemente no debería haber empezado todo esto.

Resulta que hay bastantes ejemplos de código. Y como estoy acostumbrado a Dos, Windows o Linux, esperaba algo así. Código, código y más código. Las macros no son tan comunes. Bueno, y ciertamente no todo el código se compone únicamente de macros (estoy exagerando).

Código de ejemplo de “fuente oficial” trae más confusión que comprensión de lo que está sucediendo en este código. Y… no hay explicación para estos “significados literales”. Sólo que hacen referencia al archivo “macros.inc”. Si miras fuentes de Internet, en algún lugar está escrito más claramente e incluso te dicen que puedes tomar “macros.inc” (y muchos otros archivos se pueden encontrar en SVN KolibriOS y resulta que también puedes usar GitHub (¿duplicado?).

Después de buscar en el archivo “macros.inc”, así como en Internet, encontré ejemplo (ver código Fasm), me di cuenta de que todo estaba encajando y se volvía más o menos claro.

Comencemos con el hecho de que primero debemos ejecutar Colibríes para poder comenzar a programar en este SO. Al ir a la sección descargas y descargando una de las imágenes Colibríes, dentro del archivo, los desarrolladores ofrecen varias opciones para iniciar el sistema operativo. También hay muchas opciones para iniciar en Internet, creo que no habrá dificultades con esto.

Pero yo mismo decidí hace mucho tiempo que usaría Qemu para iniciar el sistema operativo. E incluso lo configuré y lo lancé hace bastante tiempo.

script para linux

#!/bin/bash

qemu-system-x86_64
-enable-kvm
-cpu host,kvm=on
-smp 1,cores=1
-m 1G
-display gtk
-net nic,model=rtl8139 -net user
-hda kolibri.raw
-hdb kolibriOO.raw
-device VGA,vgamem_mb=128
-device ich9-intel-hda -device hda-duplex

Y todos los guiones están debajo del video, me disculpo.

Pasemos al código del sitio web oficial:


include "macros.inc"

MI_APLICACIÓN_START

CÓDIGO
volver a dibujar:
…..llamar a draw_window
esperar_evento:
…..mcall 10
…..dec eax
…..jz volver a dibujar
…..dec eax
….. clave jz;
botón presionado; solo tenemos un botón, cerrar
…..mcall -1
llave:
; Tecla presionada, léelo e ignoralo.
…..mcall 2
…..jmp espera_evento
dibujar_ventana:
…..mcall 12, 1 ; comenzar a volver a dibujar
…..mcall 0, <10,150>, <40,50>, 0x33FFFFFF, , encabezado; definir y dibujar ventana
…..mcall 4, <30,10>, 0x80000000, cadena; cadena de visualización
…..mcall 12, 2 ; terminar de volver a dibujar
…..retirado

DATOS
encabezado db 'prueba HelloWorld', 0
cadena db '¡Hola, mundo!',0
CASADO
MI_APLICACIÓN_END


Ahora deberías prestar atención a: MEOS_APP_START, CODE, DATA, UDATA, MEOS_APP_END и mcall - это всё макросы из файла "macros.inc". И, если mcall более-менее понятен (это как-бы системный вызов - прерывание int 40h), то что делает всё остальное объяснения практически не найти.

Si profundizas en el archivo "macros.inc" и всё привести в более понятный вид, то получим вот такой код:


use32
org 0x0
db 'MENUET01'
dd 0x01
dd __start
dd __end
dd __memory
dd __stack
dd 0x0
dd 0x0

__comenzar:

volver a dibujar:
…..llamar a draw_window
esperar_evento:
…..mov eax, 10
…..int 0x40
…..dec eax
…..jz volver a dibujar
…..dec eax
….. clave jz;
botón presionado; solo tenemos un botón, cerrar
…..mov eax, -1
…..int 0x40
llave:
; Tecla presionada, léelo e ignoralo.
…..mov eax, 2
…..int 0x40
…..jmp espera_evento
dibujar_ventana:
…..mov eax, 12 ; comenzar a volver a dibujar
…..mov ebx, 1
…..int 0x40
…..mov eax, 0 ; definir y dibujar ventana
…..mov ebx, <10, 150>
…..mov ecx, <40, 50>
…..mov edx, 0x33FFFFFF
…..mov edi, encabezado
…..int 0x40
…..mov eax, 4 ; cadena de visualización
…..mov ebx, <30, 10>
…..mov ecx, 0x80000000
…..mov edx, cadena
…..int 0x40
…..mov eax, 12 ; terminar de volver a dibujar
…..mov ebx, 2
…..int 0x40
…..retirado

__datos:
IncluirIGlobals; Esta es una macro interna, no me molesté en entenderla. Si alguien lo ha descubierto que me lo diga.

header db 'HelloWorld test',0
string db 'Hello, World!',0
__fin:
alinear 32
rb 2048
__pila:
__memoria:


Como puede ver, el texto ha aumentado y el código se ha vuelto más claro para los principiantes. Creo que casi todo el mundo puede comparar más el código. Y ahora también podrá utilizar las macros incluidas en Colibríesy minimice sus programas si usa ensamblador. 🙂

un comentario

Por cierto, esto se volvió similar al código de la fuente oficial, pero solo para Masm. Pero probablemente no habría prestado atención a esto de inmediato, porque estaba interesado en la programación en la forma más Colibríes.

Desarrolladores Colibríes Nos encargamos de minimizar el código, pero es malo que no nos ocupamos de una explicación mínima del código. Hubo un tiempo en que atrajeron a mucha gente para que apoyara este sistema operativo, pero muchos dejaron de usarlo y desarrollarlo, y los recién llegados rara vez tocan el ensamblador. Sí, como puedes ver ahora, incluso para Colibríesintentan escribir en Java, no en ensamblador.

Echemos también un vistazo al depurador suministrado con ColibríesDepurador de colibrí. El programa que creamos se puede iniciar usando un depurador tanto desde el propio Fasm como usando editores de texto. pequeñopad y CEdido. La depuración no es difícil si ya ha utilizado depuradores. Pero algunas personas no entenderán inmediatamente cómo utilizarlo. En el campo de entrada a continuación, ingrese ayuda y el depurador le dará las siguientes sugerencias: ayudar a controlar, datos de ayuda y punto de interrupción de ayuda. Creo que el resto lo podéis hacer vosotros mismos, porque la mayoría de vosotros sabéis inglés mejor que yo. 🙂

¿Por qué comencé todo esto? Quería probar el código ensamblador. Sí, pruebo periódicamente el ensamblador y además aprendo algo nuevo. Aquí probé el código para cuatro arquitecturas en Linux.: Brazo/Brazo64/x86/x86_64. Pero inicialmente quería probarlo bajo Dos y torturar el código allí, pero aparentemente eso sucederá más adelante.

¿Seguiré estudiando ensamblador en Colibríes? Probablemente sí, a estas alturas probablemente ya haya aprendido mucho sobre el desarrollo para este sistema operativo. Y aparentemente allí ya hay muchas cosas automatizadas. En muchos otros sistemas operativos, es necesario escribir mucho más código para obtener una ventana gráfica. ¡Hay bastante código aquí y está en ensamblador! ¡Será interesante tocarlo!

Buena suerte a todos! 😉

un comentario

Pido disculpas por el código, pero resulta que el código no quiere formatearse correctamente.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *