mclangc/test.nasm
2023-03-29 16:13:51 +03:00

63 lines
1.1 KiB
NASM

BITS 64
segment .text
extern WriteConsoleA
extern GetStdHandle
extern ExitProcess
print:
mov r9, -3689348814741910323
sub rsp, 40
mov BYTE [rsp+31], 10
lea rcx, [rsp+30]
.L2:
mov rax, rdi
lea r8, [rsp+32]
mul r9
mov rax, rdi
sub r8, rcx
shr rdx, 3
lea rsi, [rdx+rdx*4]
add rsi, rsi
sub rax, rsi
add eax, 48
mov BYTE [rcx], al
mov rax, rdi
mov rdi, rdx
mov rdx, rcx
sub rcx, 1
cmp rax, 9
ja .L2
lea rax, [rsp+32]
mov edi, 1
sub rdx, rax
xor eax, eax
lea rsi, [rsp+32+rdx]
mov rdx, r8
sub rsp, 8+8+32
mov ecx, -11
call GetStdHandle
mov rcx, rax
mov r8, rdx
mov rdx, rsi
lea r9, [rsp-16]
mov qword [rsp-56], 0
add rsp, 8+8+32+40
call WriteConsoleA
ret
global _start
_start:
sub rsp, 8
addr_0:
;; -- push int 10
mov rax, 10
push rax
addr_1:
;; -- print
pop rdi
call print
addr_2:
mov rcx, 0
call ExitProcess
segment .data
segment .bss
mem: resb 640000