首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Bochs运行程序集代码?

如何使用Bochs运行程序集代码?
EN

Stack Overflow用户
提问于 2011-05-26 17:51:58
回答 2查看 6.5K关注 0票数 10

我想使用Bochs作为8086仿真器。有什么简单的方法吗?我想要的是类似于emu8086 (http://www.emu8086.com/)的东西。

EN

回答 2

Stack Overflow用户

发布于 2015-09-30 17:08:34

代码语言:javascript
复制
sudo apt-get install bochs bochs-sdl

printf 'ata0-master: type=disk, path="main.img", mode=flat, cylinders=1, heads=1, spt=1
boot: disk
display_library: sdl
megs: 128
' > .bochsrc

bochs -q

我在Ubuntu14.04上工作过,Bochs2.4.6有一个512字节长的引导扇区main.img

  • cylinders=1, heads=1, spt=1指定磁盘大小,并且必须与您的映像匹配!在这里,我们将所有内容设置为1,表示1柱面,这与我们的图像文件类似,是512个字节。
  • 可能需要display_library: sdl,因为Ubuntu包装错误

main.imgmain.asm生成。

代码语言:javascript
复制
org 0x7c00
bits 16
cli
mov ax, 0x0E61
int 0x10
hlt
times 510 - ($-$$) db 0
dw 0xaa55

然后:

代码语言:javascript
复制
nasm -f bin -o main.img main.asm

这些图像使用BIOS将单个字符的a打印到屏幕上。

可以使用以下命令行避免创建.bochsrc文件:

代码语言:javascript
复制
bochs \
    -qf /dev/null \
    'ata0-master: type=disk, path="main.img", mode=flat, cylinders=1, heads=1, spt=1' \
    'boot: disk' \
    'display_library: sdl' \
    'megs: 128'

-qf /dev/null部件很难看,但这是我自动跳过菜单屏幕的唯一方法:

  • -q-n总是要求它,而我必须按6让它在以后跑
  • -qn <(echo ...)也工作了,但是使用了一个Bash扩展,它会在我的Makefile上失败

QEMU的界面更容易开始,所以我建议使用它。

使用本例的GitHub存储库:https://github.com/cirosantilli/x86-bare-metal-examples/blob/cba0757990843f412b14dffad45467ad0034d286/Makefile#L33

票数 5
EN

Stack Overflow用户

发布于 2011-05-26 17:58:50

这不是你真正想做的。(嗯,也许是.)

基本上,Bochs是一个x86 PC仿真器。为了在上面执行机器代码,您需要将机器代码放到“磁盘”映像上。磁盘映像是结构类似于磁盘(软盘或硬盘驱动器)的文件。

PC有一个特定的引导序列,它查看磁盘的各个部分,在那里加载机器代码,然后执行它。操作系统就是这样启动的。

坦率地说,让"hello world“在程序集中运行是有点麻烦的,因为除了BIOS之外,什么都没有,因为您没有一个操作系统可以运行在上面。

所以,如果你想追求这个目标,你会想要在业余操作系统上搜索书籍和网站,并学习引导进程是如何工作的等等。否则,使用类似DOS系统的东西工作,然后创建COM文件,然后从那里开始。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6142925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档