Сравение чисел с разрядностью больше 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