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


 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

优质内容筛选与推荐>>
1、使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序 good(从VS2012 update1开始支持xp和c++11)
2、广场铺砖问题(状态压缩dp,贴砖)
3、超越队西柚考勤系统——Beta版本发布
4、菜鸡的Java笔记 - java 枚举
5、C++的静态联编和动态联编


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号