본문 바로가기

Programming Language/Assembly

[Assembly] 파일입출력

실행환경

- cpu : 인텔계열(64bit)

- 컴파일러 : nasm

- 리눅스 : ubuntu 16.04 LTS


설치방법

sudo apt-get install nasm


컴파일

- nasm -f elf64 파일명.asm -o 파일명.o  --> 목적파일을 만든다.

- ld 파일명.o -o 파일명  --> 실행파일을 만든다.



fileio.asm

section .data


file_name db 'testio',0


len equ $ -file_name


file_text db 'my name is jung'


len1 equ $ -file_text


newLine db 0x0a


section .bss


file_out resb  1 ;내가 열어본 파일의 정보의 디스크립트를 가지고 있는 변수


file_in resb   1


data resb  10


section .text


global _start




_start:


;파일이 있는지 없는지 덮어씌우기를 하고


;없으면 만들어 준다 키워드 8은 파일을 생성하고 없으면 덮어씌우기를한다.


;8번은 파일을 생성할때 쓰는 키워드가 된다.




mov eax,8 ;파일io를 사용하겠다라는 위치 , fd는 eax에 저장된다.


mov ebx,file_name ;여기는 파일 이름을 집어넣는 위치


mov ecx,777o ;파일 권한을 입력해주는 곳


mov edx,len ;길이를 넣어주는 곳


int 0x80




mov [file_out],eax




mov eax,4


mov ebx,[file_out] ;ebx를 통해 해당하는 파일의 정보를 알고있는 


;디스크립트를 통해 파일에 출력한다.


mov ecx,file_text


mov edx,len1


int 0x80




;만들 파일의 내용을 꺼내와서 출력도 해본다.


mov eax,5 ;파일을 읽어 드리기 위해 파일 디스크립트를 읽어오는 부분


mov ebx,file_name


;파일을 읽을건데 크기를 얼마나 주는지 크기를 알려준다.


;0x00 읽기용 , 0x01 쓰기용 , 0x02 읽고 쓰기용


mov ecx,0x00


mov edx,777o


int 0x80




mov [file_in],eax



mov eax,3


mov ebx,[file_in]


mov ecx,data


mov edx,20


int 0x80




mov eax,4


mov ebx,1


mov ecx,data


mov edx,20


int 0x80




mov eax,4


mov ebx,1


mov ecx,newLine


mov edx,1


int 0x80




mov eax,1


int 0x80


'Programming Language > Assembly' 카테고리의 다른 글

[Assembly] 어셈블리 Test10  (0) 2016.12.05
[Assembly] 어셈블리 Test9  (0) 2016.12.05
[Assembly] 어셈블리 Test8  (0) 2016.12.04
[Assembly] 어셈블리 Test7  (0) 2016.12.04
[Assembly] 어셈블리 Test6  (0) 2016.12.04