编辑代码

section .data
    n1 dd 81          ;
    n2 dd 100         ;
    a_t dq 1         ; 
    enl db 10        ;
    digit db 0       ;
    buf resb 20      ;

section .text
    global _start

_start:
    ; 
    mov eax, [n1]
    push rax
    call calc_sqrt
    add rsp, 8
    call print_sqrt
    call print_newline

    ;
    mov eax, [n2]
    push rax
    call calc_sqrt
    add rsp, 8
    call print_sqrt
    call print_newline

    ; Exit program
    mov rax, 60
    xor rdi, rdi
    syscall

calc_sqrt:
    sub rsp, 32
    mov [rsp+24], rax
    shr rax, 1
    add rax, 1
    mov [rsp+8], rax
    xor rcx, rcx

calc_loop:
    mov rax, [rsp+24]
    cqo
    idiv qword [rsp+8]
    add rax, [rsp+8]
    shr rax, 1
    mov [rsp+16], rax
    mov rax, [rsp+8]
    sub rax, [rsp+16]
    test rax, rax
    js nega
    jmp test
    nega:
        neg rax

    test:
    cmp rax, [a_t]
    jl jump_out
    mov rax, [rsp+16]
    mov [rsp+8], rax
    inc rcx
    cmp rcx, 1000
    jge jump_out
    jmp calc_loop

jump_out:
    mov eax, [rsp+8]
    add rsp, 32
    ret

print_sqrt:
    sub rsp, 8
    mov [rsp], rax
    xor r14, r14
    mov rbx, 10
    test rax, rax
    conv_loop_start:
        cqo
        idiv rbx
        add dl, '0'
        mov [buf + r14], dl
        inc r14
        cmp rax, 0
        jnz conv_loop_start

    print_loop_start:
        dec r14
        mov al, [buf + r14]
        mov [digit], al
        mov rax, 1
        mov rdi, 1
        mov rsi, digit
        mov rdx, 1
        syscall
        cmp r14, 0
        jnz print_loop_start

    mov rax, [rsp]
    add rsp, 8
    ret

print_newline:
    mov rax, 1
    mov rdi, 1
    mov rsi, enl
    mov rdx, 1
    syscall
    ret