# An example of passing input values to a system call
#
# /usr/include/asm/unistd.h # Linux系统调用函数定义
#
# 系统调用期望的参数顺序如下:
# EBX (第1个参数)
# ECX (第2个参数)
# EDX (第3个参数)
# ESI (第4个参数)
# EDI (第5个参数)
#
# 超过6个参数的系统调用使用不同的方法把参数传递给系统调用。 EBX用于保存指向输入参数的内存位置的指针,
# 输入参数按照连续的顺序存储。系统调用使用这个指针访问内存位置以便读取参数。
#
.section .data
output:
.ascii "This is a test message.\n"
output_end:
.equ len, output_end - output
.section .text
.globl main
main:
movl $4, %eax # write
movl $1, %ebx # STDOUT -> 终端设备的标准输出
movl $output, %ecx # 实际内存位置地址存放在ECX中,而不是存放内存位置中的值
movl $len, %edx # 要显示的字符串的长度
int $0x80 # 需有这行代码系统调用才执行
movl $1, %eax
movl $0, %ebx
int $0x80
# gcc -g -o 01 01-systemcall.s -m32
#