X86平台下用汇编写"HelloWorld"

首先需要安装一个汇编器,我用的是Nasm,这个汇编器在Linux下安装还是很简单的。

Nasm下载地址http://www.nasm.us/pub/nasm/releasebuilds/

在下载之后对其进行解压,然后进入到其目录下,会发现有configure文件,接下来相信对于熟悉Linux的同学就知道该怎么办了。

输入./configure然会待其执行完成后,会发现在目录下生成了一个Makefile文件,这是输入make命令,就可以完成对Nasm的编译了

然后进入root,输入make install对Nasm进行安装即可了。然后如果你的机器上没有gcc的话可以安装下gcc这里自己去搜索引擎找就行了,因为我这里已经安装了gcc所以这里不再多说。

接下来就可以编写helloworld的汇编代码了,我这里参考的是维基百科上的代码示例

  section .data
     msg     db      ‘Hello, world!‘,0xA
     len     equ     $-msg

     section .text
 global  _start
 _start:
         mov     edx,len
         mov     ecx,msg
         mov     ebx,1
         mov     eax,4
         int     0x80

         mov     ebx,0
         mov     eax,1
         int     0x80

然后将编辑的文件保存,起始后缀名没什么关系,后缀名在Linux下只是给人看的罢了,保存之后,输入nasm -f elf32 文件名,然后会发现在该命令执行完成后

生成了一个 文件名.o的文件,然后输入ld 文件名.o -o 文件名  执行完成后,就生成了我们平时使用的可以执行文件。

此时输入./文件名 就会出现Hello World了。

X86平台下用汇编写"HelloWorld"

时间: 2024-10-06 07:08:03

X86平台下用汇编写"HelloWorld"的相关文章

X86平台下基于grub2+busybo+linux-2.6.36制作linux系统

X86平台下基于grub2+busybo+linux-2.6.36制作linux系统 一.下载内核源码,grub2源码,以及busybox源码: 下载grub2源码 ftp://ftp.gnu.org/gnu/grub/ 找到需要的版本就好了,这里选择grub-1.99.tar.gz 下载busybox源码 http://www.busybox.net/downloads/ 找到需要的版本就好了,这里选择busybox-1.22.1.tar.bz2 下载linux-2.6.36内核源码 http

x86平台转x64平台关于内联汇编不再支持的解决

x86平台转x64平台关于内联汇编不再支持的解决     2011/08/25   把自己碰到的问题以及解决方法给记录下来,留着备用!   工具:VS2005  编译器:cl.exe(X86 C/C++)  ml64.exe(X64 ASM64) 前提:X86下内联汇编是嵌在函数当中实现的 在X86平台下,可以轻松的在C/C++代码中嵌入汇编代码,称其为"内联汇编",使用"__asm{}"语法即可,比较简单,这里不做介绍.当你在X86平台下,由于性能和速度的要求,需

x86 x64下调用约定浅析

x86平台下调用约定 我们都知道x86平台下常用的有三种调用约定,__cdecl.__stdcall.__fastcall.我们分别对这三种调用约定进行分析. __cdecl __cdecl是C/C++的默认调用约定,如果不显示声明调用约定的情况下,就是该调用约定.下面我们来从汇编层次来熟悉这种调用约定. 我写了一个函数,如下: 1 int __cdecl TestCdecl(int a, int b, int c, int d, int e) 2 { 3 return a + b + c +

SylixOS x86平台C++符号表

1.C++跨平台问题说明在x86平台下编译C++工程过程后,运行编译好的C++共享库时出现符号表__atomic_fetch_sub_4找不到的问题,如图 1.1所示. 图 1.1 符号表缺失 2.问题解决符号表缺失的原因是由于在跨平台编译时要加对应的平台编译选项,在x86平台下要增加-march=i686选项,如图 2.1所示. 图 2.1 增加Makefile编译选项 编译上传后,再运行动态库,发现动态库没有出现符号表未定义的问题,如图 2.2所示. 图 2.2 动态库正常运行截图 原文地址

ubuntu 下使用CGI c语言 编写helloworld

从根本上说,CGI 就是HTML表单与服务端脚本之间的接口. 自己可以百度了一些cgi知识:给出链接报错.那就自己Google哈 也因为工作需要,所以来学习了下. 一.安装及配置apache服务器 安装apache2服务器 #sudo apt-get install apache2 配置apache2服务器 配置文件位于 /etc/apache2/sites-enabled/000-default 用vi打开配置文件: #sudo vi /etc/apache2/sites-enabled/00

关于Windows Server平台下实现DB2自动备份、复原和前滚的脚本

最近在参与负责某线上MySQL项目时,客户要求实现SQL数据备份.复原和前滚的全自动化. 在RHEL平台下使用Perl语言编写脚本同时结合cron指令来共同实现,整个过程很轻松顺利且效果也比较满意. 同时,由于所负责的另一个项目是线下DB2环境,那么在Windows Server平台下又该如何实现DB2数据库备份.复原和前滚的自动化呢? 因为Windows远没有Linux的命令行功能强大,所以实现起来稍微曲折些,但是基本上还是可以实现的.经过简单的编写和测试通过后,现抽空将实现思路和实验代码分享

3.android下Makefile编写规范

随着移动互联网的发展,移动开发也越来越吃香了,目前最火的莫过于android,android是什么就不用说了,android自从开源以来,就受到很多人的追捧.当然,一部人追捧它是因为它是Google开发的.对一个程序员来说,一个系统值不值得追捧得要拿代码来说话.我这里并不打算分析android的代码,而是android的makefile,也许大家已经知道了在android源码里,我们可以看见很多makefile文件,起初我也不明白,经过一段时间的研究,后来慢慢明白了,我想通过分析andorid的

在 Linux 平台下使用 JNI

引言 Java 的出现给大家开发带来的极大的方便.但是,如果我们有大量原有的经过广泛测试的非 Java 代码,将它们全部用 Java 来重写,恐怕会带来巨大的工作量和长期的测试:如果我们的应用中需要访问到特定的设备,甚至是仅符合公司内部信息交互规范的设备,或某个特定的操作系统才有的特性,Java 就显得有些力不从心了.面对这些问题,Sun 公司在 JDK1.0 中就定义了 JNI 规范,它规定了 Java 应用程序对本地方法的调用规则. 实现步骤及相关函数使用 本文将一步步说明在 Linux 平

unity中如何配置Android X86平台

从unity4.6版本开始,unity已经对Android系统支持x86平台的编译构建了,同时也支持了通用二进制 (通用二进制作为默认的编译选项). 大家都知道,目前市面上主流的Android设备主要是armeabi,armeabiv7a和x86平台,对于独立CPU平台的支持有助于程序在该平台的运算和优化.下面简单介绍一下如何配置. 1.打开unity项目 2.单击unity菜单栏的File->build settings 3.在弹出的设置弹框中选择Android,然后点击"player