ARMv6程序集中的整数是否环绕?

时间:2013-06-22 04:26:49

标签: assembly arm

如果我从整数1开始并重复LSL寄存器中的值,一旦整数溢出,预期的行为是什么?

mov r0,#1 /* 00000000000000000000000000000001 */
lsl r0,#1 /* 00000000000000000000000000000010 */
/* repeat 31 times */
lsl r0,#1 /* 10000000000000000000000000000000 */

在下一个LSL上,应该是程序:

  1. 崩溃
  2. 将r0设置为1
  3. 别的什么? r0 = 0?

1 个答案:

答案 0 :(得分:3)

从v6-M参考手册的A2.2.1节“整数算术”,“移位和旋转操作”小节:

  

(LSL)将位串的每个位移动指定的位数。零点转入   位串的右端。从位串的左端移位的位是   丢弃,除了最后一个这样的位可以作为进位输出产生。

因此它变为0并且设置了进位标志。