企鹅's Blog

Happy coding

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

 

as src.s -o src.o

ld src.o -o test

./test

echo $?

---

Update: 已经由朋友证实返回值是被限制在 0~255 之间的。所以无法回返更大的值。