[005][x86匯編語言]開發環境配置:硬盤主引導扇區代碼:顯示標號偏移地址 基礎Bochs調試命令

《x86匯編語言:從實模式到保護模式》 第5章 本章習題 第2題

http://www.lxweimin.com/p/d481cb547e9f

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

運行測試

vfirtual box 運行第5章 習題2 顯示 infi在段內的偏移地址.png
bochs 調試 第5章 習題2 顯示 infi在段內的偏移地址.png

Bochs

說明

  • Bochs:本質就是一臺虛擬機,類似于 VirutalBox
  • 使用Bochs來調試,使用VirtualBox來運行結果

下載

https://sourceforge.net/projects/bochs/files/bochs/2.6.9/

配置

http://www.lxweimin.com/p/d481cb547e9f
參見配書文件包 booktool \ 相關教程 \ Bochs安裝手冊.pdf

Disk&Boot.PNG
填寫硬盤參數.png

命令

后接 [真實物理地址]

s       (step)單步執行
b       (break)斷點  b 0x7C00  
c       (continue)繼續執行
r       (register)查看寄存器
sreg    (segment regi)查看段寄存器
xp      (eXamine memory at physical address)查看內存 xp/2 0xB8000
q       (quit)退出
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎入門學習匯編語言》系列視頻的筆記,在此感謝他和像他一樣...
    Gibbs基閱讀 37,371評論 8 114
  • 王爽匯編全書知識點大綱 第一章 基礎知識 機器語言 匯編語言的產生 匯編語言的組成 存儲器 cpu對存儲器的讀寫 ...
    2c3ba901516f閱讀 2,443評論 0 1
  • # 常見匯編代碼 # 1. 編寫程序:比較AX,BX,CX中帶符號數的大小,將最大的數放在AX中 code...
    喝豆腐腦加糖閱讀 2,683評論 0 0
  • 編程語言的發展 機器語言由0和1組成 匯編語言(Assembly Language)用符號代替了0和1,比機器語言...
    阿凡提說AI閱讀 4,166評論 0 15
  • 這學期有了匯編課,但個人感覺這部分難度還是有一些的,所以寫了這篇簡書當做自己對于知識的復習,同時也是希望能夠再次加...
    kl_w閱讀 6,755評論 0 7