Hi this my first post here XD
Its like this i have the code writen but it gives me this error
Segmentation fault (core dumped)
Can anyone tell me why?
MAX_BUFFER equ 10240 ; Constante que sera' usada como tamanho maximo de cada linha lida do teclado (10kb)
FICH_ABERTURA equ 00q ; Constante que sera' usada como tipo de abertura pretendido: O_WRONLY + O_CREAT
;-----------------------------------------------------------------------------
section .data
fich_nome db "teste.txt", 0 ; Nome do ficheiro a abrir (em formato ASCIIZ)
fich_handle dd 0 ; Variavel que vai guardar o numero (handle) do ficheiro
fich_bytes dd 0 ; Variavel que vai guardar a quantidade de bytes lidos
str_resultado db "Resultado: "
TAM_RESULTADO equ $ - str_resultado
str_eol db 0xA
TAM_EOL equ $ - str_eol
num1 dd 0,0,0,0,0,0,0,0 ; int num1[8];
num2 dd 0,0,0,0,0,0,0,0
linha dd 0
nDoubles dd 0
sinalfinal dd 0
resultado dd 0
temp dd 0
tam_linha dd 0
MAX_LINHA equ 64+2
;-----------------------------------------------------------------------------
section .bss
buffer resb MAX_BUFFER
final resb MAX_LINHA
;-----------------------------------------------------------------------------
section .text
global _start
_start:
; BLOCO 1
; Abre o ficheiro e guarda o handle em [fich_handle]
mov eax, 5 ; Funcao do sistema (system call); 5 = sys_open
mov ebx, fich_nome ; Para sys_open, ebx = endereco do nome do ficheiro (em formato ASCIIZ)
mov ecx, FICH_ABERTURA ; Para sys_open, ecx = tipo de abertura pretendido
int 0x80 ; Chamar o Linux
mov [fich_handle], eax ; Guarda o handle do ficheiro que foi aberto
; BLOCO 2
; Le^ um bloco do ficheiro cujo handle esta em [fich_handle] para buffer
mov eax, 3 ; Funcao do sistema (system call); 4 = sys_read
mov ebx, [fich_handle] ; Para sys_read, ebx = handle de leitura
mov ecx, buffer ; Para sys_read, ecx = endereco do buffer para a leitura
mov edx, MAX_BUFFER ; Para sys_read, edx = tamanho maximo do buffer
int 0x80 ; Chamar o Linux
mov [fich_bytes], eax ; Guarda o tamanho do que foi efectivamente lido
; BLOCO 3
; Procura o \n e calcula o numero de doublewords necessarios
mov esi, buffer
mov ecx, [fich_bytes]
cld
procura_enter:
lodsb
cmp al, 0xA
je fim_palavra
loop procura_enter
fim_palavra:
mov edx, esi ; EDX = endereco do primeiro \n
sub edx, buffer ; EDX = tamanho da primeira palavra mais o enter
dec edx
mov [tam_linha],edx ; numero de bits por linha
add edx,7
shr edx,3 ; numero de dwords na linha
mov [nDoubles],edx
if anyone needs a translation to understand it better ask please