由於這本書介紹的是 32 位元的組語寫法
故在編譯成 64 位元的 code 時會有問題
此時需指定 --32 to as and -m elf_i386 to ld
as source.s --32 -o source.o ld source.o -m elf_i386 -o source.out
另外,如果在 call function 時,想把 label's address pass to function
在 label 前面,需加上 "$"
底下是個 example,max function 會幫忙把資料組裡的最大值找出
並將回傳值放進 %eax register
.section .data list: .long 31,2,199,7,0 .section .text .global _start _start: pushl $list call max addl $4, %esp movl %eax, %ebx movl $1, %eax int $0x80 .type max,@function max: pushl %ebp movl %esp, %ebp movl 8(%ebp), %ebx movl $0, %edi movl $4, %edx imull %edi, %edx addl %ebx, %edx movl (%edx), %eax start_loop: incl %edi movl $4, %edx imull %edi, %edx addl %ebx, %edx movl (%edx), %ecx cmpl $0, %ecx je end_loop cmpl %eax, %ecx jle start_loop movl %ecx, %eax jmp start_loop end_loop: movl %ebp, %esp popl %ebp ret
沒有留言:
張貼留言