.section .data
UserMsg:
.ascii "Please input the message:"
LenOfUserMsg:
.equ lenMsg, LenOfUserMsg - UserMsg
#.section .bss
# .lcomm resb,
OutputMsg:
.ascii "This is your input:"
LenOfOutputMsg:
.equ lenOutput, LenOfOutputMsg - OutputMsg
.section .bss
.lcomm resb, .section .text
.globl _start
_start:
#display UserMsg
movl $, %eax
movl $, %ecx
movl $UserMsg, %ecx
movl $lenMsg, %edx
int $0x80 #Read what input
movl $, %eax
movl $, %ebx
movl $resb, %ecx
movl $, %edx
int $0x80 #dispaly what you input
movl $, %eax
movl $, %ebx
movl $OutputMsg, %ecx
movl $lenOutput, %edx
int $0x80 movl $, %eax
movl $, %ebx
movl $resb, %ecx
movl $, %edx
int $0x80 movl $, %eax
movl $, %ebx
int $0x80

代码就是这样的。要做什么呢?

很简单:运行后,命令行提示你输入数字或者是字符,然后回车,把你输入的现实出来。

显然,这个用C语言实现起来简直太简单了。

但是,用汇编实现起来同样很简单。

==========知识准备============

在汇编中使用系统调用,只要是将系统调用号复制到eax寄存器。

可以看到每个系统调用都有一个系统调用号。

然后,系统调用必然要使用终端。这里使用的是软中断。int $0x80

比如,要使用exit这个系统调用

movl $1, %eax

int $0x80

某些系统调用有参数,怎么办呢?

在C样式函数中,输入参数存放在堆栈中;系统调用与之不同,需要输入参数被存放在寄存器中。每个输入值按照特定的顺序放到寄存器中。

简而言之。

按照顺序:

ebx  (第1个输入参数)

ecx   (第2个输入参数)

edx  (第3个输入参数)

esi   (第4个输入参数)

edi   (第5个输入参数)

具体的输入顺序,就取决于系统调用中参数的顺序。比如,write(fd, *buf, count)

那么,ebx就是fd,ecx就是*buf,edx就是count

=========程序代码简要说明=============

ebx:文件描述符

ecx:指向要写入的字符串的指针

edx:要写入的字符串长度

write系统调用的值是4,将它存到eax寄存器中。然后将各个参数存放到相应的寄存器中。

需要指出,Linux中,0表示标准输入一般是键盘,1表示标准输出一般是终端屏幕。

首先在终端屏幕打印字符,提示你输入。输入后,使用read存放到一个内存区域。

在使用,write将相应区域的输入值打印出来。

要指出的是,$UserMsg将标签的内存地址存放到ecx中,而不是将实际存放在内存中的值放在ecx中。

附录:

中断向量号

中断向量表

汇编语言调用Linux系统调用read和write的更多相关文章

  1. 使用 Linux 系统调用的内核命令【转】

    转自:http://www.ibm.com/developerworks/cn/linux/l-system-calls/ 探究 SCI 并添加自己的调用 Linux® 系统调用 —— 我们每天都在使 ...

  2. 【原创】xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正. 1. 引出问题 上一篇文章xenomai内核解析--双核系统调用(一)以X86处理器为例,分析了xenomai内核调用的流程, ...

  3. Linux系统调用和库函数调用的区别

    Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思 ...

  4. linux系统调用和库函数调用的区别(转)

    Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).可以参考<Linux程序设计>(英文原版为<Beginning ...

  5. 关于Linux系统调用,内核函数【转】

    转自:http://blog.csdn.net/ubuntulover/article/details/5988220 早上听人说到某个程序的一部分是内核态,另一部分是用户态,需要怎么怎么.当时突然想 ...

  6. Linux系统调用(转载)

    目录: 1. Linux系统调用原理 2. 系统调用的实现 3. Linux系统调用分类及列表 4.系统调用.用户编程接口(API).系统命令和内核函数的关系 5. Linux系统调用实例 6. Li ...

  7. Linux系统调用的实现机制分析

    API/POSIX/C库的关系        系统调用的实现 3.1    系统调用处理程序 添加新系统调用 给Linux添加一个新的系统调用是件相对容易的工作.怎样设计和实现一个系统调用是难题所在, ...

  8. linux内核剖析(六)Linux系统调用详解(实现机制分析)

    本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序接口(API)有怎样的关系.然后,我们考察了Linux内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递 ...

  9. Linux系统调用的运行过程【转】

    本文转自:http://blog.csdn.net/kernel_learner/article/details/7331505 在Linux中,系统调用是用户空间访问内核的唯一手段,它们是内核唯一的 ...

随机推荐

  1. VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)

    前面一节中鸡啄米为大家简单介绍了如何创建Ribbon样式的应用程序框架,本节教程就来初步讲讲怎样为Ribbon Bar添加Ribbon控件. VS2010为Ribbon界面开发提供了Ribbon De ...

  2. Intro to Python for Data Science Learning 6 - NumPy

    NumPy From:https://campus.datacamp.com/courses/intro-to-python-for-data-science/chapter-4-numpy?ex=1 ...

  3. ArcGIS 10——地理数据库管理GIS数据

    写本文的最初意向是当前正在进行的项目中有实现ESRI版本化数据管理的功能模块,碰到一些棘手的问题,几经周折还是决定系统学习ArcGIS10的帮助文档.(文章摘抄的比较多) 地理数据库是用于保存数据集集 ...

  4. python3 字典的常用方法

    字典的方法(可能需要重新整理) 函数 说明 D代表字典对象   D.clear() 清空字典 D.pop(key) 移除键,同时返回此键所对应的值 D.copy() 返回字典D的副本,只复制一层(浅拷 ...

  5. c++第十五天

    <c++ primer, 5E> 第94页到第99页,笔记: 1.迭代器(iterator):一种比下标访问更通用的访问容器中元素的机制. (并不是所有标准库容器都支持下标访问,<运 ...

  6. linux通过rpm和yum安装包

    1.rpm包的安装过程:进入rpm包的所在目录,通过rpm -ivh 包名安装,rpm安装无法解决依赖关系 2.yum安装过程:读取/etc/yum.repo/下配置文件中的baseurl地址,找到该 ...

  7. HTML5 Chart.js 框架

    HTML5 Chart.js 框架 版权声明:未经博主授权,内容严禁转载 ! Chart.js 概述: chart.js 是一个简单的.面向对象.为设计者开发者准备的图表绘制工具. 点击进入官方网址 ...

  8. PHP-Iterator迭代器(遍历)接口详讲

    echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> "; class ...

  9. USACO 1.3 Wormholes - 搜索

    Wormholes Farmer John's hobby of conducting high-energy physics experiments on weekends has backfire ...

  10. 使用libcurl开源库和Duilib做的下载文件并显示进度条的小工具

    转载:http://blog.csdn.net/mfcing/article/details/43603525 转载:http://blog.csdn.net/infoworld/article/de ...