1 %line 1+1 screenmsg.asm 2 3 [section .data] 4 LF equ 10 5 NULL equ 0 6 TRUE equ 1 7 FALSE equ 0 8 EXIT_SUCCESS equ 0 9 STDIN equ 0 10 STDOUT equ 1 11 STDERR equ 2 12 SYS_read equ 0 13 SYS_write equ 1 14 SYS_open equ 2 15 SYS_close equ 3 16 SYS_fork equ 57 17 SYS_exit equ 60 18 SYS_creat equ 85 19 SYS_time equ 201 20 21 00000000 0A0A4D455353414745- message1 db LF, LF, "MESSAGE 1",LF, LF, NULL 22 00000000 20310A0A00 23 0000000E 4D4553534147452032- message2 db "MESSAGE 2", LF, NULL 24 0000000E 0A00 25 00000019 0A0A00 newline db LF, LF, NULL 26 27 [section .text] 28 [global _start] 29 _start: 30 31 00000000 48C7C7[00000000] mov rdi, message1 32 00000007 E823000000 call printmsg 33 34 0000000C 48C7C7[00000000] mov rdi, message2 35 00000013 E817000000 call printmsg 36 37 00000018 48C7C7[00000000] mov rdi, newline 38 0000001F E80B000000 call printmsg 39 40 00000024 48C7C03C000000 mov rax, SYS_exit 41 0000002B 48C7C700000000 mov rdi, EXIT_SUCCESS 42 00000032 0F05 syscall 43 44 [global printmsg] 45 printmsg: 46 47 00000034 53 push rbx 48 00000035 4889FB mov rbx, rdi 49 00000038 4889FE mov rsi, rdi 50 51 0000003B 48C7C200000000 mov rdx, 0 52 53 stringcountloop: 54 00000042 803B00 cmp byte[rbx], NULL 55 00000045 7406 je stringcountdone 56 00000047 48FFC2 inc rdx 57 0000004A 48FFC3 inc rbx 58 0000004D EBF1 jmp stringcountloop 59 60 stringcountdone: 61 0000004F 4883FA00 cmp rdx, 0 62 00000053 740E je _done 63 64 00000055 48C7C001000000 mov rax, SYS_write 65 66 67 0000005C 48C7C701000000 mov rdi, STDOUT 68 69 00000063 0F05 syscall 70 71 _done: 72 00000065 5B pop rbx 73 00000066 C3 ret 74