SOS assembly - peço dicas de leitura

Alguem ai já testou o JNode?

?

Silencio normalmente significa que ninguém aqui testou. O mais próximo que cheguei do JNode foram algumas experiencias com a JikesRVM.

Olá

[quote=Luiz Augusto Prado]eax é pra unix,
int 21h (bios ruindows )
int 80h (kernel do linux)[/quote]

Cuidado com estas generalizações. Interrupção da BIOS não tem nada a ver com interrupção do SO. E os registradores também são coisas do hardware.

Os manuais da Intel, os livros do Ray Duncan e muitos outros que estou vendo no alto da minha estante não são para quem quer aprender. Se eu fosse dar uma dica para um iniciante seria o antigo livro do Daniel Quadros que pode ser encontrado em http://dqsoft.blogspot.com/2007/09/pc-assember-volume-i.html

[]s
Luca (que escreveu programas em assembler desde os tempos de mainframe, que no início da era PC ganhou uma graninha escrevendo devices drivers, que todos os sistemas que fazia tinham sempre uma firula em asm mas que em 1996 escreveu uma lib usando masm para acessar impressoras ECF e prometeu a si mesmo que era a última coisa que faria usando assembler na vida)

Essa foi boa, Luca! :lol: :lol: :lol:

Olá!
Quero agradecer a todos pela ajuda e dicas que me deram.
Acho que peguei o embalo. Hehehe
ASM é muito massa!

O que eu tinha que fazer era buscar sobre as System calls.
Abaixo vai um exemplo que fiz aqui. Espero que
possa ajudar outros interessados.

; ARQUIVO char.asm
; NASM-linux
; uso:
; -f elf char.asm
; ld -s -o char char.o

;____________________________ macro CORPO ____________________________________
; CORPO nome do método
; 0 quantidade de parametros do metodo

%macro CORPO 0
    ;________________________ mostra msg1
    mov     eax,     4        ; System call = 4: escrita na tela
    mov     ebx,     1        ;
    mov     ecx,     msg1    ; msg1
    mov     edx,     tam1    ; quantidade de caracteres da msg1
    int     80h                ;

    ;________________________ pega digitados
    mov     eax,     3        ; System call = 3: leitura de teclado
    mov     ebx,     0        ;
    mov     ecx,     digts    ; digitos que serão digitados
    mov     edx,     10        ; qt de gigitos esperados
    int     80h                ; chama
    
    ;________________________ armazena qt de numeros digitados no endereço [nc]
    mov     [nc],     eax        ; armazena no end a qt de digitos recebidos

    ;________________________ mostra msg2
    mov     eax,     4        ; System call = 4: escrita na tela
    mov     ebx,     1        ;
    mov     ecx,     msg2    ; msg2
    mov     edx,     tam2    ; quantidade de caracteres da msg2
    int     80h                ;
    
    ;________________________ imprime digitados
    mov     eax,     4        ; System call = 4: escrita na tela
    mov     ebx,     1        ;
    mov     ecx,     digts    ; caracteres que foram digitados
    mov     edx,     [nc]    ; endereço da quantidade de digitos
    int     80h                ;
%endmacro

;____________________________ reserva pedaço de memoria
section .bss
    digts    resb     10        ; reserva espaço para 10 digitos

;__________________ mensagens e seus tamanhos
section .data
    msg1     db         “digite 10 caracteres:”,10
    tam1    equ     $-msg1        
    msg2     db         “Voce digitou:”,10
    tam2    equ     $-msg2
    nc     dd         0
;__________________
section .text

global start
    ;
_______________________ label de inicio do programa
    _start:

    ;************************ armazena ecx da pilha. Será o contador
    push    ecx                ;

        CORPO                ; chama macro CORPO

    ;************************ testa condicional de loop
    pop     ecx                ; pega antigo ecx da pilha
    inc     ecx                ; incrementa ecx
    cmp     ecx,     3        ; limite do loop. REPETE 3 VEZES
    jne     _start            ; salta para label _start enquanto ecx!=3

    ;________________________ sai do programa
    mov     eax,     1        ; system call = 1: sair do programa
    mov     ebx,     0        ;
    int     80h                ;