使用汇编实现从标准输入获取数据和标准输出输出数据

 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

 

posted on 2015-04-18 21:06  C Pointer  阅读(1703)  评论(0编辑  收藏  举报

导航