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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

自制操作系统6:寻址5M-天高任鸟飞

發布時間:2023/12/8 windows 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自制操作系统6:寻址5M-天高任鸟飞 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:
https://blog.csdn.net/tyler_download/article/details/52242599
DOS是實模式,20位總線,1M內存。體驗不好。寄存器也是16位的。90年代用dos編程,竟然也有WPS這樣的神作,真是佩服求伯君。
windows是保護模式,32位總線。4G內存,80386是經典,win95也是經典。
保護模式不再直接尋址,而是用GDT獲取描述符,描述符中再計算地址。
進入保護模式一個巨大好處是可以引入C語言。
本次實驗就是把數據寫入內存5M位置,然后在從這個位置讀取數據顯示出來,體現尋址5M的能力。
boot_read5M.asm
比上節GDT表中增加了LABEl_DESC_5M這樣一個段,基地址0500000h,也就是5M的位置。
selector_5M是這個段離表頭的偏移。
es指向selector_5M,也就是5M的基地址,es:edi循環寫入字符串msg。
然后顯示msg: [es:si]是5M基地址,到[gs:edi]顯存。
編譯:nasm -o boot.bat boot_read5M.asm
使用上幾節的OpSystem.java類,這個只寫了第一個引導扇區,其他扇區寫了個字符串,不影響,可直接使用這個工具做system.img
加載到virtualbox 運行成功:

boot_read5M.asm

%include "pm.inc"

org 0x7c00

jmp LABEL_BEGIN

[SECTION .gdt]
LABEL_GDT: ? ? ? ? Descriptor ?0, ? ? ? ? 0, ? ? ? ? ? ? ? ?0
LABEL_DESC_CODE32: Descriptor ?0, ? ? ? ? SegCode32Len - 1, DA_C + DA_32
LABEL_DESC_VIDEO: ?Descriptor ?0B8000h, ? 0ffffh, ? ? ? ? ? DA_DRW
LABEL_DESC_5M: ? ? Descriptor ?0500000h, ?0ffffh, ? ? ? ? ? DA_DRW

GdtLen equ $ - LABEL_GDT
GdtPtr dw ?GdtLen - 1
? ? ? ?dd ?0

SelectorCode32 ?equ ?LABEL_DESC_CODE32 - LABEL_GDT
SelectorVideo ? equ ?LABEL_DESC_VIDEO - LABEL_GDT
Selector5M ? ? ?equ ?LABEL_DESC_5M ? ?- LABEL_GDT

[SECTION .s16]
[BITS 16]
LABEL_BEGIN:
? mov ax, cs
? mov ds, ax
? mov es, ax
? mov ss, ax
? mov sp, 0100h

? xor eax, eax
? mov ax, ?cs
? shl eax, 4
? add eax, LABEL_SEG_CODE32
? mov word [LABEL_DESC_CODE32 + 2], ax
? shr eax, 16
? mov byte [LABEL_DESC_CODE32 + 4], al
? mov byte [LABEL_DESC_CODE32 + 7], ah

? xor eax, eax
? mov ax, ?ds
? shl eax, 4
? add eax, LABEL_GDT
? mov dword [GdtPtr + 2], eax
??
? lgdt [GdtPtr]

? cli

? in al, 92h
? or al, 00000010b
? out 92h, al

? mov eax, cr0
? or eax, 1
? mov cr0, eax

? jmp dword SelectorCode32: 0

[SECTION .s32]
[BITS 32]
LABEL_SEG_CODE32:
? mov ax, SelectorVideo
? mov gs, ax

? mov si, msg
? mov ax, Selector5M
? mov es, ax
? mov edi, 0

write_msg_to_5M:
? cmp byte[si], 0
? je ?prepare_to_show_char
? mov al, [si]
? mov [es:edi], al
? add edi, 1
? add si, 1
? jmp write_msg_to_5M

prepare_to_show_char:
? mov ebx,10
? mov ecx, 2
? mov si, ?0
??
showChar:
? mov edi, (80*11)
? add edi, ebx
? mov eax, edi
? mul ecx
? mov edi, eax
? mov ah, 0ch
? mov al, [es:si]
? cmp al, 0
? je ?end
? add ebx, 1
? add si, 1
? mov [gs:edi], ax
? jmp showChar
end:
? jmp $
msg:
? DB "This string is written to 5M memroy", 0

SegCode32Len equ $ - LABEL_SEG_CODE32

總結

以上是生活随笔為你收集整理的自制操作系统6:寻址5M-天高任鸟飞的全部內容,希望文章能夠幫你解決所遇到的問題。

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