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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OS学习笔记】十八 保护模式五:保户模式下如何进行内存保护 与 别名段的意义与作用 对应汇编代码

發(fā)布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OS学习笔记】十八 保护模式五:保户模式下如何进行内存保护 与 别名段的意义与作用 对应汇编代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本片文章是上一篇文章:點擊查看對應(yīng)的匯編代碼??梢詫W(xué)習(xí)上一篇文章后再來對照查看匯編代碼?;蛘卟殚啎禭86匯編語言-從實模式到保護模式》點擊下載第12章內(nèi)容來學(xué)習(xí)。

;代碼清單12-1;文件名:c12_mbr.asm;文件說明:硬盤主引導(dǎo)扇區(qū)代碼 ;設(shè)置堆棧段和棧指針 mov eax,cs mov ss,eaxmov sp,0x7c00;計算GDT所在的邏輯段地址mov eax,[cs:pgdt+0x7c00+0x02] ;GDT的32位線性基地址 xor edx,edxmov ebx,16div ebx ;分解成16位邏輯地址 mov ds,eax ;令DS指向該段以進(jìn)行操作mov ebx,edx ;段內(nèi)起始偏移地址 ;創(chuàng)建0#描述符,它是空描述符,這是處理器的要求mov dword [ebx+0x00],0x00000000mov dword [ebx+0x04],0x00000000 ;創(chuàng)建1#描述符,這是一個數(shù)據(jù)段,對應(yīng)0~4GB的線性地址空間mov dword [ebx+0x08],0x0000ffff ;基地址為0,段界限為0xfffffmov dword [ebx+0x0c],0x00cf9200 ;粒度為4KB,存儲器段描述符 ;創(chuàng)建保護模式下初始代碼段描述符mov dword [ebx+0x10],0x7c0001ff ;基地址為0x00007c00512字節(jié) mov dword [ebx+0x14],0x00409800 ;粒度為1個字節(jié),代碼段描述符 ;創(chuàng)建以上代碼段的別名描述符mov dword [ebx+0x18],0x7c0001ff ;基地址為0x00007c00512字節(jié)mov dword [ebx+0x1c],0x00409200 ;粒度為1個字節(jié),數(shù)據(jù)段描述符;創(chuàng)建保護模式下的棧段 mov dword [ebx+0x20],0x7c00fffe ;基地址為0x00007c00,段界限為0xFFFFFmov dword [ebx+0x24],0x00cf9600 ;粒度為4KB,棧段描述符;初始化描述符表寄存器GDTRmov word [cs: pgdt+0x7c00],39 ;描述符表的界限 lgdt [cs: pgdt+0x7c00]in al,0x92 ;南橋芯片內(nèi)的端口 or al,0000_0010Bout 0x92,al ;打開A20cli ;中斷機制尚未工作mov eax,cr0or eax,1mov cr0,eax ;設(shè)置PE位;以下進(jìn)入保護模式... ...jmp dword 0x0010:flush ;16位的描述符選擇子:32位偏移[bits 32] flush: mov eax,0x0018 mov ds,eaxmov eax,0x0008 ;加載數(shù)據(jù)段(0..4GB)選擇子mov es,eaxmov fs,eaxmov gs,eaxmov eax,0x0020 ;0000 0000 0010 0000mov ss,eaxxor esp,esp ;ESP <- 0mov dword [es:0x0b8000],0x072e0750 ;字符'P''.'及其顯示屬性mov dword [es:0x0b8004],0x072e074d ;字符'M'、'.'及其顯示屬性mov dword [es:0x0b8008],0x07200720 ;兩個空白字符及其顯示屬性mov dword [es:0x0b800c],0x076b076f ;字符'o''k'及其顯示屬性;開始冒泡排序 mov ecx,pgdt-string-1 ;遍歷次數(shù)=串長度-1 @@1:push ecx ;32位模式下的loop使用ecx xor bx,bx ;32位模式下,偏移量可以是16位,也可以 @@2: ;是后面的32位 mov ax,[string+bx] cmp ah,al ;ah中存放的是源字的高字節(jié) jge @@3 xchg al,ah mov [string+bx],ax @@3:inc bx loop @@2 pop ecx loop @@1mov ecx,pgdt-stringxor ebx,ebx ;偏移地址是32位的情況 @@4: ;32位的偏移具有更大的靈活性mov ah,0x07mov al,[string+ebx]mov [es:0xb80a0+ebx*2],ax ;演示0~4GB尋址。inc ebxloop @@4hlt ;-------------------------------------------------------------------------------string db 's0ke4or92xap3fv8giuzjcy5l1m7hd6bnqtw.' ;-------------------------------------------------------------------------------pgdt dw 0dd 0x00007e00 ;GDT的物理地址 ;------------------------------------------------------------------------------- times 510-($-$$) db 0db 0x55,0xaa

總結(jié)

以上是生活随笔為你收集整理的【OS学习笔记】十八 保护模式五:保户模式下如何进行内存保护 与 别名段的意义与作用 对应汇编代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。