Linux下Bochs,NASM安装和使用

安装环境

以Ubuntu为例,先更新一下:

sudo apt-get update
sudo apt-get upgrade

然后安装Bochs环境:

sudo apt-get install build-essential xorg-dev libgtk2.0-dev

安装NASM

NASM官网下载,这以nasm-2.14.02.tar.gz为例:用

tar zxvf nasm-2.14.02.tar.gz

解压后编译安装

cd nasm-2.14.02.tar.gz
./configure
make
sudo make install

输入

whereis nasm

显示

/usr/bin/nasm

安装成功!

安装Bochs

Bochs官网下载,这以bochs-2.6.11.tar.gz为例:解压文件用

tar zxvf bochs-2.6.11.tar.gz

解压后编译安装

cd bochs-2.6.11.tar.gz
./configure --enable-debugger --enable-disasm
make
sudo make install

输入

bochs

显示
在这里插入图片描述
安装成功!

创建镜像

可以在桌面上新建个文件夹nasm,然后进入这个文件夹,在命令行输入:
在这里插入图片描述
就会在文件夹中创建一个a.img。

编译代码写入镜像

这以《x86汇编语言:从实模式到保护模式》中代码为例:保存名为code.asm在nasm里

         ;代码清单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

编译代码:

nasm -f bin code.asm -o code.bin -l code.lst

把程序写入镜像

dd if=code.bin of=a.img

执行NASM代码

在nasm里创建bochsrc.txt,内容为

megs:128
#模拟器的内存  

romimage:file=/usr/local/share/bochs/BIOS-bochs-latest
#这个是BIOS-bochs-latest的路径,可能不一样

vgaromimage:file=/usr/local/share/bochs/VGABIOS-lgpl-latest  
#这个是VGABIOS-lgpl-latest的路径,也可能不一样

floppya:1_44=a.img,status=inserted 
#这个是启动软盘,在当前目录下,如果不在当前目录,需要指明路径  

boot:floppy  
#表示从软盘启动

log:bochsout.txt  
#日志输出文件

执行:

bochs -f bochsrc

显示
在这里插入图片描述
再执行

bochs

在这里插入图片描述
选择6开始模拟,出现黑窗口,输入C显示
在这里插入图片描述
成功!

posted @ 2020-03-19 20:05  放飞梦想C  阅读(4783)  评论(2编辑  收藏  举报