macroses.inc 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. %define next_arg rbp + rbx*8 + 16
  2. %macro popaq 0
  3. pop rdi
  4. pop rsi
  5. pop rbp
  6. pop rbx
  7. pop rdx
  8. pop rcx
  9. pop rax
  10. %endmacro
  11. %macro pushaq 0
  12. push rax
  13. push rcx
  14. push rdx
  15. push rbx
  16. push rbp
  17. push rsi
  18. push rdi
  19. %endmacro
  20. %macro CHECK_NUMBER 1
  21. %assign a '0'
  22. %rep 10
  23. cmp byte %1, a
  24. je %%find
  25. %assign a a+1
  26. %endrep
  27. %%find:
  28. %endmacro
  29. %macro READ_CHAR 2
  30. pushaq
  31. mov rax, 0x00
  32. mov rdi, %2
  33. lea rbx, [%1]
  34. mov rsi, rbx
  35. mov rdx, 1
  36. syscall
  37. popaq
  38. %endmacro
  39. %macro CHECK_SPECIAL 1
  40. push rax
  41. push rcx
  42. push rdi
  43. push qword 0x0a2009
  44. mov rdi, rsp
  45. xor rax, rax
  46. mov al, %1
  47. mov rcx, 3
  48. repne scasb
  49. pop rdi
  50. pop rdi
  51. pop rcx
  52. pop rax
  53. %endmacro
  54. %macro PRINT_CHAR 2
  55. pushaq
  56. push qword %1
  57. mov rax, 0x01
  58. mov rdi, %2
  59. mov rsi, rsp
  60. mov rdx, 1
  61. syscall
  62. add rsp, 8
  63. popaq
  64. %endmacro
  65. %macro Printf 0
  66. mov rdi, 0x01
  67. call Fprintf
  68. %endmacro
  69. %macro Scanf 0
  70. mov rdi, 0x00
  71. call Fscanf
  72. %endmacro
  73. %macro EXIT_SUCC 0
  74. mov rax, 0x3c
  75. mov rdi, 0
  76. syscall
  77. %endmacro