Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .section .data
- # System call numbers
- .equ OPEN, 2
- .equ WRITE, 1
- .equ READ, 0
- .equ CLOSE, 3
- .equ EXIT, 60
- # File modes
- .equ O_RDONLY, 0
- .equ O_CREAT_WRONLY_TRUNC, 03101
- .equ O_PERMS, 0666
- .equ END_OF_FILE, 0 # End of file
- .section .bss
- #... Define buffer(s) here ...
- .lcomm my_buffer, 500
- #Stack Postions
- .equ ST_SIZE_RESERVE, 24
- .equ ST_FFD_IN, 0
- .equ ST_FFD_OUT, 8
- .equ ST_ARGC, ST_SIZE_RESERVE
- .equ ST_ARGV_0, ST_SIZE_RESERVE+8
- .equ ST_ARGV_1, ST_SIZE_RESERVE+16
- .equ ST_ARGV_2, ST_SIZE_RESERVE+24
- .equ ST_ARGV_2, ST_SIZE_RESERVE+32
- .section .text
- # RETURN VALUES
- .equ RETURN_SUCCESS, 0
- .equ RETURN_INVALID_NUM_ARGS, 1
- .equ RETURN_ERR_INPUT, 2
- .equ RETURN_ERR_OUTPUT, 3
- .equ RETURN_INVALID_FORMAT, 4
- .equ RETURN_MSG_TOO_LONG, 5
- # BMP HEADER OFFSETS
- .equ HO_B, 0
- .equ HO_M, 1
- .equ HO_SIZE_V3, 14
- .equ HO_WIDTH_PIXELS, 18
- .equ HO_HEIGHT_PIXELS, 22
- .equ HO_NUM_BITS_PIXEL, 28
- .equ HO_COMPRESSION, 30
- .equ HO_NUM_COLORS_PALETTE, 46
- .globl _start
- _start:
- subq $ST_SIZE_RESERVE, %rsp
- movq %rsp, %rbp
- movq ST_ARGC(%RBP), %RDI #check for 4 args
- cmpq $4, %rdi
- jne exit_invalid_num_args
- open_file:
- movq $ST_ARGV_1, #rdi
- o_rdonly #rdi
- exit_success:
- movq $RETURN_SUCCESS, %rdi
- jmp exit
- exit_invalid_num_args: #invalid number of args
- movq $RETURN_INVALID_NUM_ARGS, %rdi
- jmp exit
- exit_INPUT:
- movq $RETURN_ERR_INPUT, %rdi
- jmp exit
- exit_ERR_OUTPUT:
- movq $RETURN_ERR_OUTPUT, %rdi
- jmp exit
- exit_INVALID_FORMAT:
- movq $RETURN_INVALID_FORMAT, %rdi
- jmp exit
- exit_MSG_TOO_LONG:
- movq $RETURN_MSG_TOO_LONG, %rdi
- jmp exit
- exit:
- movq $60, %rax
- syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement