使用汇编实现从标准输入获取数据和标准输出输出数据
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) 编辑 收藏 举报