addl
两个32位数相加。有两个操作数。源操作数和目的操作数。以addl %edx,%eax为例,%eax=%eax+%edx。无符号数的加法和有符号数的加法都可以用addl指令执行。
.section .rodata
.LC0:.string "%d\n"
.section .text
.global main
main:
pushl %ebp
movl %esp,%ebp
movl $11,%eax
movl $22,%edx
addl %edx,%eax
pushl %eax
pushl $.LC0
call printf
addl $8,%esp
movl %ebp,%esp
popl %ebp
ret
输出:
33
有趣的是addl只能进行32位的加法,如果数据超出运算范围,会有溢出。
.section .rodata
.LC0:.string "%d\n"
.section .text
.global main
main:
pushl %ebp
movl %esp,%ebp
movl $2147483647,%eax
movl $2,%edx
addl %edx,%eax
pushl %eax
pushl $.LC0
call printf
addl $8,%esp
movl %ebp,%esp
popl %ebp
ret
输出:
-2147483647
subl
两个32位数相减。有两个操作数。源操作数和目的操作数。以subl %edx,%eax为例,%eax&#