前言
本次是该系列的的第0x0b篇
实验环境:
- Windows10 + VS2022 + masm
0x0b
代码片段链接:xorpd | xchg rax,rax 0x0b
not rdx
neg rax
sbb rdx,-1
代码分析
这里也没有啥陌生的指令在,使用的寄存器有两个:rad和rdx,同时去操作这两个寄存器有什么意义呢,
之前遇到过(不记得具体是哪了)一种使用eax和edx扩展64位数进行运算的情况,这里是x64汇编,应该也是类似,使用rax和rdx扩展到128位数进行运算使用
每行代码的具体分析如下测试代码所示,那么这里的功能是128位整数取反操作
测试代码:
.code
main proc
lea rax, [0]
lea rdx, [2]
;rax和rdx扩展128位数据,rdx:rax
not rdx ;rdx取反,高64位取反
neg rax ;rax取反,低64位取反,然后+1,若rax为0,则CF(CY)=0,否则CF=1
sbb rdx,-1 ;若rax有值,低64位取反+1后有值,则高64位不变,若低64位无值,说明存在进位,高64位+1
ret
main ENDP
END