您的位置:首页 > 其它

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

2015-04-18 21:06 393 查看
# 目的:
#    从STDIN获取输入数据,然后从STDOUT中输出数据

####################################
.section .data
#######常数#######

# 系统调用号
.equ SYS_WRITE,4
.equ SYS_READ,3
.equ SYS_EXIT,1

# 标准文件描述符
.equ STDIN,0
.equ STDOUT,1
.equ STDERR,2

# 系统调用中断
.equ LINUX_SYSCALL,0x80
.equ END_OF_FILE,0    # 表明到达文件结束处

####################################
.section .bss
.equ BUFFER_SIZE,500
.lcomm BUFFER_DATA,BUFFER_SIZE

####################################
.section .text
.global _start
_start:
###主循环开始###
read_loop_login:

###从STDIN中读取一个数据块###
movl $SYS_READ,%eax
# 从STDIN读入数据
movl $STDIN,%ebx
# 放置读取数据的存储位置
movl $BUFFER_DATA,%ecx
# 缓冲区大小
movl $BUFFER_SIZE,%edx
# 读取缓冲区大小返回到%eax中
int $LINUX_SYSCALL

###读取输入数据有误###
cmpl $0,%eax
jle end_loop

###将数据块写入STDOUT###
# 缓冲区大小
movl %eax,%edx
movl $SYS_WRITE,%eax
# 输出到STDOUT
movl $STDOUT,%ebx
# 缓存区位置
movl $BUFFER_DATA,%ecx
# 输出缓冲区数据到STDOUT
int $LINUX_SYSCALL

###循环继续###
jmp read_loop_login

end_loop:
###退出###
movl $SYS_EXIT,%eax
movl $0,%ebx
int $LINUX_SYSCALL
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐