安装环境

以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显示



成功!

Linux下Bochs,NASM安装和使用的更多相关文章

  1. Linux下命令行安装weblogic10.3.6

    Linux下命令行安装weblogic10.3.6 一.安装前准备工作: 1.创建用户useradd weblogic;创建用户成功linux系统会自动创建一个和用户名相同的分组,并将该用户分到改组中 ...

  2. Linux下MongoDB服务安装

    Linux下MongoDB服务安装 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个介于关系数据库和非关系数据 ...

  3. Windows下的Memcache安装 linux下的Memcache安装

    linux下的Memcache安装: 1. 下载 memcache的linux版本,注意 memcached 用 libevent 来作事件驱动,所以要先安装有 libevent. 官方网址:http ...

  4. linux下subversion server安装手册

    linux下subversion server安装手册 安装基于的Linux版本为:Red Hat Enterprise Linux Server release 6.3. 一 准备需要的安装包. ( ...

  5. Linux下Perl的安装(转)

    原文地址:Linux下Perl的安装 今天在虚拟机测试shell脚本的时候,有些命令使用不了. 比如说 mysqlhotcopy ,它提示Perl的版本太低. 我用的 RedHat9 的Perl才5. ...

  6. 细说Linux下软件包的安装与管理

    一 源码安装方式      由于linux操作系统开放源代码,因而在其上安装的软件大部分也都是开源软件,例如apache.tomcat.php等软件.开源软件基本都提供源码下载,源码安装的方式:源码安 ...

  7. Linux下Qt的安装与配置

    参考资料:http://www.cnblogs.com/emouse/archive/2013/01/28/2880142.html Linux 下编译.安装.配置 QT 下载qt 这里用的是4.7. ...

  8. Linux下OpenSSL的安装与使用

    Linux下OpenSSL的安装与使用 OpenSSL简介 OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux.Windows.Mac OS ...

  9. Linux下Kafka单机安装配置方法(图文)

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了 ...

  10. linux下使用yum安装mysql、tomcat、httpd

    一.linux下使用yum安装mysql   1.安装 查看有没有安装过:           yum list installed mysql*           rpm -qa | grep m ...

随机推荐

  1. 【Android逆向】Frida 无脑暴力破解看雪test2.apk

    1. 安装apk到手机 adb install -t test2.apk apk下载位置: https://www.kanxue.com/work-task_read-800625.htm 2. 题目 ...

  2. [超实用插件]在Visual Studio中查看EF Core查询计划

    前言 EF Core是我们.NET开发中比较常用的一款ORM框架,今天我们分享一款可以直接在Visual Studio中查看EF Core查询计划调试器可视化工具(帮助开发者分析和优化数据库查询性能) ...

  3. 常见的问题系列--- Swagger @ApiOperationSupport忽略失效的问题

    https://www.cnblogs.com/hujunwei/p/15853307.html

  4. OsgEarth开发笔记(四):Qt5.15.2在QtCreator集成Osg3.6.3+OsgEarth3.1+OsgQt的vs2019x64版本开发环境搭建

    前言   本篇非常麻烦,博主用QtCreator作为IDE,因为Osg3.6.3放弃对osgQt的支持,集成起来比较繁琐.   前提   基于前面三篇的基础上,才可以进行本篇.   Demo演示:Qt ...

  5. 项目实战:Qt数据分析处理平台(兼容各国产麒麟系统)(文件域字符串解析,上万文件批量导入,折线图、散点图,正态分布图分析处理导出等)

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/114710650长期持续带来更多项目与技术分享, ...

  6. mysql数据库jar包下载

    1.mysql-connector-java-8.0.16.jar驱动包 链接:https://pan.baidu.com/s/1G1SfPP895wU6YvTOAcTxhA提取码:7r43 2.my ...

  7. 08、Etcd 中MVCC原理

    本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢. 1.什么是 MVCC MVCC(Multiversion concurrency control)是一个基于多版本技术实现的一种并发控制 ...

  8. React同级组件传值

         在React中同级组件本身是没有任何关联的,要想有联系只能通过共同的父组件传值,一个子组件将数据传递到父组件中,父组件接收值再传入另一个子组件中 <!DOCTYPE html> ...

  9. Redis灵魂11问

    目录 说说redis都有哪些数据类型吧 Redis为什么快呢? 那为什么Redis6.0之后又改用多线程呢? 知道什么是热key吗?热key问题怎么解决? 什么是缓存击穿.缓存穿透.缓存雪崩? 缓存击 ...

  10. 【Azure 存储服务】如何查看Storage Account的删除记录,有没有接口可以下载近1天删除的Blob文件信息呢?

    问题描述 如何查看Storage Account的删除记录,有没有接口可以下载近1天删除的Blob文件信息呢?因为有时候出现误操作删除了某些Blob文件,想通过查看删除日志来定位被删除的文件信息. 问 ...