diff --git a/src/Sully/Sully.s b/src/Sully/Sully.s index ad0801f..0d80865 100644 --- a/src/Sully/Sully.s +++ b/src/Sully/Sully.s @@ -1,7 +1,7 @@ global _start section .rodata -src: db "Hello world", 0 +src: db "", 103, 108, 111, 98, 97, 108, 32, 95, 115, 116, 97, 114, 116, 10, 10, 115, 101, 99, 116, 105, 111, 110, 32, 46, 114, 111, 100, 97, 116, 97, 10, 115, 114, 99, 58, 32, 100, 98, 32, 126, 10, 115, 114, 99, 95, 108, 101, 110, 58, 32, 101, 113, 117, 32, 36, 32, 45, 32, 115, 114, 99, 10, 115, 101, 112, 58, 32, 100, 98, 32, 34, 44, 32, 34, 10, 122, 101, 114, 111, 95, 115, 116, 114, 58, 32, 100, 98, 32, 34, 48, 34, 10, 102, 108, 97, 103, 115, 58, 32, 100, 113, 32, 53, 55, 56, 10, 105, 58, 32, 100, 98, 32, 53, 32, 43, 32, 34, 48, 34, 10, 10, 115, 101, 99, 116, 105, 111, 110, 32, 46, 98, 115, 115, 10, 37, 100, 101, 102, 105, 110, 101, 32, 66, 85, 70, 70, 95, 83, 73, 90, 69, 32, 49, 48, 50, 52, 10, 10, 97, 108, 105, 103, 110, 32, 66, 85, 70, 70, 95, 83, 73, 90, 69, 10, 98, 117, 102, 102, 101, 114, 58, 32, 114, 101, 115, 98, 32, 66, 85, 70, 70, 95, 83, 73, 90, 69, 10, 10, 115, 101, 99, 116, 105, 111, 110, 32, 46, 100, 97, 116, 97, 10, 102, 100, 58, 32, 100, 113, 32, 49, 10, 98, 117, 102, 102, 95, 108, 101, 110, 58, 32, 100, 100, 32, 48, 10, 102, 105, 108, 101, 110, 97, 109, 101, 58, 32, 100, 98, 32, 34, 83, 117, 108, 108, 121, 95, 120, 46, 115, 34, 44, 32, 48, 10, 10, 115, 101, 99, 116, 105, 111, 110, 32, 46, 116, 101, 120, 116, 10, 10, 37, 109, 97, 99, 114, 111, 32, 69, 88, 73, 84, 32, 49, 10, 9, 109, 111, 118, 32, 114, 100, 105, 44, 32, 37, 49, 10, 9, 109, 111, 118, 32, 101, 97, 120, 44, 32, 54, 48, 32, 59, 32, 83, 89, 83, 95, 69, 88, 73, 84, 10, 9, 115, 121, 115, 99, 97, 108, 108, 10, 37, 101, 110, 100, 109, 97, 99, 114, 111, 10, 10, 111, 112, 101, 110, 95, 115, 117, 108, 108, 121, 58, 10, 9, 109, 111, 118, 32, 97, 108, 44, 32, 98, 121, 116, 101, 32, 91, 114, 101, 108, 32, 105, 93, 32, 59, 32, 108, 111, 97, 100, 32, 105, 32, 105, 110, 32, 97, 108, 10, 9, 109, 111, 118, 32, 98, 121, 116, 101, 32, 91, 114, 101, 108, 32, 102, 105, 108, 101, 110, 97, 109, 101, 32, 43, 32, 54, 93, 44, 32, 97, 108, 32, 59, 32, 102, 105, 108, 101, 110, 97, 109, 101, 91, 54, 93, 32, 61, 32, 97, 108, 10, 10, 9, 109, 111, 118, 32, 114, 97, 120, 44, 32, 50, 32, 59, 32, 83, 89, 83, 95, 79, 80, 69, 78, 10, 9, 108, 101, 97, 32, 114, 100, 105, 44, 32, 91, 114, 101, 108, 32, 102, 105, 108, 101, 110, 97, 109, 101, 93, 32, 59, 32, 115, 101, 116, 32, 102, 105, 108, 101, 110, 97, 109, 101, 10, 9, 109, 111, 118, 32, 114, 115, 105, 44, 32, 91, 114, 101, 108, 32, 102, 108, 97, 103, 115, 93, 32, 59, 32, 115, 101, 116, 32, 102, 108, 97, 103, 115, 10, 9, 109, 111, 118, 32, 114, 100, 120, 44, 32, 48, 54, 54, 52, 111, 32, 59, 32, 115, 101, 116, 32, 112, 101, 114, 109, 10, 9, 115, 121, 115, 99, 97, 108, 108, 10, 9, 99, 109, 112, 32, 114, 97, 120, 44, 32, 48, 32, 59, 32, 105, 102, 32, 45, 101, 114, 114, 110, 111, 10, 9, 106, 108, 32, 46, 100, 111, 110, 101, 10, 9, 109, 111, 118, 32, 91, 114, 101, 108, 32, 102, 100, 93, 44, 32, 114, 97, 120, 32, 59, 32, 102, 100, 32, 61, 32, 111, 112, 101, 110, 40, 102, 105, 108, 101, 110, 97, 109, 101, 44, 32, 102, 108, 97, 103, 115, 44, 32, 48, 54, 52, 52, 41, 10, 9, 46, 100, 111, 110, 101, 58, 10, 9, 114, 101, 116, 10, 10, 102, 108, 117, 115, 104, 95, 98, 117, 102, 102, 58, 10, 9, 99, 109, 112, 32, 100, 119, 111, 114, 100, 32, 91, 114, 101, 108, 32, 98, 117, 102, 102, 95, 108, 101, 110, 93, 44, 32, 48, 10, 9, 106, 122, 32, 46, 100, 111, 110, 101, 10, 9, 109, 111, 118, 32, 101, 97, 120, 44, 32, 49, 9, 9, 9, 9, 9, 59, 32, 83, 89, 83, 95, 87, 82, 73, 84, 69, 10, 9, 109, 111, 118, 32, 101, 100, 105, 44, 32, 91, 114, 101, 108, 32, 102, 100, 93, 9, 9, 9, 59, 32, 115, 101, 116, 32, 102, 100, 10, 9, 108, 101, 97, 32, 114, 115, 105, 44, 32, 91, 114, 101, 108, 32, 98, 117, 102, 102, 101, 114, 93, 9, 9, 59, 32, 115, 101, 116, 32, 97, 100, 100, 114, 10, 9, 109, 111, 118, 32, 101, 100, 120, 44, 32, 91, 114, 101, 108, 32, 98, 117, 102, 102, 95, 108, 101, 110, 93, 9, 9, 59, 32, 115, 101, 116, 32, 108, 101, 110, 10, 9, 115, 121, 115, 99, 97, 108, 108, 9, 9, 9, 9, 9, 9, 59, 32, 119, 114, 105, 116, 101, 40, 32, 102, 100, 44, 32, 97, 100, 100, 114, 44, 32, 108, 101, 110, 32, 41, 10, 9, 109, 111, 118, 32, 100, 119, 111, 114, 100, 32, 91, 114, 101, 108, 32, 98, 117, 102, 102, 95, 108, 101, 110, 93, 44, 32, 48, 9, 59, 32, 98, 117, 102, 102, 95, 108, 101, 110, 32, 61, 32, 48, 10, 9, 46, 100, 111, 110, 101, 58, 10, 9, 114, 101, 116, 10, 10, 10, 59, 32, 112, 97, 114, 97, 109, 58, 32, 97, 108, 32, 61, 32, 98, 121, 116, 101, 32, 116, 111, 32, 97, 100, 100, 10, 97, 100, 100, 95, 116, 111, 95, 98, 117, 102, 102, 58, 10, 9, 109, 111, 118, 32, 114, 57, 100, 44, 32, 100, 119, 111, 114, 100, 32, 91, 114, 101, 108, 32, 98, 117, 102, 102, 95, 108, 101, 110, 93, 32, 59, 32, 114, 57, 100, 32, 61, 32, 98, 117, 102, 102, 95, 108, 101, 110, 10, 9, 99, 109, 112, 32, 114, 57, 100, 44, 32, 66, 85, 70, 70, 95, 83, 73, 90, 69, 59, 32, 105, 102, 32, 98, 117, 102, 102, 95, 108, 101, 110, 32, 62, 61, 32, 66, 85, 70, 70, 95, 83, 73, 90, 69, 10, 9, 106, 103, 101, 32, 46, 102, 108, 117, 115, 104, 10, 10, 9, 46, 97, 100, 100, 95, 99, 104, 97, 114, 58, 10, 9, 108, 101, 97, 32, 114, 49, 48, 44, 32, 91, 114, 101, 108, 32, 98, 117, 102, 102, 101, 114, 93, 9, 9, 59, 32, 114, 49, 48, 32, 61, 32, 38, 98, 117, 102, 102, 101, 114, 10, 9, 97, 100, 100, 32, 114, 49, 48, 44, 32, 114, 57, 9, 9, 9, 9, 9, 59, 32, 114, 49, 48, 32, 43, 61, 32, 98, 117, 102, 102, 95, 108, 101, 110, 10, 9, 109, 111, 118, 32, 98, 121, 116, 101, 32, 91, 114, 49, 48, 93, 44, 32, 97, 108, 9, 9, 9, 59, 32, 98, 117, 102, 102, 101, 114, 91, 98, 117, 102, 102, 95, 108, 101, 110, 93, 32, 61, 32, 97, 108, 10, 10, 9, 105, 110, 99, 32, 100, 119, 111, 114, 100, 32, 91, 114, 101, 108, 32, 98, 117, 102, 102, 95, 108, 101, 110, 93, 32, 9, 59, 32, 43, 43, 98, 117, 102, 102, 95, 108, 101, 110, 10, 9, 114, 101, 116, 10, 10, 9, 46, 102, 108, 117, 115, 104, 58, 10, 9, 112, 117, 115, 104, 32, 114, 100, 120, 10, 9, 112, 117, 115, 104, 32, 114, 97, 120, 32, 9, 9, 59, 32, 115, 97, 118, 101, 32, 99, 104, 97, 114, 10, 9, 99, 97, 108, 108, 32, 102, 108, 117, 115, 104, 95, 98, 117, 102, 102, 32, 59, 10, 9, 112, 111, 112, 32, 114, 97, 120, 32, 9, 9, 59, 32, 114, 101, 115, 116, 111, 114, 101, 32, 99, 104, 97, 114, 10, 9, 112, 111, 112, 32, 114, 100, 120, 10, 9, 120, 111, 114, 32, 114, 57, 100, 44, 32, 114, 57, 100, 32, 9, 59, 32, 115, 121, 110, 99, 32, 114, 57, 100, 32, 119, 105, 116, 104, 32, 98, 117, 102, 102, 95, 108, 101, 110, 10, 9, 106, 109, 112, 32, 46, 97, 100, 100, 95, 99, 104, 97, 114, 9, 59, 10, 10, 105, 110, 116, 56, 95, 116, 111, 95, 98, 117, 102, 102, 58, 10, 9, 120, 111, 114, 32, 114, 56, 98, 44, 32, 114, 56, 98, 32, 59, 32, 102, 108, 97, 103, 32, 61, 32, 48, 32, 40, 110, 111, 116, 104, 105, 110, 103, 32, 119, 114, 105, 116, 116, 101, 110, 41, 10, 9, 109, 111, 118, 122, 120, 32, 101, 97, 120, 44, 32, 97, 108, 10, 9, 10, 9, 59, 32, 104, 117, 110, 100, 114, 101, 100, 115, 10, 9, 120, 111, 114, 32, 101, 100, 120, 44, 32, 101, 100, 120, 10, 9, 109, 111, 118, 32, 101, 99, 120, 44, 32, 49, 48, 48, 10, 9, 100, 105, 118, 32, 101, 99, 120, 32, 59, 32, 97, 108, 32, 61, 32, 104, 117, 110, 100, 114, 101, 100, 115, 44, 32, 101, 100, 120, 32, 61, 32, 99, 97, 114, 114, 121, 32, 40, 48, 45, 57, 57, 41, 10, 9, 97, 100, 100, 32, 97, 108, 44, 32, 39, 48, 39, 10, 10, 9, 99, 109, 112, 32, 97, 108, 44, 32, 39, 48, 39, 10, 9, 106, 101, 32, 46, 110, 111, 95, 104, 117, 110, 100, 114, 101, 100, 115, 10, 10, 9, 99, 97, 108, 108, 32, 97, 100, 100, 95, 116, 111, 95, 98, 117, 102, 102, 10, 9, 109, 111, 118, 32, 114, 56, 98, 44, 32, 49, 10, 10, 9, 46, 110, 111, 95, 104, 117, 110, 100, 114, 101, 100, 115, 58, 10, 9, 109, 111, 118, 32, 101, 97, 120, 44, 32, 101, 100, 120, 32, 59, 32, 101, 97, 120, 32, 61, 32, 99, 97, 114, 114, 121, 10, 9, 10, 9, 46, 116, 101, 110, 115, 58, 10, 9, 120, 111, 114, 32, 101, 100, 120, 44, 32, 101, 100, 120, 10, 9, 109, 111, 118, 32, 101, 99, 120, 44, 32, 49, 48, 10, 9, 100, 105, 118, 32, 101, 99, 120, 32, 59, 32, 97, 108, 32, 61, 32, 116, 101, 110, 115, 44, 32, 101, 100, 120, 32, 61, 32, 117, 110, 105, 116, 115, 10, 9, 97, 100, 100, 32, 97, 108, 44, 32, 39, 48, 39, 10, 10, 9, 59, 32, 105, 102, 32, 114, 56, 98, 32, 61, 61, 32, 48, 32, 38, 38, 32, 97, 108, 32, 61, 61, 32, 39, 48, 39, 32, 103, 111, 32, 116, 111, 32, 110, 111, 95, 116, 101, 110, 115, 10, 9, 99, 109, 112, 32, 114, 56, 98, 44, 32, 48, 10, 9, 106, 101, 32, 46, 116, 101, 115, 116, 95, 116, 101, 110, 115, 10, 9, 106, 109, 112, 32, 46, 115, 107, 105, 112, 10, 9, 46, 116, 101, 115, 116, 95, 116, 101, 110, 115, 58, 10, 10, 9, 99, 109, 112, 32, 97, 108, 44, 32, 39, 48, 39, 10, 9, 106, 101, 32, 46, 110, 111, 95, 116, 101, 110, 115, 10, 10, 9, 46, 115, 107, 105, 112, 58, 10, 10, 9, 99, 97, 108, 108, 32, 97, 100, 100, 95, 116, 111, 95, 98, 117, 102, 102, 10, 9, 109, 111, 118, 32, 114, 56, 98, 44, 32, 49, 10, 10, 9, 46, 110, 111, 95, 116, 101, 110, 115, 58, 10, 9, 109, 111, 118, 32, 97, 108, 44, 32, 100, 108, 32, 59, 32, 97, 108, 32, 61, 32, 117, 110, 105, 116, 115, 10, 9, 10, 9, 10, 9, 46, 117, 110, 105, 116, 115, 58, 10, 9, 97, 100, 100, 32, 97, 108, 44, 32, 39, 48, 39, 10, 9, 99, 97, 108, 108, 32, 97, 100, 100, 95, 116, 111, 95, 98, 117, 102, 102, 10, 9, 114, 101, 116, 10, 10, 95, 115, 116, 97, 114, 116, 58, 10, 9, 59, 109, 111, 118, 32, 100, 119, 111, 114, 100, 32, 91, 114, 101, 108, 32, 98, 117, 102, 102, 95, 108, 101, 110, 93, 44, 32, 49, 10, 9, 59, 109, 111, 118, 32, 98, 121, 116, 101, 32, 91, 114, 101, 108, 32, 98, 117, 102, 102, 101, 114, 93, 44, 32, 49, 50, 54, 32, 10, 9, 59, 99, 97, 108, 108, 32, 102, 108, 117, 115, 104, 95, 98, 117, 102, 102, 10, 10, 9, 99, 97, 108, 108, 32, 111, 112, 101, 110, 95, 115, 117, 108, 108, 121, 10, 9, 99, 109, 112, 32, 114, 97, 120, 44, 32, 48, 10, 9, 106, 108, 32, 46, 101, 120, 105, 116, 32, 59, 32, 105, 102, 32, 45, 101, 114, 114, 110, 111, 10, 10, 9, 112, 117, 115, 104, 32, 114, 49, 52, 59, 32, 105, 110, 116, 32, 105, 10, 9, 120, 111, 114, 32, 114, 49, 52, 44, 32, 114, 49, 52, 32, 59, 32, 105, 32, 61, 32, 48, 10, 9, 59, 32, 119, 104, 105, 108, 101, 32, 114, 49, 52, 32, 40, 105, 41, 32, 60, 61, 32, 115, 114, 99, 95, 108, 101, 110, 10, 9, 46, 108, 111, 111, 112, 58, 10, 9, 99, 109, 112, 32, 114, 49, 52, 44, 32, 115, 114, 99, 95, 108, 101, 110, 10, 9, 106, 103, 101, 32, 46, 108, 100, 111, 110, 101, 10, 10, 9, 59, 32, 109, 111, 118, 101, 32, 115, 114, 99, 91, 114, 49, 52, 93, 32, 105, 110, 32, 97, 108, 10, 9, 108, 101, 97, 32, 114, 115, 105, 44, 32, 91, 114, 101, 108, 32, 115, 114, 99, 93, 10, 9, 97, 100, 100, 32, 114, 115, 105, 44, 32, 114, 49, 52, 10, 9, 109, 111, 118, 122, 120, 32, 101, 97, 120, 44, 32, 98, 121, 116, 101, 32, 91, 114, 115, 105, 93, 10, 10, 9, 99, 109, 112, 32, 97, 108, 44, 32, 49, 50, 54, 10, 9, 106, 101, 32, 46, 101, 115, 99, 97, 112, 101, 95, 115, 116, 114, 105, 110, 103, 10, 10, 9, 59, 32, 97, 100, 100, 32, 97, 108, 32, 116, 111, 32, 98, 117, 102, 102, 10, 9, 99, 97, 108, 108, 32, 97, 100, 100, 95, 116, 111, 95, 98, 117, 102, 102, 10, 10, 9, 105, 110, 99, 32, 114, 49, 52, 9, 10, 9, 106, 109, 112, 32, 46, 108, 111, 111, 112, 10, 9, 46, 108, 100, 111, 110, 101, 58, 10, 9, 112, 111, 112, 32, 114, 49, 52, 59, 32, 114, 101, 108, 101, 97, 115, 101, 32, 105, 10, 10, 9, 99, 97, 108, 108, 32, 102, 108, 117, 115, 104, 95, 98, 117, 102, 102, 10, 10, 9, 59, 32, 99, 108, 111, 115, 101, 40, 102, 100, 41, 10, 9, 109, 111, 118, 32, 114, 100, 105, 44, 32, 91, 114, 101, 108, 32, 102, 100, 93, 10, 9, 109, 111, 118, 32, 101, 97, 120, 44, 32, 51, 10, 9, 115, 121, 115, 99, 97, 108, 108, 10, 10, 9, 46, 101, 120, 105, 116, 58, 9, 10, 9, 69, 88, 73, 84, 32, 114, 97, 120, 10, 10, 9, 46, 101, 115, 99, 97, 112, 101, 95, 115, 116, 114, 105, 110, 103, 58, 10, 10, 9, 112, 117, 115, 104, 32, 114, 97, 120, 10, 9, 109, 111, 118, 32, 97, 108, 44, 32, 51, 52, 32, 59, 32, 39, 44, 39, 10, 9, 99, 97, 108, 108, 32, 97, 100, 100, 95, 116, 111, 95, 98, 117, 102, 102, 10, 9, 109, 111, 118, 32, 97, 108, 44, 32, 51, 52, 32, 59, 32, 39, 32, 39, 10, 9, 99, 97, 108, 108, 32, 97, 100, 100, 95, 116, 111, 95, 98, 117, 102, 102, 10, 9, 112, 111, 112, 32, 114, 97, 120, 10, 10, 9, 112, 117, 115, 104, 32, 114, 49, 52, 10, 9, 120, 111, 114, 32, 114, 49, 52, 44, 32, 114, 49, 52, 32, 59, 32, 105, 110, 116, 32, 106, 32, 61, 32, 48, 10, 9, 46, 101, 95, 108, 111, 111, 112, 58, 10, 9, 99, 109, 112, 32, 114, 49, 52, 44, 32, 115, 114, 99, 95, 108, 101, 110, 10, 9, 106, 103, 101, 32, 46, 101, 108, 95, 100, 111, 110, 101, 10, 10, 9, 112, 117, 115, 104, 32, 114, 97, 120, 10, 9, 109, 111, 118, 32, 97, 108, 44, 32, 52, 52, 32, 59, 32, 39, 44, 39, 10, 9, 99, 97, 108, 108, 32, 97, 100, 100, 95, 116, 111, 95, 98, 117, 102, 102, 10, 9, 109, 111, 118, 32, 97, 108, 44, 32, 51, 50, 32, 59, 32, 39, 32, 39, 10, 9, 99, 97, 108, 108, 32, 97, 100, 100, 95, 116, 111, 95, 98, 117, 102, 102, 10, 9, 112, 111, 112, 32, 114, 97, 120, 10, 10, 10, 9, 108, 101, 97, 32, 114, 115, 105, 44, 32, 91, 114, 101, 108, 32, 115, 114, 99, 93, 10, 9, 97, 100, 100, 32, 114, 115, 105, 44, 32, 114, 49, 52, 10, 9, 109, 111, 118, 122, 120, 32, 101, 97, 120, 44, 32, 98, 121, 116, 101, 32, 91, 114, 115, 105, 93, 10, 9, 99, 97, 108, 108, 32, 105, 110, 116, 56, 95, 116, 111, 95, 98, 117, 102, 102, 10, 10, 9, 105, 110, 99, 32, 114, 49, 52, 32, 59, 32, 106, 43, 43, 10, 9, 106, 109, 112, 32, 46, 101, 95, 108, 111, 111, 112, 10, 9, 46, 101, 108, 95, 100, 111, 110, 101, 58, 10, 10, 10, 9, 112, 111, 112, 32, 114, 49, 52, 10, 9, 105, 110, 99, 32, 114, 49, 52, 32, 59, 32, 105, 43, 43, 10, 9, 106, 109, 112, 32, 46, 108, 111, 111, 112, 10, 10 src_len: equ $ - src sep: db ", " zero_str: db "0" @@ -9,7 +9,7 @@ flags: dq 578 i: db 5 + "0" section .bss -%define BUFF_SIZE 8 +%define BUFF_SIZE 1024 align BUFF_SIZE buffer: resb BUFF_SIZE @@ -43,7 +43,7 @@ open_sully: ret flush_buff: - cmp [rel buff_len], 0 + cmp dword [rel buff_len], 0 jz .done mov eax, 1 ; SYS_WRITE mov edi, [rel fd] ; set fd @@ -62,20 +62,69 @@ add_to_buff: jge .flush .add_char: - lea r10, [rel buffer] ; r10 = &buffer - add r10, r9 ; r10 += buff_len - mov byte [r10], al; buffer[buff_len] = al + lea r10, [rel buffer] ; r10 = &buffer + add r10, r9 ; r10 += buff_len + mov byte [r10], al ; buffer[buff_len] = al - inc dword [rel buff_len] ; ++buff_len + inc dword [rel buff_len] ; ++buff_len ret .flush: - push rax ; save char - call flush_buff - pop rax ; restor char - xor r9d, r9d ; sync r9d with buff_len - jmp .add_char + push rdx + push rax ; save char + call flush_buff ; + pop rax ; restore char + pop rdx + xor r9d, r9d ; sync r9d with buff_len + jmp .add_char ; +int8_to_buff: + xor r8b, r8b ; flag = 0 (nothing written) + movzx eax, al + + ; hundreds + xor edx, edx + mov ecx, 100 + div ecx ; al = hundreds, edx = carry (0-99) + add al, '0' + + cmp al, '0' + je .no_hundreds + + call add_to_buff + mov r8b, 1 + + .no_hundreds: + mov eax, edx ; eax = carry + + .tens: + xor edx, edx + mov ecx, 10 + div ecx ; al = tens, edx = units + add al, '0' + + ; if r8b == 0 && al == '0' go to no_tens + cmp r8b, 0 + je .test_tens + jmp .skip + .test_tens: + + cmp al, '0' + je .no_tens + + .skip: + + call add_to_buff + mov r8b, 1 + + .no_tens: + mov al, dl ; al = units + + + .units: + add al, '0' + call add_to_buff + ret _start: ;mov dword [rel buff_len], 1 @@ -98,6 +147,9 @@ _start: add rsi, r14 movzx eax, byte [rsi] + cmp al, 126 + je .escape_string + ; add al to buff call add_to_buff @@ -108,7 +160,6 @@ _start: call flush_buff - ; close(fd) mov rdi, [rel fd] mov eax, 3 @@ -116,3 +167,41 @@ _start: .exit: EXIT rax + + .escape_string: + + push rax + mov al, 34 ; ',' + call add_to_buff + mov al, 34 ; ' ' + call add_to_buff + pop rax + + push r14 + xor r14, r14 ; int j = 0 + .e_loop: + cmp r14, src_len + jge .el_done + + push rax + mov al, 44 ; ',' + call add_to_buff + mov al, 32 ; ' ' + call add_to_buff + pop rax + + + lea rsi, [rel src] + add rsi, r14 + movzx eax, byte [rsi] + call int8_to_buff + + inc r14 ; j++ + jmp .e_loop + .el_done: + + + pop r14 + inc r14 ; i++ + jmp .loop +