add source, destination
addb $10, %al
addw %bx, %cx
addl data, %eax
addl %eax, %eax
.section .data
data:
.int 40
.section .text
.global _start
_start:
nop
movl $0, %eax
movl $0, %ebx
movl $0, %ecx
movb $20, %al
addb $10, %al
movsx %al, %eax
movw $100, %cx
addw %cx, %bx
movsx %bx, %ebx
movl $100, %edx
addl %edx, %edx
addl data, %eax
addl %eax, data
movl $1, %eax
movl $0, %ebx
int $0x80
(gdb) print $eax
$1 = 70
(gdb) print $ebx
$2 = 100
(gdb) print $ecx
$3 = 100
(gdb) print $edx
$4 = 200
(gdb) x/d &data
0x80490b4 <data>: 110
.section .text
.global _start
_start:
nop
movl $0, %ebx
movb $190, %bl
movb $100, %al
addb %al, %bl
jc over
movl $1, %eax
int $0x80
over:
movl $1, %eax
movl $0, %ebx
int $0x80
$ ./addtest
$ echo $?
0
$ ./addtest
$ echo $?
200
.section .data
output:
.asciz "The result is %d\\n"
.section .text
.global _start
_start:
movl $-1590876934, %ebx
movl $-1259230143, %eax
addl %eax, %ebx
jo over
pushl %ebx
pushl $output
call printf
add $8, %esp
pushl $0
call exit
over:
pushl $0
pushl $output
call printf
add $8, %esp
pushl $0
call exit
$ as -o add_overflow.o add_overflow.s
$ ld -dynamic-linker /lib/ld-linux.so.2 -lc -o add_overflow add_overflow.o
$ ./add_overflow
The result is 0
$ ./add_overflow
The result is -316799948
.section .data
data1:
.quad 7252051615
data2:
.quad 5732348928
output:
.asciz "The result is %qd\\n"
.section .text
.global _start
_start:
movl data1, %ebx
movl data1+4, %eax
movl data2, %edx
movl data2+4, %ecx
addl %ebx, %edx
adcl %eax, %ecx
pushl %ecx
pushl %edx
pushl $output
call printf
addl $12, %esp
pushl $0
call exit
$ ./adc
The result is 12984400543
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |