Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - huchoko

#31
Cita de: cpu2 en 26 Febrero 2019, 22:47 PM
Hola

Yo tambien estoy de acuerdo en lo del sistema de llamadas, como comentaron los compañeros mas arriba, se me hace dificil entender que un sistema actual, no utilize el sistema de llamadas syscall. Te recomiendo que mires algun binario como un hello world compilado por ti en tu equipo, y te fijes en el sistema de llamada que esta usando.

Un saludo.
Em... Pasa que estoy programando algo más complejo y no estoy en ningún sistema operativo en concreto.
#32
Gracias, pero no se por que se queda en el limbo, osea no se ejecuta la función k_readkb.
No puedo usar eax para el número ya que lo estoy usando para otra cosa (en cambio debo usar edx), y debo mover el buffer (modificable) a ecx
Código (asm) [Seleccionar]

    xor eax, eax
    push edx
    push ecx
    call k_readkb
    pop ecx
    pop edx
    jmp isr_common_stub

El buffer es algo así (section .bss):
Código (asm) [Seleccionar]
instr resb 255
(estoy compilando con GCC)
#33
Por que tener tantas características extravagantes? Poder doblar el teléfono te da una funcionalidad útil? O tener una pantalla de 7 pulgadas que? No se yo, con poder llamar y tener internet me basta  :). Estos teléfonos sobre valuados parecen ser más un símbolo de estatus social que algo útil.
Saludos  :silbar:
#34
Hola de nuevo aquí, veo que esta sección es algo relajada.
En fin, me gustaría saber como puedo pasar argumentos a una función de C desde NASM.
Ejemplo tengo una función en C declarada así:
void k_readkb(char* buf, int n);
Como podria pasar un argumento que tengo en ecx (a ecx se mueve un puntero a un area de memoria, que es un buffer, donde se dejaran los caracteres, un resb en .bss) hacia el primer argumento de la función de C y edx al 2do argumento de la función? Y en caso de que tenga más argumentos?
Me lio un poco con los registros, y no he encontrado mucho acerca de esto.
Saludos.
#35
Cita de: YreX-DwX en 26 Febrero 2019, 01:35 AM
Creo que puramente en C no se puede ya que C no está orientado a objetos como podría estarlo C++.
Decirte que lo que sí puedes hacer es crear un <struct> en C++ y entonces si puedes declarar una función miembro del <struct>.
Pero tienes algunos errores como inicializar la variable y luego tu función no tiene sentido, devuelve un <int> y no tiene ningún <return>...

Te dejo el siguiente código que compilado como un fuente de C++ sí funciona (g++ test.cpp -o test).
Si lo tratas como un fuente C, no va a funcionar (gcc test.c -o test).
Código (cpp) [Seleccionar]

#include <stdio.h> // #include <cstdio> para C++ mejor

struct foo{
    int x;
    int sumar(int y){
        return x+y;
    }
};

int main(){
    foo my_foo;
    my_foo.x = 3;
    printf("%d\n", my_foo.x); // salida: 3
    int suma = my_foo.sumar(5);
    printf("%d\n", suma); // salida: 8
}


No sé si te sirve  :-X
Ah, que pena  :-(, pero talvez me sirva cuando este programando en C++
Gracias  :)
#36
Es posible (en C) tener una función dentro de un struct? Algo así más o menos:

struct foo
{
    int bar = 3;
    int sumar(int x, int y);
};

int sumar(int x, int y)
{
    x += y;
}

int main()
{
    struct foo asd;
    int spam = asd.bar;
    asd.sumar(5, 5);
    return 0;
}

Escuche que en C++ se podía, pero como lo puedo hacer en C?
La idea seria tener funciones mas organizadas, se podría con POO si estuviera en C++, pero sinceramente me da asco la forma en que se declaran clases en C++  ;-), aparte que solo puedo usar C ahora.
Saludos
#37
ASM / Re: cmp no funciona
22 Febrero 2019, 23:59 PM
Gracias, siempre me pregunte por que cmp nunca me funcionaba...
:silbar:
#38
ASM / cmp no funciona
22 Febrero 2019, 19:58 PM
Pues tengo esta simple rutina en ensamblador (NASM):
Código (asm) [Seleccionar]

isr80:
    cli
    push byte 0
    push byte 80
    cmp eax, 3
    je .read_srv
    cmp eax, 4
    je .write_srv
    jmp .end
    .read_srv:
    mov ecx, strinputbuff
    mov eax, ebx
    call k_readkb
    xor eax, eax
    .write_srv:
    mov ecx, testmsg
    push ecx
    call kputs
    pop ecx
    jmp isr_common_stub
    .end:

Bueno, si mueves el valor 4 a eax, te imprime un texto, si mueves 3 a eax te lee el teclado, etc.
Pero no funciona, sea cual sea el valor que mueva a eax igualmente salta a la subrutina .write_srv.
Me tiene loco este error (por que no es la primera vez que me pasa, cada vez que uso cmp). Alguna idea?
PD: No estoy programando para un SO en específico.
#39
Pues eso, trato de crear un .iso a partir de un .img, pero el mkisofs se hace el chistosito y me dice que el archivo .img no existe cuando si.
mkisofs -o disk.iso -V Gryphus -b disk.img cdconts
Saludos
#40
char* cmdparser(char* str, const char *delim)
{
    char* str_array;
    char *token = strtok(str, delim);
    int i = 0;
    while (token)
    {
        str_array[i++] = token;
        token = strtok(NULL, delim);
    }

    return str_array;
}

Logre portear el codigo, pero no funciona, otra vez  :huh: