1 # 目的:
2 # 从STDIN获取输入数据,然后从STDOUT中输出数据
3
4 ####################################
5 .section .data
6 #######常数#######
7
8 # 系统调用号
9 .equ SYS_WRITE,4
10 .equ SYS_READ,3
11 .equ SYS_EXIT,1
12
13 # 标准文件描述符
14 .equ STDIN,0
15 .equ STDOUT,1
16 .equ STDERR,2
17
18 # 系统调用中断
19 .equ LINUX_SYSCALL,0x80
20 .equ END_OF_FILE,0 # 表明到达文件结束处
21
22 ####################################
23 .section .bss
24 .equ BUFFER_SIZE,500
25 .lcomm BUFFER_DATA,BUFFER_SIZE
26
27 ####################################
28 .section .text
29 .global _start
30 _start:
31 ###主循环开始###
32 read_loop_login:
33
34 ###从STDIN中读取一个数据块###
35 movl $SYS_READ,%eax
36 # 从STDIN读入数据
37 movl $STDIN,%ebx
38 # 放置读取数据的存储位置
39 movl $BUFFER_DATA,%ecx
40 # 缓冲区大小
41 movl $BUFFER_SIZE,%edx
42 # 读取缓冲区大小返回到%eax中
43 int $LINUX_SYSCALL
44
45 ###读取输入数据有误###
46 cmpl $0,%eax
47 jle end_loop
48
49 ###将数据块写入STDOUT###
50 # 缓冲区大小
51 movl %eax,%edx
52 movl $SYS_WRITE,%eax
53 # 输出到STDOUT
54 movl $STDOUT,%ebx
55 # 缓存区位置
56 movl $BUFFER_DATA,%ecx
57 # 输出缓冲区数据到STDOUT
58 int $LINUX_SYSCALL
59
60 ###循环继续###
61 jmp read_loop_login
62
63 end_loop:
64 ###退出###
65 movl $SYS_EXIT,%eax
66 movl $0,%ebx
67 int $LINUX_SYSCALL