Git Product home page Git Product logo

mac-x86asm-real_mode_to_protect_mode's Introduction

mac bochs 配置vhd格式磁盘

  1. 安装sdl
    $ brew install sdl
    # 如果一直卡在homebrew的update上,可以配置关闭update
    $ export HOMEBREW_NO_AUTO_UPDATE=true
  1. 下载最新的bochs安装包 bochs-2.6.tar.gz

  2. 解压缩包

    $ tar -xvf bochs-2.6.tar.gz
  1. 下载补丁安装patch
    $ wget https://raw.githubusercontent.com/Homebrew/formula-patches/e9b520dd4c/bochs/xcode9.patch
    $ cd bochs-2.6
    $ patch -p1 < ../xcode9.patch
  1. 修改源码config.cc 第3261行
    if (SIM->get_param_string("model", base)->getptr()>0){

    //修改为

    if (SIM->get_param_string("model", base)->getptr()>(char *)0){
  1. 安装
    $ ./configure --enable-ne2000 \
            --enable-all-optimizations \
            --enable-cpu-level=6 \
            --enable-x86-64 \
            --enable-vmx=2 \
            --enable-pci \
            --enable-usb \
            --enable-usb-ohci \
            --enable-e1000 \
            --enable-debugger \
            --enable-disasm \
            --disable-debugger-gui \
            --with-sdl \
            --prefix=$HOME/tools/bochs #选择你需要安装的目录
    
    $ make && make install
  1. 配置vhd磁盘启动文件

bochs的安装目录下的bochs/share/doc/bochs/bochsrc-sample.txt是配置文件的模板

自定义的配置文件取名为bochsrc.txt, 内容如下

###############################################
# Configuration file for Bochs
###############################################
 
# 第一步,首先设置Bochs在运行过程中能够使用的内存,本例为32MB。
# 关键字为:megs
megs: 32
 
# 第二步,设置对应真实机器的BIOS和VGA BIOS.
# 对应两个关键字为:romimage 和 vgaromimage
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
 
# 第三步,设置Bochs所使用的磁盘,软盘的关键字为floppy。
# 若只有一个软盘,则使用floppya即可,若有多个,则为floppya,floppyb...
# floppya: 1_44=a.img, status=inserted
# 由于我们使用硬盘启动,设置不检测软盘
floppy_bootsig_check: disabled=1
# 第四步,选择启动盘符。
boot: disk

ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="/Users/jasey/VirtualBox VMs/LEARN-ASM/LERAN-ASM.vhd", mode=vpc, cylinders=1003, heads=12, spt=17, model="Generic 1234", biosdetect=auto, translation=auto
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata2: enabled=0
ata3: enabled=0
 
# 第五步,设置日志文件的输出。
log: bochsout.txt

其中ata0-master: type=disk, path = XXXpath为指定的vhd文件路径

  1. 在配置文件下运行bochs
    $ $HOME/tools/bochs/bin/bochs

mac tool

mbr-lba使用文档

8086 汇编寄存器

通用寄存器

AX, BX, CX, DX, SI, DI, SP, BP

前面四个寄存器可分别访问高位和低位,后面四个不行

AX(Accumulator)

累加器寄存器,可用于除法,被除数放置的寄存器

16位除以8位时,结果为8位,余数为8位,商保存在AL中,余数保存在AH中

32位除以16位是,结果为16位,商为16位,被除数的低16位在AX中,结果在AX中

BX(Base Address Tegister)

基地址寄存器,寄存器的内容可以作为地址,访问内存

CX(Countor)

计数寄存器,该寄存器可以用于循环,CX非零,则重复执行循环 包括loop指令,rep指令

DX(Data)

数据寄存器

32位除以16位是,被出示的高16位位于DX中,余数在DX中

SI(Source Index)

源索引寄存器

数据传送指令中,源数据内存地址的段偏移存储在SI中,段基地址从DS中获取,逻辑地址 DS:SI

DI(Destination Index)

目标索引寄存器,和SI一样,都可以用于数据传送操作

数据传送指令中,目的数据内存地址的段偏移存储在DI中,段基地址从ES中获取,逻辑地址 ES:DI

段寄存器

DS, CS, ES, SS

DS 数据段基地址寄存器,指令中如果没有指定段地址,则使用该寄存器的值

CS 代码段基地址寄存器,cpu获取指令计算IP时,如果使用的是绝对偏移地址,则基地址从CS寄存器中获取

ES 扩展段基地址寄存器,可以根据这个寄存器基地址访问数据,但是需要指定段寄存器

基址寄存器和变址寄存器组合

[bx+si], [bx+di], [bp+si],[bp+di]

指令对寄存器的影响表格

op flags comment
add OF,SF,ZF,AF,CF,PF
cbw none
cld DF=0 其余标志位没有定义,故而不要依赖其他标志
cwd none
dec OF,SF,ZF,AF,PF CF不受影响,通常循环体使用,循环体内可能用到CF,故而不打扰CF标志
div/idiv none 未定义
inc OF,SF,ZF,AF,PF CF不影响
mov/movs none
neg OF,SF,ZF,AF,CF,PF 如果操作数为0 ? CF = 0 : CF = 1
std DF=1
sub OF,SF,ZF,AF,CF,PF
xor OF=0, CF=0,SF,ZF,PF

mac-x86asm-real_mode_to_protect_mode's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.