# An example of detecting an overflow condition
# 带符号整数加法中使用溢出标志检测错误
#
# 对于无符号整数,在了解加法结果是否超出数据值的界限方面,进位标志是至关重要的。
# 如果不能确定输入值的长度,在执行无符号整数的加法时,总是应该检查进位标志。
# 如果知道输入界限,就可以不必检查进位标志。
#
# 处理带符号整数时,进位标志是没有用处的。
# 不仅结果值过大时会设置它,而且只要结果值小于零,也会设置它。
# 虽然它对无符号整数有所帮助,但是对于带符号整数,它是没有意义的(甚至会带来麻烦)
#
# 替换的做是,在使用带符号整数时,必须关注溢出标志。
# 当结果溢出正值或负值界限时,这个标志会被设置为1
#
# 将带符号整数相加时,如果不确定输入数据的长度,那么检查溢出标志以便了解错误情况是很重要的。
#
.section .data
output:
.asciz "The result is %d\n"
.section .text
.globl main
main:
movl $-1590876934, %ebx
movl $-1259230143, %eax
addl %eax, %ebx
jo over
push %ebx
push $output
call printf
add $8, %esp
push $0
call exit
over:
push $0
push $output
call printf
add $8, %esp
push $0
call exit
# gcc -g -o 03 03-overflow.s -m32
#
# The result is 0
#