print_pointer.asm 594 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. %include "syscalls.asm"
  2. section .data
  3. ohx db "0x"
  4. hex db "0123456789ABCDEF"
  5. section .text
  6. ;; INPUT: rax
  7. ;; USES: rcx, rbx, r8 + rax,rdi,rsi,rdx
  8. print_pointer:
  9. mov rbx, rax
  10. mov rax, sys_write
  11. mov rdi, 0
  12. mov rsi, ohx
  13. mov rdx, 2
  14. syscall
  15. mov r8, 8
  16. .pp_loop:
  17. ;; get the top nyb
  18. mov rsi, rbx
  19. shr rsi, 64-4
  20. add rsi, hex
  21. mov rax, sys_write
  22. mov rdi, 0
  23. mov rdx, 1
  24. syscall
  25. ;; and the second top nyb
  26. mov rsi, rbx
  27. shr rsi, 64-8
  28. and rsi, 0x0F
  29. add rsi, hex
  30. mov rax, sys_write
  31. mov rdi, 0
  32. mov rdx, 1
  33. syscall
  34. ;; throw that byte away
  35. shl rbx, 8
  36. sub r8, 1
  37. jnz .pp_loop
  38. ret