回答这个问题要先搞清楚负数是如何用二进制表示的。
负数在寄存器中是以二进制补码的形式存在的。
补码=负数的绝对值取反+1
例:-1 的表示
-1 的绝对值在16位的二进制中(字)为0000000000000001
取反得1111111111111110
再+1变成1111111111111111这就是-1在16位寄存器中的真值(VW12)
转换成32位(双字)11111111 11111111 11111111 11111111 (VD10)
VW12≥0,说明双字数VD10的低16位为正无须对高16位(VW10)取反。若VW12 <0,说明此时的VD10 的低16位是负数,要使转换后的双字的值也为负数就须对高16位(VW10)取反 。MOVW 16#FFFF,VW10的作用就是取反。