ICS2019-Linux汇编实验指导

环境配好了? 开始调试

一. 首先安装NASM

1. 先判断系统是否已经安装了nasm

打开终端,执行  whereis nasm ;如果显示nasm: /usr/bin/nasm ,则已经安装;如果只显示nasm:,则未安装。

如下图 则是未安装状态

2.下载NASM

点击这个链接下载

3.按照下面步骤安装nasm

依次输入以下命令

tar xzvf nasm-2.14.02.tar.gz  //  解压nasm


cd nasm-2.14.02   // 进入目录


./configure   // {configure脚本会寻找最合适的C编译器,并生成相应的makefile文件}


接着输入 make 创建nasm和ndisasm 的二进制代码

最后输入 make install 进行安装(这一步需要root权限)

make install会将 nasm 和ndisasm 装进/usr/local/bin 并安装相应的man pages。

如果想验证是否安装成功的话,输入whereis nasm

 这样就安装成功了

二. 测试一下

1. 新建文件,将其命名为hello.asm,编辑并保存

section .data
hello: db 'Hello world!', ; 'Hello world!' plus a linefeed character
helloLen: equ $-hello ; Length of the 'Hello world!' string
; (I'll explain soon)
section .text
global _start
_start:
mov eax, ; The system call for write (sys_write)
mov ebx, ; File descriptor 1 - standard output
mov ecx,hello ; Put the offset of hello in ecx
mov edx,helloLen ; helloLen is a constant, so we don't need to say
; mov edx,[helloLen] to get it's actual value
int 80h ; Call the kernel
mov eax, ; The system call for exit (sys_exit)
mov ebx, ; Exit with return code of 0 (no error)
int 80h

2. 编译

nasm -f elf64 hello.asm  // elf64是64位机 如果是32位机请使用elf32

3. 链接

 ld -s -o hello hello.o 

4.运行

 ./hello 

运行结果如下所示:

本人水平有限, 如有问题请在下面评论指出

ICS2019-Linux汇编实验指导的更多相关文章

  1. web实验指导书和课后习题参考答案

    实验指导书 :http://course.baidu.com/view/daf55bd026fff705cc170add.html 课后习题参考答案:http://wenku.baidu.com/li ...

  2. lingo运筹学上机实验指导

    <运筹学上机实验指导>分为两个部分,第一部分12学时,是与运筹学理论课上机同步配套的4个实验(线性规划.灵敏度分析.运输问题与指派问题.最短路问题和背包问题)的Excel.LONGO和LI ...

  3. Linux汇编与C互相调用

    一.简介 C语言调用汇编有两种方式:1.通过内嵌汇编  2.通过编译链接. 二.基础知识 对于C和汇编语言的接口主要有两个问题需要解决 1.调用者与被调用者的参数传递 正常的,定义一个函数总是希望它完 ...

  4. Linux汇编教程01: 基本知识

    在我们开始学习Linux汇编之前,需要简单的了解一下计算机的体系结构.我们不需要特别深入的了解,理解了一些基本概念对与我们理解程序会很有帮助.现在计算机的结构体系都是采用冯诺依曼体系结构的基础上发展过 ...

  5. 20145219 《Java程序设计》实验一 Java开发环境的熟悉(Linux + Eclipse)实验报告

    20145219 <Java程序设计>实验一 Java开发环境的熟悉(Windws + IDEA)实验报告 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA 编辑. ...

  6. 汇编实验15:安装新的int 9中断例程

    汇编实验15:安装新的int 9中断例程 任务 安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不在松开,一旦松开后,就显示满屏幕的“A”,其他键照常处理. 预备知识概要 这次实 ...

  7. 汇编实验14:访问CMOS RAM

    汇编实验14:访问CMOS RAM 任务 编程,以“年/月/日 时:分:秒”的格式,显示当前的日期,时间. 预备知识 CMOS存储当前时间的信息:年.月.日.时.分.秒.这六个信息的长度均为1个字节, ...

  8. linux 汇编 - 函数调用

    Linux 汇编-函数调用 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !i ...

  9. Linux系统实验

    前言:怎么感觉Linux运维和Linux系统实验没什么关系?该不会的还是不会(@@).记录一下几个实验吧. 本篇目录: 实验一 编程环境 实验二 文件读写 实验三 进程通信 实验一 编程环境√ 实验步 ...

随机推荐

  1. oracle 中decode的用法

    select decode(gg1.group_goods_amount, , , gg1.group_goods_amount) ; 这句话的意思是:如果group_goods_amount为0 则 ...

  2. knuth洗牌算法

    首先来思考一个问题: 设计一个公平的洗牌算法 1. 看问题,洗牌,显然是一个随机算法了.随机算法还不简单?随机呗.把所有牌放到一个数组中,每次取两张牌交换位置,随机 k 次即可. 如果你的答案是这样, ...

  3. [LeetCode] 121. Best Time to Buy and Sell Stock 买卖股票的最佳时间

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  4. 算法练习之杨辉三角,杨辉三角的第 k 行,买卖股票的最佳时机

    1. 杨辉三角 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 输出: [ [], [,], [,,], [ ...

  5. 【视频开发】【Live555】摄像头采集,264编码,live555直播(0)

    参看 有关live555 1.首先需要修改live555,定义从 内存中直接获取source而不是从文件读取source的类. 自己实现的类命名为 H264FramedLiveSource   /* ...

  6. (转)深入浅出Redis-redis哨兵集群

    背景:对于后台开发,需要了解与集群相关的工作. 深入浅出Redis-redis哨兵集群 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentin ...

  7. leetcode腾讯精选练习(50 题)(持续更新)

    1.除自身以外数组的乘积 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘 ...

  8. /x86_64-linux-gnu/libSM.so: undefined reference to `uuid_generate@UUID_1.0'错误

    在编译PCL的时候总是报错,其他人都没问题 后来发现是我cmakePCL的时候,QT引用的是anaconda里的qt,把这个一改果然没问题了,耽误了一天时间. 感谢stack上这位老铁

  9. springcloud使用之服务的注册发现与消费

    随着spring的发展我们发现spring提供了越来越多的项目来帮我们简化框架的搭建,使我们站在巨人的肩膀行走,让我们更关注于开发我们的逻辑.随着技术的更替,我们的新项目也逐渐使用了springboo ...

  10. Django重新添加字段然后迁移给定默认值依然迁移不生效

    1.将对应app下的migrations文件夹下面的除了__init__.py文件外全部删除 2.delete from django_migrations where app='当前模型的app名称 ...