Я ищу для вывода целого числа, используя чистую сборку. Я использую nasm на 64-битной Linux-машине. На данный момент я ищу способ вывода целых чисел для отладки компилятора, но я хочу использовать тот же код для написания ОС, что также является причиной того, что я просто не использую printf(). После долгих поисков и разочарований я придумал этот код
    SECTION .data
var:    db  "      ",10,0
    SECTION .text
global main
global _printc
global _printi
main:
    mov rax, 90
    push    rax
    call    _printi
    xor rbx, rbx
    mov rax, 1
    int 0x80
_printi:
    pushf
    push    rax
    push    rbx
    push    rcx
    push    rdx
    mov rax, [rsp+48]
    mov rcx, 4
.start:
    dec rcx
    xor rdx, rdx
    mov rbx, 10
    div rbx
    add rdx, 48
    mov [var+rcx], dl
    cmp rax, 0
    jne .start
    mov rax, [var]
    push    rax
    call    _printc
    pop rax
    pop rdx
    pop rcx
    pop rbx
    pop rax
    popf
    ret
_printc:
    push    rax
    push    rbx
    push    rcx
    push    rdx
    mov rax, [rsp+40]
    mov [var], rax
    mov rax, 4
    mov rbx, 1
    mov rcx, var
    mov rdx, 4
    int 0x80
    pop rdx
    pop rcx
    pop rbx
    pop rax
    ret
Обратите внимание, что я буду заменять вызовы 0x80 вызовами BIOS при портировании в ОС.
Мой вопрос заключается в том, как оптимизировать или даже преувеличивать этот код дальше. Моя первая мысль заключалась в том, чтобы заменить нажатие всех регистров по отдельности, но не существует 64-разрядной инструкции pusha...
