NASM在Ubuntu上的安装与简单使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013490896/article/details/49386929

一 、安装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

         ;以下计算1100的和 
         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
可以看到

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

(完)

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页