Created
September 30, 2008 06:37
-
-
Save kig/13759 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.equ EXIT, 1 | |
.equ READ, 3 | |
.equ OPEN, 5 | |
.equ BRK, 45 | |
.equ BUF_SZ, 4096 | |
.section .data | |
filename: | |
.ascii "my_file\0" | |
.section .bss | |
.lcomm buffer, BUF_SZ | |
.section .text | |
.globl _start | |
_start: | |
movq $buffer + BUF_SZ, %r12 # save bss end address to r12 | |
movq $OPEN, %rax | |
movq $filename, %rbx | |
movq $0, %rcx | |
movq $0666, %rdx | |
int $0x80 | |
movq %rax, %r13 # save fd to r13 | |
read_loop: | |
movq $READ, %rax | |
movq %r13, %rbx | |
movq $buffer, %rcx | |
movq $BUF_SZ, %rdx | |
int $0x80 | |
cmpq $0, %rax # end of file | |
je read_loop_end | |
movq %r12, %rbp # copy old end to rbp | |
addq %rax, %r12 # add read sz to r12 | |
movq $BRK, %rax # allocate to new end | |
movq %r12, %rbx | |
int $0x80 | |
cmpq %rax, %r12 # if rax != r12, alloc failed | |
jne error_exit | |
# copy buf to newly allocated space | |
# rcx has the buffer address | |
copy_loop: | |
cmpq %r12, %rbp | |
je end_copy | |
movb (%rbp), %al | |
movb %al, (%rbp) | |
incq %rcx | |
incq %rbp | |
jmp copy_loop | |
end_copy: | |
jmp read_loop | |
read_loop_end: # ok exit | |
movq $EXIT, %rax | |
movq $0, %rbx | |
int $0x80 | |
error_exit: # error exit | |
movq $EXIT, %rax | |
movq $1, %rbx | |
int $0x80 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment