1

如果我从整数开始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 ?
4

1 回答 1

3

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

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

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

于 2013-06-22T04:30:42.667 回答