在c语言中,有符号整数相加溢出的问题是可以检测的,但是无符号整数相加溢出却不知道怎么检测。 比如:unsigned int i1, i2; 怎么检测 i1 + i2 的结果溢出了? 当然在汇编里面,是很容易的,用ADDS指令,再查询CPSR寄存器的进位标志位C就可以知道结果是否溢出。但是,在c语言中如何访问CPSR寄存器?你可能想到嵌入汇编,然后查询CPSR寄存器。可是,当我查看反汇编的指令时,发现ARM C编译器把 i1 + i2 编译成 ADD R3,R2, R1; 而不是ADDS!也就是说,相加结果并不改变进位标志位,即使嵌入汇编,查询CPSR寄存器也是没有用的。 望各位指教,谢谢。 |