global _start
section .data
buffer dw 0h
_toHex db "0123456789ABCDEF"
section .text
_start:
xor edx, edx
mov eax, 1
mov ecx, 5; fac(5)
call fac
mov ecx, eax
call toHex
mov ecx, buffer
mov edx, 04h
call write
exit:
mov eax, 01h ; exit()
xor ebx, ebx ; errno
int 80h
read:
mov eax, 03h ; read()
mov ebx, 00h ; stdin
int 80h
ret
write:
mov eax, 04h ; write()
mov ebx, 01h ; stdout
int 80h
ret
fac:
cmp ecx, 1
jbe _facend
mul ecx
dec ecx
call fac
_facend:
ret
toHex:
xor ebx, ebx
mov al, cl
and al, 01111b
mov ah, cl
shr ah, 4
xor ebx, ebx
mov bl, al
xor edx, edx
mov dh, byte [_toHex+ebx]
xor ebx, ebx
mov bl, ah
mov dl, byte [_toHex+ebx]
xor ecx, ecx
mov cx, "0x"
mov [buffer], cx
mov [buffer+2], dx
ret
CWdsb2JhbCBfc3RhcnQKCnNlY3Rpb24gLmRhdGEKCWJ1ZmZlcglkdwkwaAoJX3RvSGV4IGRiICIwMTIzNDU2Nzg5QUJDREVGIgoKc2VjdGlvbiAudGV4dAoKX3N0YXJ0OgoJeG9yIGVkeCwgZWR4Cgltb3YgZWF4LCAxCgltb3YgZWN4LCA1OyBmYWMoNSkKCWNhbGwgZmFjCgltb3YgZWN4LCBlYXgKCWNhbGwgdG9IZXgKCW1vdiAgICAgICAgICAgICBlY3gsIGJ1ZmZlcgogICAgICAgIG1vdiAgICAgICAgICAgICBlZHgsIDA0aAogICAgICAgIGNhbGwgICAgICAgICAgICB3cml0ZQpleGl0OgoJbW92CQllYXgsIDAxaAkJOyBleGl0KCkKCXhvcgkJZWJ4LCBlYngJCTsgZXJybm8KCWludAkJODBoCgoKcmVhZDoKCW1vdgkJZWF4LCAwM2gJCTsgcmVhZCgpCgltb3YJCWVieCwgMDBoCQk7IHN0ZGluCglpbnQJCTgwaAoJcmV0CndyaXRlOgoJbW92CQllYXgsIDA0aAkJOyB3cml0ZSgpCgltb3YJCWVieCwgMDFoCQk7IHN0ZG91dAoJaW50CQk4MGgKCXJldApmYWM6CgljbXAgZWN4LCAxCglqYmUgX2ZhY2VuZAoJCW11bCBlY3gKCQlkZWMgZWN4CgkJY2FsbCBmYWMKX2ZhY2VuZDoKCQlyZXQKdG9IZXg6Cgl4b3IgZWJ4LCBlYngKCW1vdiBhbCwgY2wKCWFuZCBhbCwgMDExMTFiCgltb3YgYWgsIGNsCglzaHIgYWgsIDQKCXhvciBlYngsIGVieAoJbW92IGJsLCBhbAoJeG9yIGVkeCwgZWR4Cgltb3YgZGgsIGJ5dGUgW190b0hleCtlYnhdCgl4b3IgZWJ4LCBlYngKCW1vdiBibCwgYWgKCW1vdiBkbCwgYnl0ZSBbX3RvSGV4K2VieF0KCXhvciBlY3gsIGVjeAoJbW92IGN4LCAiMHgiCgltb3YgW2J1ZmZlcl0sIGN4Cgltb3YgW2J1ZmZlcisyXSwgZHgKCXJldA==