x86-64平台下无符号128位除以64位的高效实现方法
x86-64下128位无符号数除以64位除数的高效实现
你之前对DIV指令的功能理解有误——x86-64架构中,DIV r/m64指令本身就是专门用来处理128位无符号被除数除以64位除数的操作,完全不需要手动实现长除法。
指令核心逻辑
当执行DIV rdi时:
- 被除数是
rdx:rax组成的128位无符号数(低64位在rax,高64位在rdx) - 除数是
rdi中的64位无符号数 - 执行完成后,商被存入
rax,余数存入rdx
关键注意点
- 执行
DIV前要保证rdx的值是被除数的高64位,不要误修改 - 如果除数为0,或者商的结果超出64位范围(即
rdx >= rdi),会触发除法错误异常(#DE)
示例汇编代码片段
; 前提:rdx:rax已装载128位被除数,rdi已装载64位除数 div rdi ; 执行128位÷64位无符号除法 ; 执行后:rax = (rdx:rax) / rdi,rdx = (rdx:rax) % rdi
内容的提问来源于stack exchange,提问作者HeapUnderStop
相关产品推荐
相关产品推荐

