[005][x86組合語言]開發環境配置:硬碟主引導扇區程式碼:顯示標號偏移地址 基礎Bochs除錯命令...
《x86組合語言:從真實模式到保護模式》 第5章 本章習題 第2題
e5-2.asm :顯示標號infi的偏移地址
;程式碼清單5-1
;檔名:e5-2.asm
;檔案說明:硬碟主引導扇區程式碼
;參考程式碼:c05_mbr.asm
;建立日期:21:20 2018/5/20
mov ax,0xb800 ;指向文字模式的顯示緩衝區
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 ;取得標號number的偏移地址
mov bx,10
;設定資料段的基地址
mov cx,cs
mov ds,cx
;求個位上的數字
mov dx,0
div bx
mov [0x7c00+number+0x00],dl ;儲存個位上的數字
;求十位上的數字
xor dx,dx
div bx
mov [0x7c00+number+0x01],dl ;儲存十位上的數字
;求百位上的數字
xor dx,dx
div bx
mov [0x7c00+number+0x02],dl ;儲存百位上的數字
;求千位上的數字
xor dx,dx
div bx
mov [0x7c00+number+0x03],dl ;儲存千位上的數字
;求萬位上的數字
xor dx,dx
div bx
mov [0x7c00+number+0x04],dl ;儲存萬位上的數字
;以下用十進位制顯示標號的偏移地址
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 ;無限迴圈
number db 0,0,0,0,0
times 203 db 0
db 0x55,0xaa
程式碼說明
- 對
參考程式碼:c05_mbr.asm
只做一處修改:第38行 ,取出標號偏移地址:mov ax,infi ;取得標號infi的偏移地址
- 開機後,主引導扇區程式碼(放在硬碟0道0面1扇區的程式碼)被載入到記憶體
0x0000:0x7c00處
- 利用除法
div
運算,取出每個位上的數 -
+30H
做成ASCII碼
,送入顯示卡視訊記憶體0xB800
對應處顯示
異或操作 xor
0 xor 0 = 0
1 xor 0 = 1
0 xor 1 = 1
1 xor 1 = 0
執行測試
Bochs
說明
- Bochs:本質就是一臺虛擬機器,類似於 VirutalBox
- 使用Bochs來除錯,使用VirtualBox來執行結果
下載
配置
https://www.jianshu.com/p/d481cb547e9f
參見配書檔案包 booktool \ 相關教程 \ Bochs安裝手冊.pdf
命令
後接 [真實實體地址]
s (step)單步執行
b (break)斷點 b 0x7C00
c (continue)繼續執行
r (register)檢視暫存器
sreg (segment regi)檢視段暫存器
xp (eXamine memory at physical address)檢視記憶體 xp/2 0xB8000
q (quit)退出
相關文章
- Linux環境組合語言程式設計初步——使用gdb除錯程式(轉)Linux組合語言程式設計除錯
- 主引導扇區的理解
- 讀寫硬碟扇區的C語言程式 (轉)硬碟C語言
- x86 組合語言標誌暫存器組合語言
- 組合語言-基礎功能組合語言
- 硬碟主引導扇區的結構及功能全面釋疑(轉)硬碟
- Golang(go語言)開發環境配置Golang開發環境
- go語言配置VIM開發環境Go開發環境
- 組合語言-基礎知識組合語言
- lec 02 arm組合語言基礎組合語言
- Windows配置R語言、RStudio開發環境WindowsR語言開發環境
- Go語言VSCode開發環境配置GoVSCode開發環境
- FLEX - 開發環境:除錯Flex開發環境除錯
- 寫作業系統之開發引導扇區作業系統
- bochs除錯教程除錯
- Linux環境組合語言程式設計初步——AT&T語法(轉)Linux組合語言程式設計
- Linux基礎命令—顯示主機名hostnameLinux
- Linux基礎命令---顯示主機名hostnameLinux
- PHP開發除錯環境建立PHP除錯
- iOS開發 -- C語言基礎8(指標)iOSC語言指標
- MAC環境下PHP開發除錯環境搭建MacPHP除錯
- Linux基礎命令---顯示程式psLinux
- Go語言開發環境搭建Go開發環境
- [048][組合語言]實驗10 3、數值顯示組合語言
- Windows 下GO語言開發環境搭建+LiteID配置WindowsGo開發環境
- 作業系統實驗 & bochs 環境配置作業系統
- hyperf配置yasd除錯環境除錯
- step 1 :搭建開發除錯環境除錯
- Flutter開發環境搭建和除錯Flutter開發環境除錯
- Linux 組合語言開發指南Linux組合語言
- Windows10下搭建組合語言開發環境(利用DOSBOX和MASM32)Windows組合語言開發環境ASM
- CUDA開發環境高亮顯示設定開發環境
- Linux基礎命令---top顯示程式資訊Linux
- plsql開發語言基礎SQL
- Flask基礎環境配置Flask
- golang 快速入門 [2.1]-go 語言開發環境配置-windowsGolang開發環境Windows
- 前端開發環境(開發,除錯,測試工具)前端開發環境除錯
- 組合語言實驗1—Debug基礎操作組合語言