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

 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

 

你可能感兴趣的:(数据)