彙編學習(十五)X86彙編學習 2 MBR為例

2021-07-13 03:52:02 字數 1967 閱讀 3638

我們從《組合語言》的坑爬出來,又進入到了《實模式到保護模式》的坑中。

mbr  : 計算機開機加電自檢之後,bios 就就嘗試讀取0面0道1扇區的內容,傳統上就是主引導扇區mbr共512b 以0x55 和 0xaa結尾。

**如下:

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,number ;取得標號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
我們建立乙個硬碟,並將**寫進取:

nasm mbr.asm

qemu-img create -f qcow disk.img 128m

dd if=mbr of=./disk.img

qemu disk.img

這段引導的mbr 的**就完成了。

x86彙編學習筆記

debug 是dos,windows都提供的實模式 8086 方式 程式的除錯工具.windows下使用dosbox模擬dos環境,掛載所在目錄後開啟debug.exe r指令 顯示r ax 0000 bx 0000 cx 0000 dx 0000 sp 00fd bp 0000 si 0000 d...

32位x86彙編學習總結

大學裡的微機原理課學的讓我汗顏,工作之餘,重新學習了一遍x86的彙編。彙編主要包括暫存器,指令操作,控制迴圈結構以及棧幀中的 esp和 ebp的變化。32位x86包括8個暫存器,分別是 eax accumulate ecx conuter edx data ebx base esi source i...

x86組合語言學習筆記2

乙個簡單的組合語言程式 data sum dword 0 code main proc mov eax,5 add eax,6 mov sum,eax invoke exitprocess,0 main endp 加法指令 add 減法指令 sub 加一指令 inc 減一指令 dec 取補指令 ne...