[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