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,
mov eax,
int 0x80 mov ebx,
mov eax,
int 0x80
然后将编辑的文件保存,起始后缀名没什么关系,后缀名在Linux下只是给人看的罢了,保存之后,输入nasm -f elf32 文件名,然后会发现在该命令执行完成后
生成了一个 文件名.o的文件,然后输入ld 文件名.o -o 文件名 执行完成后,就生成了我们平时使用的可以执行文件。
此时输入./文件名 就会出现Hello World了。
自己在看了下汇编的东西后,自己用AT&T的汇编格式写出了一个Hello World,虽然很简单,但是对于一直想自学下汇编,但是一直也没学的我来说,还是觉得自己能独立写出一个小小的
汇编程序感到很兴奋。
.equ SYS_WRITE,
.equ SYS_EXIT,
.equ SYSCALL, 0x80
.equ STDOUT,
.equ STR_LEN .section .data
str:
.ascii "hello world\n\0" .section .text .globl _start _start:
movl %esp, %ebp
subl $, %esp
movl $str, -(%ebp)
movl $SYS_WRITE, %eax
movl $STDOUT, %ebx
movl -(%ebp), %ecx
movl $STR_LEN, %edx
int $SYSCALL movl $SYS_EXIT, %eax
movl $, %ebx
int $SYSCALL
调用动态链接库实现HelloWorld
.section .data
str:
,ascii "hello world\n\0" .section .text
.globl _start _start:
pushl $str
call printf pushl $
call exit
这样,该程序在汇编时仍然和之前一样使用 as helloworld.s -o helloworld.o,但是在进行链接时却需要做一些改变
应该使用如下的方式进行: ld -dynamic-linker /lib/ld-linux.so.2 -o helloworld helloworld.o -lc这样编译就可以完成了。
X86平台下用汇编写"HelloWorld"的更多相关文章
- X86平台下嵌入式linux触摸屏解决方案(usb触摸屏控制器+完美校准方案+触摸屏QTE开发环境搭建)
一直在用X86平台,真心不想用WINCE和XPE,一些大的硬件供应商都不提供linux平台下的技术支持,比如研华的3343PC104系列的板子... 开发的问题如下: 1 USB控制器目前只有台湾和竹 ...
- 【原创】xenomai 在X86平台下中断响应时间测试
1.中断响应时间 实时操作系统的意义就在于能够在确定的时间内处理各种突发的事件,而中断这些事件.系统抢占调度的触发点,因而衡量嵌入式实时操作系统的最主要.最具有代表性的性能指标参数无疑是中断响应时间. ...
- x86平台转x64平台关于内联汇编不再支持的解决
x86平台转x64平台关于内联汇编不再支持的解决 2011/08/25 把自己碰到的问题以及解决方法给记录下来,留着备用! 工具:VS2005 编译器:cl.exe(X86 C/C+ ...
- x86 x64下调用约定浅析
x86平台下调用约定 我们都知道x86平台下常用的有三种调用约定,__cdecl.__stdcall.__fastcall.我们分别对这三种调用约定进行分析. __cdecl __cdecl是C/C+ ...
- 测试平台系列(79) 编写Redis配置功能(下)
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们提出了优化Dao ...
- ubuntu12.04下编译安装x86平台qt库qt-everywhere-opensource-src-4.8.5
本文记录PC(x86)下安装Linux/X11版Qt 开发环境.下载页面:http://qt-project.org/downloads ARM嵌入式版本qt库的编译安装详见<unbunt12. ...
- C语言的本质(28)——C语言与汇编之用汇编写一个Helloword
为了更加深入理解C语言的本质,我们需要学习一些汇编相关的知识.作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但是非常重要.因为它能够完成许多其它语言所无法完成的功能.就拿 Linux 内核 ...
- C/C++在Java项目、Android和Objective-C三大平台下实现混合编程
Android和iOS开发都支持C++开发,可以一套代码多平台使用.同时C++难以反编译的特性也可以为Android开发带来代码的保密,另一native特性也可以提高代码的运行效率. 一.为什么使用C ...
- 3.android下Makefile编写规范
随着移动互联网的发展,移动开发也越来越吃香了,目前最火的莫过于android,android是什么就不用说了,android自从开源以来,就受到很多人的追捧.当然,一部人追捧它是因为它是Google开 ...
随机推荐
- springboot 集成oss
集成aliyun oss 结构如下: pom.xml <dependency> <groupId>org.springframework.boot</groupId> ...
- 36.React基础介绍——2019年12月24日
2019年12月24日16:47:12 2019年10月25日11:24:29 主要介绍react入门知识. 1.jsx语法介绍 1.1 介绍 jsx语法是一种类似于html标签的语法,它的作用相当于 ...
- 接口测试的一些FAQ
近期在学习接口测试,总会有很多问题,故把前任给的经验做个记录下. 1,测试一条delete接口,delete请求后要检验什么内容: 原来删除有分为:物理删除,删除资源,删除关系,软删除 一般delet ...
- 安装vue-cli脚手架项目
1,下载安装node.官网下载后,重新打开cmd再打开. 命令:node -v检测版本. 2,安装vue-cli: 命令:npm install --global vue-cli .根据安装情况,会 ...
- POJ 3061 Subsequence ( 二分 || 尺取法 )
题意 : 找出给定序列长度最小的子序列,子序列的和要求满足大于或者等于 S,如果存在则输出最小长度.否则输出 0(序列的元素都是大于 0 小于10000) 分析 : 有关子序列和的问题,都可以考虑采用 ...
- [ZJU 1003] Crashing Balloon
ZOJ Problem Set - 1003 Crashing Balloon Time Limit: 2 Seconds Memory Limit: 65536 KB On every J ...
- JS中包含6种错误类型
1.SyntaxError(语法错误) 解析代码时发生的语法错误 eg:var 1a; Uncaught SyntaxError: Unexpected number 2.ReferenceError ...
- I - Rake It In
题目链接:https://nanti.jisuanke.com/t/A1538 题意:给一个4*4的方阵,k个回合,a和b轮流选一个2*2的矩阵和,a要使和最大,b要使和最小,选完后2*2矩阵要逆时针 ...
- eclipse配置apache tomcat运行时访问路径不需要项目名称
问题:tomcat运行项目默认是要带上项目名的,有时候不想要项目名来访问,如何解决呢? 方法: 1:双击打开tomcat 2:选择Modules,选择你要修改的项目 3:点击Edit,把path修改成 ...
- 大数据笔记(二十一)——NoSQL数据库之Redis
一.Redis内存数据库 一个key-value存储系统,支持存储的value包括string(字符串).list(链表).set(集合).zset(sorted set--有序集合)和hash(哈希 ...