安裝環境
以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顯示
成功!