;SUMA DE DOS NUMEROS LA RESTA ES EL PRIMERO AL SEGUNDO
section .data
    ; Mensaje de resultado
    mensaje db "Resultado: "
    longitud equ $ - mensaje

    ;Reserva del resultado delimita a 64 byts pero podemos ponerlo en equ $ - resultado
    resultado times 64 db 0
    resultado_lem equ 64

section .text
    global _start

_start:
    ;Mostrar mensaje de resultado
    mov rax, 1
    mov rdi, 1
    mov rsi, mensaje
    mov rdx, longitud
    syscall

    ;Sumar los numeros
    mov rax, 561561561
    add rax, 5155

    ;Divisición para obtener la unidades, decenas, centenas, etc
    mov rbx, 10             ;Divisor 
    mov rsi, resultado_lem  ;Cuanto va imprimer/tamaño
    mov rcx, 0              ;Contador cuantos digitos almacenamos 

    ;El resultado se convierte de derecha a izquierda
    convertir:
        xor rdx, rdx        ;Limpiar y colocar 0
        div rbx             ;Dividir

        add dl, '0'         ;Convertir residuo a caracter ASCII
        dec rsi             ;Retroceder una posicion
        mov [resultado + rsi], dl ;Guarda el caracter en resultado sumando el retroceso de posición
        inc rcx             ;Contador del los digitos

        test rax, rax       ;Comprueba que el cociente es cero
        jnz convertir       ;Si no es cero repite, cuando todo se almaceno y es 0 sale para imprimir

    ;Impresion del resultado
    mov rax, 1
    mov rdi, 1
    lea rsi, [resultado + rsi] ;Movemos los datos a rsi para su impresión
    mov rdx, rcx            ;Cantidad real de digitos
    syscall

    ; Terminar programa
    mov rax, 60
    xor rdi, rdi
    syscall

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: