; Hello World in Assembly (Pure System Calls)
section .data
msg1 db 'Testing 1, 2, 3, 4', 0Ah, 0h ; original string
section .bss ;reserver buffer to store string
reverse resb 256
section .text
global _start
_start:
mov eax, msg1
call string_rev
mov eax, reverse
call printLF
call quit
string_rev:
push ebx
push ecx
push edx
mov ebx, eax
call string_len
mov ecx, eax
mov esi, ebx
mov edi, reverse
add esi, ecx
dec esi
rloop:
cmp ecx, 0
je reverse_done
mov al, [esi]
mov [edi], al
inc edi
dec esi
dec ecx
jmp rloop
reverse_done:
mov byte [edi], 0
pop edx
pop ecx
pop ebx
ret
string_len:
push ebx
mov ebx, eax
next_char:
cmp byte [eax], 0
jz slen_done
inc eax
jmp next_char
slen_done:
sub eax, ebx
pop ebx
ret
printLF:
call print
push eax
mov eax, 0Ah
push eax
mov eax, esp
call print
pop eax
pop eax
ret
print:
push edx
push ecx
push ebx
push eax
call string_len
mov edx, eax
pop eax
mov ecx, eax
mov ebx, 1
mov eax, 4
int 80h
pop ebx
pop ecx
pop edx
ret
quit:
mov ebx, 0
mov eax, 1
int 80h
ret
OyBIZWxsbyBXb3JsZCBpbiBBc3NlbWJseSAoUHVyZSBTeXN0ZW0gQ2FsbHMpCnNlY3Rpb24gLmRhdGEKICAgIG1zZzEgZGIgJ1Rlc3RpbmcgMSwgMiwgMywgNCcsIDBBaCwgMGggIDsgb3JpZ2luYWwgc3RyaW5nCgpzZWN0aW9uIC5ic3MgICAgO3Jlc2VydmVyIGJ1ZmZlciB0byBzdG9yZSBzdHJpbmcKICAgIHJldmVyc2UgcmVzYiAyNTYKCnNlY3Rpb24gLnRleHQKICAgIGdsb2JhbCBfc3RhcnQKCl9zdGFydDoKICAgIG1vdiBlYXgsIG1zZzEKICAgIGNhbGwgc3RyaW5nX3JldgogICAgbW92IGVheCwgcmV2ZXJzZQoKICAgIGNhbGwgcHJpbnRMRgogICAgY2FsbCBxdWl0CgpzdHJpbmdfcmV2OgogICAgcHVzaCBlYngKICAgIHB1c2ggZWN4CiAgICBwdXNoIGVkeAoKICAgIG1vdiBlYngsIGVheAogICAgY2FsbCBzdHJpbmdfbGVuCiAgICBtb3YgZWN4LCBlYXgKCiAgICBtb3YgZXNpLCBlYngKICAgIG1vdiBlZGksIHJldmVyc2UKICAgIGFkZCBlc2ksIGVjeAogICAgZGVjIGVzaQoKcmxvb3A6CiAgICBjbXAgZWN4LCAwCiAgICBqZSByZXZlcnNlX2RvbmUKCiAgICBtb3YgYWwsIFtlc2ldCiAgICBtb3YgW2VkaV0sIGFsCiAgICBpbmMgZWRpCiAgICBkZWMgZXNpCiAgICBkZWMgZWN4CiAgICBqbXAgcmxvb3AKCnJldmVyc2VfZG9uZToKICAgIG1vdiBieXRlIFtlZGldLCAwCiAgICBwb3AgZWR4CiAgICBwb3AgZWN4CiAgICBwb3AgZWJ4CiAgICByZXQKCgoKc3RyaW5nX2xlbjoKICAgIHB1c2ggZWJ4CiAgICBtb3YgZWJ4LCBlYXgKCm5leHRfY2hhcjoKICAgIGNtcCBieXRlIFtlYXhdLCAwCiAgICBqeiBzbGVuX2RvbmUKICAgIGluYyBlYXgKICAgIGptcCBuZXh0X2NoYXIKCnNsZW5fZG9uZToKICAgIHN1YiBlYXgsIGVieAogICAgcG9wIGVieAogICAgcmV0CgoKCnByaW50TEY6CiAgICBjYWxsIHByaW50CiAgICBwdXNoIGVheAogICAgbW92IGVheCwgMEFoCiAgICBwdXNoIGVheAogICAgbW92IGVheCwgZXNwCiAgICBjYWxsIHByaW50CiAgICBwb3AgZWF4CiAgICBwb3AgZWF4CiAgICByZXQKCnByaW50OgogICAgcHVzaCBlZHgKICAgIHB1c2ggZWN4CiAgICBwdXNoIGVieAogICAgcHVzaCBlYXgKICAgIGNhbGwgc3RyaW5nX2xlbgoKICAgIG1vdiBlZHgsIGVheAogICAgcG9wIGVheAogICAgbW92IGVjeCwgZWF4CiAgICBtb3YgZWJ4LCAxCiAgICBtb3YgZWF4LCA0CiAgICBpbnQgODBoCgogICAgcG9wIGVieAogICAgcG9wIGVjeAogICAgcG9wIGVkeAogICAgcmV0CgpxdWl0OgogICAgbW92IGVieCwgMAogICAgbW92IGVheCwgMQogICAgaW50IDgwaAogICAgcmV0