%macro print_ 1
mov eax, 4
mov ebx, 1
mov ecx, %1
call print
%endmacro
%macro exit_ 1
mov eax, 1
mov ebx, %1
int 80h
%endmacro
SECTION .data
hello:
db "Hello World!",0x0A,0
SECTION .text
global _start
_start:
print_ hello
exit_ 0
;print code called by print_ macro
print:
push ecx
count:
inc ecx
cmp byte [ecx], 0
jne count
mov edx, ecx
pop ecx
sub edx, ecx
int 80h
ret
JW1hY3JvIHByaW50XyAxCiAgICBtb3YgZWF4LCA0CiAgICBtb3YgZWJ4LCAxCiAgICBtb3YgZWN4LCAlMQoKICAgIGNhbGwgcHJpbnQKJWVuZG1hY3JvCgolbWFjcm8gZXhpdF8gMQogICAgbW92IGVheCwgMQogICAgbW92IGVieCwgJTEKICAgIGludCA4MGgKJWVuZG1hY3JvCgpTRUNUSU9OIC5kYXRhCiAgICBoZWxsbzoKICAgICAgICBkYiAiSGVsbG8gV29ybGQhIiwweDBBLDAgICAgICAgCgpTRUNUSU9OIC50ZXh0CiAgICBnbG9iYWwgX3N0YXJ0CgogICAgX3N0YXJ0OgogICAgICAgIHByaW50XyBoZWxsbwogICAgICAgIGV4aXRfIDAKCiAgICA7cHJpbnQgY29kZSBjYWxsZWQgYnkgcHJpbnRfIG1hY3JvCiAgICBwcmludDoKICAgICAgICBwdXNoIGVjeAogICAgICAgIGNvdW50OgogICAgICAgICAgICBpbmMgZWN4CiAgICAgICAgICAgIGNtcCBieXRlIFtlY3hdLCAwCiAgICAgICAgICAgIGpuZSBjb3VudAogICAgICAgICAgICAKICAgICAgICBtb3YgZWR4LCBlY3gKICAgICAgICBwb3AgZWN4CiAgICAgICAgc3ViIGVkeCwgZWN4CgogICAgICAgIGludCA4MGgKICAgIHJldAogICAgICAgIA==