Сравнение больших чисел

Последнее обновление: 02.07.2023

Сравение чисел с разрядностью больше 64 бит - довольно простой процесс. Cначала сравниваем старшие 64 бита - если они не равны, то сравнивать остальные части двух чисел нет смысла. Если же старшие 64 бита равны, сравниваем следующие 64 разряда чисел. Например, сравним 192-разрядные числа:

.data
BigInt1 qword 00000000000000001h,   ; младшие 64 бит
              00000000000000000h,   ; средние 64 бит
              00000000000000003h    ; старшие 64 бит

BigInt2 qword 0ffffffffffffffffh,   ; младшие 64 бит
              0ffffffffffffffffh,   ; средние 64 бит
              00000000000000001h    ; старшие 64 бит
.code
main proc

    mov rax, BigInt1[16]    ; сравниваем старшие 64 бита
    cmp rax, BigInt2[16]
    ja First                ; если первое число больше
    jb Second               ; если второе число больше

    mov rax, BigInt1[8]     ; сравниваем средние 64 бита
    cmp rax, BigInt2[8]
    ja First
    jb Second

    mov rax, BigInt1[0]     ; сравниваем младшие 64 бита
    cmp rax, BigInt2[0]
    ja First
    jb Second

    mov rax, 0  ;   если числа равны, в RAX = 0
    jmp cmp_end

First:
    mov rax, 1      ; если первое число больше, в RAX = 1
    jmp cmp_end
Second:
    mov rax, -1     ; если второе число больше, в RAX = -1

cmp_end:
    ret
main endp
end

В данном случае в зависимости от результата сравнения помещаем в RAX 0, 1 или -1. Поскольку здесь предполагается, что числа беззнаковые, то для сравнения и перехода к определенной метке применяются инструкции ja и jb

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850