Linux 下的汇编编程指南
<<Programming from the Ground Up>>
无意中看到了这本讲 Linux 下的汇编的书,看了几节,很容易看懂,推荐学习 Linux 下的汇编的朋友看一阅,直接下载 PDF。
想起来了,是在 AKA 成员编写的 <<Linux C编程一站式学习>> 中的连接中看到的,这是一本非常有特色的 C 编程教程。
顺手试了其中的第三章中的第二个例子,结果发现 Linux 系统中程序结束时的返回值好像限制在正负 255 以内?
如果 data_items 中的数值有大于 256 的,在程序结束后,echo $? 是打印不出正确的值的。
.section .data
data_items:
.long 3,23,20,11,10,100,125,254,1,0
.section .text
.global _start
_start:
movl $0, %edi
movl data_items(, %edi, 4), %eax
movl %eax, %ebx
start_loop:
cmpl $0, %eax # check end
je loop_exit
incl %edi
movl data_items(, %edi, 4), %eax
cmpl %ebx, %eax
jle start_loop
# swap value
movl %eax, %ebx
# reloop
jmp start_loop
loop_exit:
movl $1, %eax
int $0x80
data_items:
.long 3,23,20,11,10,100,125,254,1,0
.section .text
.global _start
_start:
movl $0, %edi
movl data_items(, %edi, 4), %eax
movl %eax, %ebx
start_loop:
cmpl $0, %eax # check end
je loop_exit
incl %edi
movl data_items(, %edi, 4), %eax
cmpl %ebx, %eax
jle start_loop
# swap value
movl %eax, %ebx
# reloop
jmp start_loop
loop_exit:
movl $1, %eax
int $0x80
as src.s -o src.o
ld src.o -o test
./test
echo $?
---
Update: 已经由朋友证实返回值是被限制在 0~255 之间的。所以无法回返更大的值。