1 %line 1+1 screen.msg.asm 2 3 4 5 6 7 8 9 10 11 12 [global printString] 13 printString: 14 00000000 53 push rbx 15 16 17 00000001 4889FB mov rbx, rdi 18 00000004 48C7C200000000 mov rdx, 0 19 20 strCountLoop: 21 0000000B 803B00 cmp byte [rbx], NULL 22 0000000E 7406 je strCountDone 23 00000010 48FFC2 inc rdx 24 00000013 48FFC3 inc rbx 25 00000016 EBF1 jmp strCountLoop 26 27 strCountDone: 28 00000018 4883FA00 cmp rdx, 0 29 0000001C 7411 je prtDone 30 31 32 33 0000001E 48C7C001000000 mov rax, SYS_write 34 00000025 4889FE mov rsi, rdi 35 00000028 48C7C701000000 mov rdi, STDOUT 36 37 0000002F 0F05 syscall 38 39 40 prtDone: 41 00000031 5B pop rbx 42 00000032 C3 ret 43 44 45 46 47 48 [section .data] 49 LF equ 10 50 NULL equ 0 51 TRUE equ 1 52 FALSE equ 0 53 EXIT_SUCCESS equ 0 54 STDIN equ 0 55 STDOUT equ 1 56 STDERR equ 2 57 SYS_read equ 0 58 SYS_write equ 1 59 SYS_open equ 2 60 SYS_close equ 3 61 SYS_fork equ 57 62 SYS_exit equ 60 63 SYS_creat equ 85 64 SYS_time equ 201 65 66 67 STRLEN equ 50 68 00000000 656E74657220746578- prmpt db "enter text: ", NULL 69 00000000 743A2000 70 0000000D 0A00 new_line db LF, NULL 71 72 [section .bss] 73 00000000 _char resb 1 74 00000001 in_line resb STRLEN+2 75 76 [section .text] 77 [global _start] 78 _start: 79 80 00000033 48C7C7[00000000] mov rdi, prmpt 81 0000003A E8BCFFFFFF call printString 82 83 84 0000003F 48C7C3[00000000] mov rbx, in_line 85 00000046 49C7C400000000 mov r12, 0 86 read_Characters: 87 0000004D 48C7C000000000 mov rax, SYS_read 88 00000054 48C7C700000000 mov rdi, STDIN 89 0000005B 488D3425[00000000] lea rsi, byte [_char] 90 00000063 48C7C201000000 mov rdx, 1 91 0000006A 0F05 syscall 92 0000006C 8A0425[00000000] mov al, byte [_char] 93 00000073 3C0A cmp al, LF 94 00000075 740E je readDone 95 00000077 49FFC4 inc r12 96 0000007A 4983FC32 cmp r12, STRLEN 97 0000007E 73CB jae read_Characters 98 00000080 8803 mov byte [rbx], al 99 00000082 48FFC3 inc rbx 100 00000085 EBC4 jmp read_Characters 101 readDone: 102 00000087 C60300 mov byte [rbx], NULL 103 104 105 0000008A 48C7C7[00000000] mov rdi, in_line 106 00000091 E865FFFFFF call printString 107 108 00000096 48C7C03C000000 mov rax, SYS_exit 109 0000009D 48C7C700000000 mov rdi, EXIT_SUCCESS 110 000000A4 0F05 syscall