GAS Informações do sistema

Publicado por Ewerton Daniel de Lima (última atualização em 12/08/2011)

[ Hits: 4.634 ]

Download sysinfo.s




Mostra as informações do sistema, tais como RAM livre, Swap, Número de processos, etc...

  



Esconder código-fonte

.section .data

espaco: .ascii "\n"
strEmb: .ascii "\nInformações do Sistema \n===============================\n"
strUp: .ascii "Up time: "
numUp: .ascii "          \n"
strMem: .ascii "Total de Memória RAM: "
strMemL: .ascii "Total de Memória RAM Livre: "
strMemShared: .ascii "Memória RAM Compartilhada: "
strBufRam: .ascii "Buffer Ram: "
strSwap: .ascii "Total Swap: "
strSwapL: .ascii "Espaço Livre de Swap: "
strProc: .ascii  "Procs: "
strHigh: .ascii  "Total High: "
strUn: .ascii  "Mem. Unit: "
strCpu: .ascii  "Seu processador é: "
output: .ascii " xxxxxxxxxxxx "
numMem: .ascii "          \n"


uptime:  .int 0
load1:   .int 0
load5:   .int 0
load15:   .int 0
totalram:   .int 0
freeram:   .int 0
sharedram:   .int 0
bufferram:   .int 0
totalswap:   .int 0
freeswap:   .int 0
procs:   .byte 0, 0
totalhigh:   .int 0
memunit:   .int 0

.section .text
_start:

   movl $4, %eax
   movl $1, %ebx
   movl $strEmb, %ecx
   movl $59, %edx
   int $0x80

   movl $uptime, %ebx
   call saida
   movl $numUp, %edi
   call print
   movl $4, %eax
   movl $1, %ebx
   movl $strUp, %ecx
   movl $9, %edx
   int $0x80
   
   movl $4, %eax
   movl $1, %ebx      
   movl $numUp, %ecx
   movl $11, %edx
   int $0x80
   
   movl $totalram, %ecx
   call saida
   movl $numMem, %edi
   call print
   movl $4, %eax
   movl $1, %ebx
   movl $strMem, %ecx
   movl $22, %edx
   int $0x80
   
   movl $4, %eax
   movl $1, %ebx      
   movl $numMem, %ecx
   movl $11, %edx
   int $0x80
   
   movl $freeram, %ecx
   call saida
   movl $numMem, %edi
   call print
   movl $4, %eax
   movl $1, %ebx
   movl $strMemL, %ecx
   movl $28, %edx
   int $0x80
   
   movl $4, %eax
   movl $1, %ebx      
   movl $numMem, %ecx
   movl $11, %edx
   int $0x80
   
   movl $sharedram, %ecx
   call saida
   movl $numMem, %edi
   call print
   movl $4, %eax
   movl $1, %ebx
   movl $strMemShared, %ecx
   movl $28, %edx
   int $0x80
   
   movl $4, %eax
   movl $1, %ebx      
   movl $numMem, %ecx
   movl $11, %edx
   int $0x80
   

   
   movl $bufferram, %ecx
   call saida
   movl $numMem, %edi
   call print
   movl $4, %eax
   movl $1, %ebx
   movl $strBufRam, %ecx
   movl $12, %edx
   int $0x80
   
   movl $4, %eax
   movl $1, %ebx      
   movl $numMem, %ecx
   movl $11, %edx
   int $0x80
   
   movl $totalswap, %ecx
   call saida
   movl $numMem, %edi
   call print
   movl $4, %eax
   movl $1, %ebx
   movl $strSwap, %ecx
   movl $12, %edx
   int $0x80
   
   movl $4, %eax
   movl $1, %ebx      
   movl $numMem, %ecx
   movl $11, %edx
   int $0x80
   
   movl $totalswap, %ecx
   call saida
   movl $numMem, %edi
   call print
   movl $4, %eax
   movl $1, %ebx
   movl $strSwapL, %ecx
   movl $23, %edx
   int $0x80
   
   movl $4, %eax
   movl $1, %ebx      
   movl $numMem, %ecx
   movl $11, %edx
   int $0x80
   
   
   
   movl $procs, %ecx
   call saida
   movl $numMem, %edi
   call print
   movl $4, %eax
   movl $1, %ebx
   movl $strProc, %ecx
   movl $7, %edx
   int $0x80
   
   movl $4, %eax
   movl $1, %ebx      
   movl $numMem, %ecx
   movl $11, %edx
   int $0x80
   
   
   movl $totalhigh, %ecx
   call saida
   movl $numMem, %edi
   call print
   movl $4, %eax
   movl $1, %ebx
   movl $strHigh, %ecx
   movl $12, %edx
   int $0x80
   
   movl $4, %eax
   movl $1, %ebx      
   movl $numMem, %ecx
   movl $11, %edx
   int $0x80
   
   
   movl $memunit, %ecx
   call saida
   movl $numMem, %edi
   call print
   movl $4, %eax
   movl $1, %ebx
   movl $strUn, %ecx
   movl $11, %edx
   int $0x80
   
   movl $4, %eax
   movl $1, %ebx      
   movl $numMem, %ecx
   movl $11, %edx
   int $0x80
   
   movl $4, %eax
   movl $1, %ebx
   movl $strCpu, %ecx
   movl $19, %edx
   int $0x80
   movl $0, %eax
   cpuid 
   movl $output, %edi
   inc %edi
   movl %ebx, (%edi)
   addl $4, %edi
   movl %edx, (%edi)
   addl $4, %edi
   movl %ecx, (%edi)
   movl $4, %eax
   movl $1, %ebx
   movl $output, %ecx
   movl $13, %edx
   int $0x80

   
   movl $4, %eax
   movl $1, %ebx
   movl $espaco, %ecx
   movl $2, %edx
   int $0x80
   
   movl $1, %eax
   int $0x80


saida:
   movl $116, %eax
   int $0x80
   movl %ecx, %eax
   movl (%eax), %eax
   ret 

   
print:
   addl $10, %edi
   movl $10, %ecx
   call converte
   ret  
   
converte:
   dec %edi
   dec %ecx
   movl $0, %edx
   movl $10, %ebx
   divl %ebx
   addl $48, %edx
   movb %edx, (%edi)
   cmp $0, %ecx
   jne converte
   ret 
#@ 

Scripts recomendados

Escrita de um número em hexadecimal na tela em Assembly Puro para Linux x86 (Nasm - Netwide Assemble

Escrita de um número em decimal na tela em Assembly Puro para Linux 64 bits (GNU Assembly)

Retorna a diferença entre dois vetores em Assemly

Expressão matemática em C

Intercessão entre dois vetores em Assembly


  

Comentários
[1] Comentário enviado por asdf2 em 15/08/2011 - 16:46h

sou novo na assembly

como faço pra compilar esse código no gcc ?

[2] Comentário enviado por ewertondaniel em 15/08/2011 - 22:52h

Olá, quando temos um código assembly, utilizamos um Assembler (montador) para torná-lo um arquivo objeto e logo em seguida utilizamos um Linker (ligador) para torná-lo arquivo executável. Assim, dizemos que "montamos" o código assembly.

Para esse processo você pode utilizar o GNU Assembler, que está no pacote Binutils e provavelmente está instalado no seu Linux já.

$ as assembly.s -o objeto.o

Para linkar, basta fazer:

$ ld objeto.o -o executavel

Qualquer dúvida, posta aí

Abraço :D


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts