Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 9
Prof. Dr. Norian Marranghelo
Eduardo Nascimento
Agenda
Gerenciamento de Arquivos
Exemplo
Projeto
Gerenciamento de Arquivos
System Calls:
%eax
Nome
%ebx
%ecx
%edx
sys_read
int (0)
char *
tamanho
sys_write
int (1)
char *
tamanho
sys_open
char *
int
int
sys_close
int (0)
sys_create
char *
int
Gerenciamento de Arquivos
Permisses:
Ler
Escrever
Criador
Executar
Ler
Escrever
Grupo
Executar
Ler
Escrever
Outros
Executar
Gerenciamento de Arquivos
Permisses:
Somente o criador pode ler, escrever e executar.
Ler
Escrever
Executar
Ler
Escrever
Executar
Ler
Escrever
Criador
Em octal = 0700q
Grupo
Outros
0
Executar
Gerenciamento de Arquivos
Permisses:
Outros no podem ter acesso ao arquivo.
Ler
Escrever
Executar
Ler
Escrever
Executar
Ler
Escrever
Criador
Em octal = 0770q
Grupo
Outros
0
Executar
Gerenciamento de Arquivos
Permisses:
Todos pode ler, escrever e executar o arquivo.
Ler
Escrever
Executar
Ler
Escrever
Executar
Ler
Escrever
Criador
Em octal = 0777q
Grupo
Outros
1
Executar
Gerenciamento de Arquivos
Criar e Abrir um arquivo:
sys_create (8)
mov
mov
mov
int
eax,(sys_create)
ebx,(nome do arquivo)
ecx,(permisses)
80h
Gerenciamento de Arquivos
Criar e Abrir um arquivo:
sys_create (8)
mov
mov
mov
int
eax,8
ebx,nome_arquivo
ecx,0777q
80h
section .data
nome_arquivo db
meu_arquivo.txt,0
Gerenciamento de Arquivos
Criar e Abrir um arquivo:
sys_create (8)
Depois de executado o cdigo, o identificador do arquivo armazenado em
eax, se no tiver nenhum erro.
Gerenciamento de Arquivos
Criar e Abrir um arquivo:
sys_create (8)
Em caso de erro, o cdigo do erro armazenado em eax tambm.
Gerenciamento de Arquivos
Abrir um arquivo:
sys_open (5)
mov
mov
mov
mov
int
eax,(sys_open)
ebx,(nome do arquivo)
ecx,(modo de acesso)
edx,(permisses)
80h
Gerenciamento de Arquivos
Abrir um arquivo:
sys_open (5)
Modos de acesso:
0
Somente Leitura
Somente Escrita
Leitura e Escrita
Gerenciamento de Arquivos
Abrir um arquivo:
sys_open (5)
mov
mov
mov
mov
int
eax,5
ebx,nome_arquivo
ecx,2
edx,0777q
80h
Gerenciamento de Arquivos
Ler um arquivo:
sys_read (3)
mov
mov
mov
mov
int
eax,(sys_read)
ebx,(identificador do arquivo)
ecx,(posio de memria a ser armazenado)
edx,(tamanho da varivel)
80h
Gerenciamento de Arquivos
Ler um arquivo:
sys_read (3)
Depois de executado o cdigo, eax contm o nmero de bytes lidos, ou em
caso de erro, contm o cdigo de erro.
Se eax for menor que edx, quer dizer que o nmero de bytes lidos menor
que o especificado, assim pode-se determinar que eax fim do arquivo (EOF).
Gerenciamento de Arquivos
Escrever em um arquivo:
sys_write (4)
mov
mov
mov
mov
int
eax,(sys_write)
ebx,(identificador do arquivo)
ecx,(posio de memria)
edx,(tamanho)
80h
Gerenciamento de Arquivos
Escrever em um arquivo:
sys_write (4)
mov
mov
mov
mov
int
eax,4
ebx,[id_file]
ecx,msg
edx,len
80h
Gerenciamento de Arquivos
Fechando um arquivo:
sys_close (6)
mov
mov
int
eax,(sys_close)
ebx,(identificador do arquivo)
80h
Gerenciamento de Arquivos
Fechando um arquivo:
sys_close (6)
mov
mov
int
eax,6
ebx,[id_file]
80h
Exemplo
Criar um arquivo com o nome meu_arquivo.txt, escrever no arquivo
Hello, World, fechar o arquivo, abrir o arquivo meu_arquivo.txt,
ler o contedo do arquivo, escrever na tela o contedo do arquivo.
Exemplo
section
.data
nome_arq
msg
len
db
db
equ
meu_arquivo.txt,0
Hello, World
$-msg
;nome do arquivo
;mensagem
;tamanho
Exemplo
section
id_out
id_in
info
.bss
resd
resd
resb
1
1
30
Exemplo
section
global
.text
_start:
_start:
mov
mov
mov
int
eax, 8
ebx, nome_arquivo
ecx, 0777q
0x80
;sys_create
;meu_arquivo.txt
;todas as permisses
;interrupo
mov
[id_out], eax
;guarda o identificador
Exemplo
section
global
.text
_start:
_start:
mov
mov
mov
mov
int
eax,4
ebx, [id_out]
ecx, msg
edx,len
0x80
;sys_write
;identificador do arquivo
;Hello, World
;tamanho
;interrupo
Exemplo
section
global
.text
_start:
_start:
mov
mov
int
eax, 6
ebx, [id_out]
0x80
;fechar arquivo
;identificador
;interrupo
Exemplo
section
global
.text
_start:
_start:
mov
mov
mov
mov
int
eax, 5
ebx, nome_arquivo
ecx, 0
edx, 0777q
0x80
;sys_open
;meu_arquivo.txt
;somente leitura
;todas as permisses
;interrupo
mov
[id_in], eax
;guarda identificador
Exemplo
section
global
.text
_start:
_start:
mov
mov
mov
mov
int
eax, 3
ebx, [id_in]
ecx, info
edx, 30
0x80
;sys_read
;identificador
;varivel para armazenar o contedo
;tamanho
;interrupo
Exemplo
section
global
.text
_start:
_start:
mov
mov
int
eax, 6
ebx, [id_in]
0x80
;fechar arquivo
;identificador
;interrupo
Exemplo
section
global
.text
_start:
_start:
mov
mov
mov
mov
int
eax, 4
ebx, 1
ecx, info
edx, 30
0x80
;sys_write
;terminal
;contedo do arquivo
;tamanho
;interrupo
Exemplo
section
global
.text
_start:
_start:
mov
mov
int
eax, 1
ebx, 0
0x80
;sys_exit
;sem erros
;interrupo
Projeto
Fazer um programa que copia arquivos. O programa primeiramente
pede o nome do arquivo para o usurio, coloca o nome em uma
varivel e insere o nmero 0 (fim da string) no final do nome do
arquivo. Logo em seguida ele l o contedo do arquivo e armazena
em uma varivel de tamanho 400 (bytes). Por fim o programa cria
uma arquivo com o apndice (copia).txt e escreve o contedo lido
anteriormente.
Projeto
section
apend
msg
len
.data
db
db
equ
"(copia).txt",0
;apndice do arquvio de sada
'Digite o nome do arquivo:',10
;mensagem
$-msg
;tamanho da mensagem
Projeto
section .bss
id_out
resd
id_in
resd
nome_arq
resb
arq_out
resb
tamanho_nome resd
tamanho_info resd
info
resb
1
1
30
41
1
1
400
Projeto
coloca_fim:
mov
ebx,0
;inicializa o contador
.for:
cmp
[nome_arq+ebx], byte 10
je.retorna
inc
ebx
jmp
.for
.retorna:
mov
ret
[nome_arq+ebx], byte 0
Projeto
coloca_apendice:
mov
mov
ebx,0
ecx,0
;inicializa o contador
;inicializa o contador
.for:
cmp
je
mov
mov
inc
jmp
Projeto
.apendice:
cmp
je
mov
mov
inc
inc
jmp
.retorna:
mov
ret
;fim do procedimento
[tamanho_nome],ebx ;guarda o tamanho do nome de sada
;retorna