保护模式第三章
来源:互联网 发布:智能电视直播软件2016 编辑:程序博客网 时间:2024/05/21 10:31
第一代码,就单单第一个代码。从开始接触,到自认为明白后。再跟Xinix去讨论,又发现不足。再继续深入学习。还自作聪明的把代码抄出来,做个全面了解。花去的时间有3天了。今天中午没事干,把代码敲了一遍。一运行。错误。在nasm里面是通过的,但在dos下面就不能正确显示出P来。对着书,对照了起码有3遍,才发现一个错误。以为可以了,在dos下,系统还是崩溃了。奇怪,太奇怪了。我还把光碟上的代码和自己的写的代码放到word里面,启用对照功能。晕菜了,哈哈,最后真的有种崩溃的感觉。还好,自己静下心来,在一遍一遍的回想代码的过程。慢慢对照。结果就发现了自己的错误在那。呵呵,在对错的时候,脑海里面一直想着:电脑是不会出错的,错了,就是自己的程序有问题。 编程就是这样,一点马虎都不行。要有耐心和细心。
下面把今天自己的代码贴出来,警示以后要更加努力:
%include "pm.inc"
org 0100h
jmp LABEL_BEGIN
[SECTION .gdt]
;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
;GDT END
GdtLen equ $ -LABEL_GDT
GdtPtr dw GdtLen - 1
dd 0
;GDT选择子
SelectorCode32 equ LABEL_DESC_CODE32 - LABEL_GDT
SelectorVideo equ LABEL_DESC_VIDEO - LABEL_GDT
;END OF [SECTION .gdt]
[SECTION .s16];漏掉了.后面的s
[BITS 16]
LABEL_BEGIN:
mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0100h
;初始化32位代码段描述符
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
;加载gdtr做准备
xor eax, eax
mov ax, ds
shl eax, 4
add eax, LABEL_GDT
mov dword [GdtPtr+2], eax ;忘记+2
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 edi, (80*10+0)*2
mov ah, 0CH
mov al, 'P'
mov [gs:edi], ax
jmp $
SegCode32Len equ $ - LABEL_SEG_CODE32
;END OF[SECTION .S32]
一共是3个错误,要是给Xinix知道了,非给他笑掉大牙不可。o(∩_∩)o...哈哈
- 保护模式第三章
- 一个操作系统的实现:第三章 保护模式 调试问题
- 《一个操作系统的实现》读书笔记--第三章--保护模式
- 《一个操作系统的实现》读书笔记--第三章--“实模式--保护模式--实模式”转换过程
- 读书笔记--第三章--“实模式--保护模式--实模式”转换过程
- 第三章pmtest2源码解析 实模式到保护模式再到实模式
- 《自己动手写操作系统》第三章 pmtest1——从实模式到保护模式
- 第三章 保护模式 pmtest2.asm添加实现段间间接远转移代码
- 保护继承方式 第五章第三题
- 保护模式
- 保护模式
- 保护模式
- 保护模式
- 保护模式
- 保护模式
- 保护模式
- 保护模式
- 保护模式
- 很快又是一年
- .h和.cpp文件的区别
- 在VS2008中和VC6一样使用在类中右击增加windows消息处理
- 通过EPROCESS链表枚举进程(代码转)
- 规范日记
- 保护模式第三章
- FFmpeg Understanding(6.How to compile and install external libs of FFMPEG?)
- MSSQL:改变数据库对象所有者
- C++代码和调试
- 简单反跟踪调试(转加密3)
- class "junit.framework.JUnit4TestAdapter"'s signer information does not match signer information of other classes in the same pa
- 端口映射源码C++(转)
- 新年拜年吉祥话
- 水仙