Advertisement
Guest User

Untitled

a guest
Nov 18th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .section .data
  2.  
  3.     # System call numbers
  4.     .equ OPEN, 2
  5.     .equ WRITE, 1
  6.     .equ READ, 0
  7.     .equ CLOSE, 3
  8.     .equ EXIT, 60
  9.  
  10.     # File modes
  11.     .equ O_RDONLY, 0
  12.     .equ O_CREAT_WRONLY_TRUNC, 03101
  13.     .equ O_PERMS, 0666
  14.  
  15.     .equ END_OF_FILE, 0     # End of file
  16.  
  17. .section .bss
  18. #... Define buffer(s) here ...
  19. .lcomm my_buffer, 500
  20.  
  21. #Stack Postions
  22.  
  23. .equ ST_SIZE_RESERVE, 24
  24. .equ ST_FFD_IN, 0
  25. .equ ST_FFD_OUT, 8
  26. .equ ST_ARGC, ST_SIZE_RESERVE
  27. .equ ST_ARGV_0, ST_SIZE_RESERVE+8
  28. .equ ST_ARGV_1, ST_SIZE_RESERVE+16
  29. .equ ST_ARGV_2, ST_SIZE_RESERVE+24
  30. .equ ST_ARGV_2, ST_SIZE_RESERVE+32
  31.  
  32.  
  33. .section .text
  34.  
  35.     # RETURN VALUES
  36.     .equ RETURN_SUCCESS, 0
  37.     .equ RETURN_INVALID_NUM_ARGS, 1
  38.     .equ RETURN_ERR_INPUT, 2
  39.     .equ RETURN_ERR_OUTPUT, 3
  40.     .equ RETURN_INVALID_FORMAT, 4
  41.     .equ RETURN_MSG_TOO_LONG, 5
  42.  
  43.     # BMP HEADER OFFSETS
  44.     .equ HO_B, 0
  45.     .equ HO_M, 1
  46.     .equ HO_SIZE_V3, 14
  47.     .equ HO_WIDTH_PIXELS, 18
  48.     .equ HO_HEIGHT_PIXELS, 22
  49.     .equ HO_NUM_BITS_PIXEL, 28
  50.     .equ HO_COMPRESSION, 30
  51.     .equ HO_NUM_COLORS_PALETTE, 46
  52.  
  53.     .globl _start
  54. _start:
  55. subq $ST_SIZE_RESERVE, %rsp
  56. movq %rsp, %rbp
  57. movq    ST_ARGC(%RBP), %RDI             #check for 4 args
  58. cmpq $4, %rdi
  59. jne exit_invalid_num_args
  60.  
  61. open_file:
  62. movq $ST_ARGV_1, #rdi
  63. o_rdonly #rdi
  64.  
  65. exit_success:
  66. movq $RETURN_SUCCESS, %rdi
  67. jmp exit
  68.  
  69.  
  70.  
  71. exit_invalid_num_args:                  #invalid number of args
  72. movq $RETURN_INVALID_NUM_ARGS, %rdi
  73. jmp exit
  74.  
  75. exit_INPUT:
  76. movq $RETURN_ERR_INPUT, %rdi
  77. jmp exit
  78.  
  79. exit_ERR_OUTPUT:
  80. movq $RETURN_ERR_OUTPUT, %rdi
  81. jmp exit
  82.  
  83. exit_INVALID_FORMAT:
  84. movq $RETURN_INVALID_FORMAT, %rdi
  85. jmp exit
  86.  
  87. exit_MSG_TOO_LONG:
  88. movq $RETURN_MSG_TOO_LONG, %rdi
  89. jmp exit
  90.  
  91. exit:
  92. movq $60, %rax
  93. syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement