zoukankan      html  css  js  c++  java
  • 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里创建bachsrc.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显示
    在这里插入图片描述
    成功!

  • 相关阅读:
    Retrofit2.0+OkHttp打印Request URL(请求地址参数)
    Java如何从HttpServletRequest中读取HTTP请求的body
    解决gradle:download特别慢的问题
    20180531
    20180531 运算符重载
    20180531 二叉树
    20180530
    20180529-2
    20180529-1
    20180529
  • 原文地址:https://www.cnblogs.com/chengmf/p/12526821.html
Copyright © 2011-2022 走看看