0

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

2
Contributors
1
Reply
2
Views
5 Years
Discussion Span
Last Post by Ancient Dragon
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.