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 ;