日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OS学习笔记】十六 保护模式四:进入保护模式与在保护模式下访问内存的汇编代码

發布時間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OS学习笔记】十六 保护模式四:进入保护模式与在保护模式下访问内存的汇编代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文記錄的是之前四篇文章所對應的匯編代碼。四篇文章分別是:

  • 【OS學習筆記】十二 現代處理器的結構和特點
  • 【OS學習筆記】十三 保護模式一:全局描述符表(GDT)
  • 【OS學習筆記】十四 保護模式二:段描述符
  • 【OS學習筆記】十五 保護模式三:保護模式下的內存訪問機制

按照順序將上述四篇文章對應的內容學完,方能看懂本篇文章的匯編代碼。

更加詳細的介紹請參考數據《X86匯編語言-從實模式到保護模式》第11章內容。

代碼如下:

;代碼清單11-1;文件名:c11_mbr.asm;文件說明:硬盤主引導扇區代碼 ;;設置堆棧段和棧指針 mov ax,cs mov ss,axmov sp,0x7c00;計算GDT所在的邏輯段地址 mov ax,[cs:gdt_base+0x7c00] ;16位 mov dx,[cs:gdt_base+0x7c00+0x02] ;16位 mov bx,16 div bx mov ds,ax ;令DS指向該段以進行操作mov bx,dx ;段內起始偏移地址 ;創建0#描述符(描述符是8字節的),它是空描述符,這是處理器的要求mov dword [bx+0x00],0x00mov dword [bx+0x04],0x00 ;創建#1描述符,保護模式下的代碼段描述符mov dword [bx+0x08],0x7c0001ff mov dword [bx+0x0c],0x00409800 ;創建#2描述符,保護模式下的數據段描述符(文本模式下的顯示緩沖區) mov dword [bx+0x10],0x8000ffff mov dword [bx+0x14],0x0040920b ;創建#3描述符,保護模式下的堆棧段描述符mov dword [bx+0x18],0x00007a00mov dword [bx+0x1c],0x00409600;初始化描述符表寄存器GDTRmov word [cs: gdt_size+0x7c00],31 ;描述符表的界限(總字節數減一) 因為一共4個段(代碼段數據段棧段與空段) lgdt [cs: gdt_size+0x7c00] ;從gdt_size讀取6字節的話,就包括了4字節的段線性地址和2字節的偏移地址in al,0x92 ;南橋芯片內的端口 or al,0000_0010Bout 0x92,al ;打開A20cli ;保護模式下中斷機制尚未建立,應 ;先禁止中斷 mov eax,cr0or eax,1mov cr0,eax ;設置PE位,直接導致處理器的運行進入保護模式;以下進入保護模式... ...jmp dword 0x0008:flush ;16位的描述符選擇子:32位偏移;清流水線,并串行化處理器 [bits 32] flush:mov cx,00000000000_10_000B ;加載數據段選擇子(0x10)mov ds,cx;以下在屏幕上顯示"Protect mode OK." mov byte [0x00],'P' mov byte [0x02],'r'mov byte [0x04],'o'mov byte [0x06],'t'mov byte [0x08],'e'mov byte [0x0a],'c'mov byte [0x0c],'t'mov byte [0x0e],' 'mov byte [0x10],'m'mov byte [0x12],'o'mov byte [0x14],'d'mov byte [0x16],'e'mov byte [0x18],' 'mov byte [0x1a],'O'mov byte [0x1c],'K';以下用簡單的示例來幫助闡述32位保護模式下的堆棧操作 mov cx,00000000000_11_000B ;加載堆棧段選擇子mov ss,cxmov esp,0x7c00mov ebp,esp ;保存堆棧指針 push byte '.' ;壓入立即數(字節)sub ebp,4cmp ebp,esp ;判斷壓入立即數時,ESP是否減4 jnz ghalt pop eaxmov [0x1e],al ;顯示句點 ghalt: hlt ;已經禁止中斷,將不會被喚醒 ;-------------------------------------------------------------------------------gdt_size dw 0gdt_base dd 0x00007e00 ;GDT的物理地址 在主引導扇區之后times 510-($-$$) db 0db 0x55,0xaa

筆記記得不是很全,如果有不懂的可以加我聯系方式一起交流。

學習探討加個人:
qq:1126137994
微信:liu1126137994

總結

以上是生活随笔為你收集整理的【OS学习笔记】十六 保护模式四:进入保护模式与在保护模式下访问内存的汇编代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。