一 、安装NASM

1. 下载安装文件

地址是:http://www.nasm.us/pub/nasm/releasebuilds/2.11.08/

2.解压(具体命令要根据压缩包的类型来选用)

3.进入解压目录

进入刚解压的目录

./configure

make

sudo make install

二、简单使用NASM

  1. 准备好源文件

    假设命名为 c07_mbr.asm(这是《x86汇编语言:从实模式到保护模式》一书的配书代码),这个程序的功能是计算1+2+3+…+100
         ;代码清单7-1
;文件名:c07_mbr.asm
;文件说明:硬盘主引导扇区代码
;创建日期:2011-4-13 18:02 jmp near start message db '1+2+3+...+100=' start:
mov ax,0x7c0 ;设置数据段的段基地址
mov ds,ax mov ax,0xb800 ;设置附加段基址到显示缓冲区
mov es,ax ;以下显示字符串
mov si,message
mov di,0
mov cx,start-message
@g:
mov al,[si]
mov [es:di],al
inc di
mov byte [es:di],0x07
inc di
inc si
loop @g ;以下计算1到100的和
xor ax,ax
mov cx,1
@f:
add ax,cx
inc cx
cmp cx,100
jle @f ;以下计算累加和的每个数位
xor cx,cx ;设置堆栈段的段基地址
mov ss,cx
mov sp,cx mov bx,10
xor cx,cx
@d:
inc cx
xor dx,dx
div bx
or dl,0x30
push dx
cmp ax,0
jne @d ;以下显示各个数位
@a:
pop dx
mov [es:di],dl
inc di
mov byte [es:di],0x07
inc di
loop @a jmp near $ times 510-($-$$) db 0
db 0x55,0xaa

2.用NASM汇编源文件

nasm -f bin c07_mbr.asm -o c07.bin -l c07.lst

说明:

(1)-f bin 指明汇编格式是纯二进制文件

(2)-o c07.bin 指定输出文件名

(3)-l c07.lst 表示产生列表文件(在里面,地址和产生的代码列在左边,实际的源代码列在右边)c07.lst

3 运行二进制文件

我们用bochs来运行。(关于Bochs,我的其他文章里已经介绍了使用方法)

因为我的Bochs的配置文件中写明了:

floppya:1_44=a.img,status=inserted

也就是说启动文件是软盘文件a.img

所以我们把二进制文件写入软盘文件a.img(其实在配置文件中修改a.img为c07.bin也是可以的)

 dd if=c07.bin of=a.img

接下来:

启动Bochs

可以看到



在第一行显示了运行结果:)

(完)

NASM在Ubuntu上的安装与简单使用的更多相关文章

  1. Ubuntu上如何安装Java,Eclipse,Pydev,Python(自带,不用装),BeautifulSoup

    如何安装Java,如果出于编程的需要安装Java,需要安装的是JDK,而不仅仅是JRE,下面说说如何在Ubuntu下如何安装JDK:只有两步,1.下载并解压,2.配置环境变量1.下载并解压:下载地址: ...

  2. 手把手教你在Ubuntu上分别安装Nginx、PHP和Mysql

    手把手教你在Ubuntu上分别安装Nginx.PHP和Mysql

  3. git在windows上的安装和简单使用

    git在windows上的安装和简单使用. 参考: https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E8%BF%9C%E7%A8%8B%E ...

  4. Ubuntu 上如何安装Docker

    Docker 是一个开源项目,为开发者和系统管理员提供了一个开放的平台,在任何地方通过打包和运行应用程序作为一个轻量级的容器.Docker 在软件容器内自动部署应用程序.Docker 最开始由 Sol ...

  5. FFMpeg在Ubuntu上的安装和使用

    在Ubuntu Server上编译FFmpeg FFmpeg是最流行的开源视频转码工具包,在Ubuntu上可以直接通过apt-get安装,但是默认的编码器不提供x264这些non-free的编码器,所 ...

  6. ubuntu 上已经安装libxml2还提示需要reinstall的解决方法

    最近在ubuntu上配置环境,遇到一些奇怪的问题,已经安装了libxml2了,运行 apt-get install libxml2提示已经是最新版本了,可以在安装软件的时候还是提示没有libxml2, ...

  7. ubuntu上的安装.netcore2.1

    .net core 在ubuntu上安装比较容易,依次执行正面语句即可 sudo apt-get install curl curl https://packages.microsoft.com/ke ...

  8. ubuntu下minicom安装和简单设置使用

    minicom是一个串口通信工具. Ubuntu下的安装: 打开终端 sudo apt-get install minicom即可完成安装. 简单设置使用: 安装完成后第一次启动时运行 sudo mi ...

  9. nginx在centos & ubuntu上的安装

    安装Centos 添加当前账号加入sudoers,具备sudo功能 安装编辑器vim Yum install vim Su root Cd cp /etc/sudoers /etc/sudoers[d ...

随机推荐

  1. 动态绑数据(Repeater控件HeaderTemplate和ItemTemplate)

    前几天,Insus.NET有写了<动态绑数据(GridView控件Header和ItemTemplate)>http://www.cnblogs.com/insus/p/3303192.h ...

  2. Linux(centOS7)系统搭建Java环境变量

    [mikecheng@localhost ~]$ su[root@localhost usr]# mkdir tomcat[root@localhost usr]# mkdir java[root@l ...

  3. Shell-2-命令之乐

    1.cat (1)基本用法 [root@cai tmp]# cat 1.txt 2.txt this is a test1 this is a test 2 (2)cat -s file(删除额外空白 ...

  4. 如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?

    如何实现 MySQL 的读写分离? 其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去. MySQL 主从复制原理的是 ...

  5. C++并发低级接口:std::thread和std::promise

    std::thread和std::promise 相比std::async,std::thread就原始多了.thread一定会创建新线程(而不是像async那样创建的时候可能不会,后面才创建新线程( ...

  6. __weak 和 __strong 还有Autorelease的用法

    使用容器的block版本的枚举器时,内部会自动添加一个AutoreleasePool: Autorelease对象是在当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop ...

  7. 基础线程机制--Daemon,sleep(),yield()

    Daemon   守护线程是程序运行时在后台提供服务的线程,不属于程序中不可或缺的部分,当所有非守护进程执行完成时,程序也就终止,同时会杀死所有的守护进程.main()属于非守护线程.可以使用setD ...

  8. Django forum

    Django是比较有名的Python Web框架,很多著名的网站如Instagram就是用的Django.V2EX是一个界面简洁,功能丰富的论坛,最新源码尚未开源.网络上有很多模仿V2EX外观使用其它 ...

  9. Spring----. ref的用法

      ref元素是用在property中,来设置需要引用的容器管理的其它Bean.     它的用法:<ref bean|local|parent="someBean"> ...

  10. P3943 星空

    传送门 观察题目数据,发现 k ≤ 8 ,可能可以从这里入手解决问题 考虑状态压缩 但是我们每次操作都会让一连串的序列改变,而序列的每个状态都是必须要知道的 很麻烦,所以考虑如何把一段区间表示地简单一 ...