selph
selph
发布于 2022-01-09 / 405 阅读
0
0

《xchg rax,rax》片段分析0x08--求二者平均数

前言

本次是该系列的的第0x08篇


实验环境:

  • Windows10 + VS2022 + masm

0x08

代码片段链接:xorpd | xchg rax,rax 0x08

add      rax,rdx
rcr      rax,1

代码分析

本节也没啥陌生的指令,这里使用rcr指令进行循环右移操作,对两数和进行循环右移

rcr指令会把溢出位当作是数的最高位进行运算,如果两数和的最后一位是1,则溢出标记位会标志为1

测试代码:

.code
main proc
    lea rax, [0h]
	lea rdx, [0fffh]

	add      rax,rdx	;两数相加
	rcr      rax,1		;循环右移1位,相当于除以二

	ret
main ENDP
END

测试数据:

rax + rdx  = 0xfff

rcr rax, 1
rax = 0x00000000000007ff,CY=1

rcr rax, 2
rax = 0x80000000000003FF,CY=1

评论