《x86匯編語(yǔ)言:從實(shí)模式到保護(hù)模式》 第5章 本章習(xí)題 第2題
e5-2.asm :顯示標(biāo)號(hào)infi的偏移地址
;代碼清單5-1
;文件名:e5-2.asm
;文件說(shuō)明:硬盤(pán)主引導(dǎo)扇區(qū)代碼
;參考代碼:c05_mbr.asm
;創(chuàng)建日期:21:20 2018/5/20
mov ax,0xb800 ;指向文本模式的顯示緩沖區(qū)
mov es,ax
;以下顯示字符串"Label offset:"
mov byte [es:0x00],'L'
mov byte [es:0x01],0x07
mov byte [es:0x02],'a'
mov byte [es:0x03],0x07
mov byte [es:0x04],'b'
mov byte [es:0x05],0x07
mov byte [es:0x06],'e'
mov byte [es:0x07],0x07
mov byte [es:0x08],'l'
mov byte [es:0x09],0x07
mov byte [es:0x0a],' '
mov byte [es:0x0b],0x07
mov byte [es:0x0c],"o"
mov byte [es:0x0d],0x07
mov byte [es:0x0e],'f'
mov byte [es:0x0f],0x07
mov byte [es:0x10],'f'
mov byte [es:0x11],0x07
mov byte [es:0x12],'s'
mov byte [es:0x13],0x07
mov byte [es:0x14],'e'
mov byte [es:0x15],0x07
mov byte [es:0x16],'t'
mov byte [es:0x17],0x07
mov byte [es:0x18],':'
mov byte [es:0x19],0x07
mov ax,infi ;取得標(biāo)號(hào)number的偏移地址
mov bx,10
;設(shè)置數(shù)據(jù)段的基地址
mov cx,cs
mov ds,cx
;求個(gè)位上的數(shù)字
mov dx,0
div bx
mov [0x7c00+number+0x00],dl ;保存?zhèn)€位上的數(shù)字
;求十位上的數(shù)字
xor dx,dx
div bx
mov [0x7c00+number+0x01],dl ;保存十位上的數(shù)字
;求百位上的數(shù)字
xor dx,dx
div bx
mov [0x7c00+number+0x02],dl ;保存百位上的數(shù)字
;求千位上的數(shù)字
xor dx,dx
div bx
mov [0x7c00+number+0x03],dl ;保存千位上的數(shù)字
;求萬(wàn)位上的數(shù)字
xor dx,dx
div bx
mov [0x7c00+number+0x04],dl ;保存萬(wàn)位上的數(shù)字
;以下用十進(jìn)制顯示標(biāo)號(hào)的偏移地址
mov al,[0x7c00+number+0x04]
add al,0x30
mov [es:0x1a],al
mov byte [es:0x1b],0x04
mov al,[0x7c00+number+0x03]
add al,0x30
mov [es:0x1c],al
mov byte [es:0x1d],0x04
mov al,[0x7c00+number+0x02]
add al,0x30
mov [es:0x1e],al
mov byte [es:0x1f],0x04
mov al,[0x7c00+number+0x01]
add al,0x30
mov [es:0x20],al
mov byte [es:0x21],0x04
mov al,[0x7c00+number+0x00]
add al,0x30
mov [es:0x22],al
mov byte [es:0x23],0x04
mov byte [es:0x24],'D'
mov byte [es:0x25],0x07
infi: jmp near infi ;無(wú)限循環(huán)
number db 0,0,0,0,0
times 203 db 0
db 0x55,0xaa
代碼說(shuō)明
- 對(duì)
參考代碼:c05_mbr.asm只做一處修改:第38行 ,取出標(biāo)號(hào)偏移地址:mov ax,infi ;取得標(biāo)號(hào)infi的偏移地址 - 開(kāi)機(jī)后,主引導(dǎo)扇區(qū)代碼(放在硬盤(pán)0道0面1扇區(qū)的代碼)被加載到內(nèi)存
0x0000:0x7c00處 - 利用除法
div運(yùn)算,取出每個(gè)位上的數(shù) -
+30H做成ASCII碼,送入顯卡顯存0xB800對(duì)應(yīng)處顯示
異或操作 xor
0 xor 0 = 0
1 xor 0 = 1
0 xor 1 = 1
1 xor 1 = 0
運(yùn)行測(cè)試

vfirtual box 運(yùn)行第5章 習(xí)題2 顯示 infi在段內(nèi)的偏移地址.png

bochs 調(diào)試 第5章 習(xí)題2 顯示 infi在段內(nèi)的偏移地址.png
Bochs
說(shuō)明
- Bochs:本質(zhì)就是一臺(tái)虛擬機(jī),類似于 VirutalBox
- 使用Bochs來(lái)調(diào)試,使用VirtualBox來(lái)運(yùn)行結(jié)果
下載
配置
http://www.itdecent.cn/p/d481cb547e9f
參見(jiàn)配書(shū)文件包 booktool \ 相關(guān)教程 \ Bochs安裝手冊(cè).pdf
Disk&Boot.PNG

填寫(xiě)硬盤(pán)參數(shù).png
命令
后接 [真實(shí)物理地址]
s (step)單步執(zhí)行
b (break)斷點(diǎn) b 0x7C00
c (continue)繼續(xù)執(zhí)行
r (register)查看寄存器
sreg (segment regi)查看段寄存器
xp (eXamine memory at physical address)查看內(nèi)存 xp/2 0xB8000
q (quit)退出