section .data
hello:
db 'Hello world!', 10, 0
section .text
MOV EAX, hello
INT 2 ; print string EAX
PUSH 5
CALL factorial
INT 1 ; print EAX
HLT
factorial:
ENTER
CMP [EBP + 8], 1
JNE .recurse
MOV EAX, 1
JMP .end
.recurse:
MOV EAX, [EBP + 8]
DEC EAX
PUSH EAX
CALL factorial
IMUL [EBP + 8]
.end:
LEAVE
RET
c2VjdGlvbiAuZGF0YQpoZWxsbzoKICAgIGRiICdIZWxsbyB3b3JsZCEnLCAxMCwgMApzZWN0aW9uIC50ZXh0CiAgICBNT1YgRUFYLCBoZWxsbwogICAgSU5UIDIgICA7IHByaW50IHN0cmluZyBFQVgKCiAgICBQVVNIIDUKICAgIENBTEwgZmFjdG9yaWFsCiAgICBJTlQgMSAgIDsgcHJpbnQgRUFYCiAgICBITFQKCmZhY3RvcmlhbDoKICAgIEVOVEVSCiAgICAKICAgIENNUCBbRUJQICsgOF0sIDEKICAgIEpORSAucmVjdXJzZQogICAgTU9WIEVBWCwgMQogICAgSk1QIC5lbmQKICAgIAoucmVjdXJzZToKICAgIE1PViBFQVgsIFtFQlAgKyA4XQogICAgREVDIEVBWAoKICAgIFBVU0ggRUFYCiAgICBDQUxMIGZhY3RvcmlhbAogICAgCiAgICBJTVVMIFtFQlAgKyA4XQogICAgCi5lbmQ6CiAgICBMRUFWRQogICAgUkVUCg==