自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lhm的博客

平时的一些学习笔记

  • 博客(19)
  • 收藏
  • 关注

原创 字符串解析为单词

#include<stdio.h>#include<ctype.h>#include<malloc.h>#include<string.h>#define N 20#define M 30int str_parase(char * res, char word[][N]){ int i, wordLen=0, wordNu...

2018-03-27 22:26:18 385

原创 一份比较全的Makefile

#Makefile for boot#programs , flags, etcENTRYPOINT = 0x30400ENTRYOFFSET = 0X400ASM = nasmDASM = ndisasmCC = gccLD = ldASMBFLAGS = -I boot/include/ASMKFLAGS = -I...

2018-03-24 08:10:47 245

原创 内核(一)

上节已经写到跳到内核程序入口地址,接着来看看内核中的代码#include "type.h"#include "const.h"#include "protect.h"PUBLIC void* memcpy(void* pDst, void* pSrc, int iSize);PUBLIC void disp_str(char * pszInfo);PUBL...

2018-03-24 08:08:22 200

原创 重新放置内核

将elf文件中的程序按段重新放置;initKernel ---------------------------------------------------------------------------------; 将 KERNEL.BIN 的内容经过整理对齐后放到新的位置; 遍历每一个 Program Header,根据 Program Header 中的信息来确定把什么放进内存,...

2018-03-23 07:26:33 228 1

原创 linux之跳入保护模式+启动分页机制

以前的代码需要一段初始化SelectorCode16 equ LABEL_DESC_CODE16 - LABEL_GDT ;初始化16位的代码段描述符 xor eax, eax mov ax, cs shl eax, 4 add eax, LABEL_SEG_CODE16 mov word [LABEL_DESC_COD...

2018-03-21 08:11:18 612

原创 linux之 loader

前面几节大概如下流程 将boot.bin写入软驱a.img第一个扇区 dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc 上电之后,rom会自动加载第一个扇区加载到内存中并开始运行这个第一扇区中的内容就是boot.bin,boot的主要功能就是查找loader.bin文件,并加载到内存指定位置,之后跳到loader.bin...

2018-03-20 07:50:15 1600

原创 一个操作系统的是实现之C语言与汇编互相调用

bar.cvoid myprint(char* msg, int len);int choose(int a, int b){ if(a >= b){ myprint("the 1st ont \n", 13); } else{ myprint("the 2nd one \n", 13); } r...

2018-03-19 00:12:39 1087

原创 hello.asm

一个操作系统的实现 第五章第一个程序[section .data]strHello db "Hello, world!", 0AhSTRLEN equ $ - strHello[section .text]global _start_start: mov edx, STRLEN mov ecx, strHello mov ebx...

2018-03-18 23:02:23 719

原创 linux 之 引导扇区(三)

上一节讲到在磁盘中读取属于目录条目的扇区,并在里面查找我们需要的文件名,看是否是自己需要的文件名,这一节讲讲将该文件名找到后,我们将该文件拷贝到内存中。 这里的将文件拷贝到内存和上一节讲到的有点区别,这次拷贝的文件大小不止一个扇区,所以需要用到FAT,代码如下:;-----------------------------------------------------------; 函数...

2018-03-18 21:27:56 316

原创 linux之 引导扇区(二)

上一节讲到了引导扇区的结构,这种是基于FAT12文件系统的。但是内部的引导程序却只是用打印字符串来代替,现在来加深一下代码,添加读取磁盘数据到内存的功能这个功能需要用到BIOS中断int 13h,它的用法如下 可以看到 ah = 02h 时,int 13h 可以进行读取磁盘扇区功能。在这里需要先了解一下磁盘的一些基础知识磁盘由N个盘片组成,每个盘片一般有两面,一面一个磁头(hea...

2018-03-13 23:23:34 821

原创 linux之 引导扇区(一)

上回说到操作系统上电到引导扇区之间的程序,但是在结尾只是随便用一个测试程序来代替引导程序(就是第一个扇区的程序),今天我们来讲讲真正的引导程序。但是在讲引导程序之前我们需要先学习FAT12文件系统,学了之后才会了解数据是如何存储在硬盘上面的(注意:是硬盘,此时数据还没有加载到内存上面)。所有的文件系统会把磁盘分为若干个层次方便组织和管理,包括 1.扇区:磁盘上最小的数据单元 2.簇:一...

2018-03-12 09:56:18 1827

原创 pcm文件播放

/*This example reads standard from input and writesto the default PCM device for 5 seconds of data.*//* Use the newer ALSA API */#define ALSA_PCM_NEW_HW_PARAMS_API#include <stdio.h> #in...

2018-03-08 16:55:17 1782

原创 利用Matlab实现已知数据拟合

利用Matlab实现已知数据拟合 已知大量数据和基本公式,但是不知道系数,此时可以利用下面的代码来实现clear all;clc;close all;x=[426;514;645;739;1000;1100;1170;1250;1370;1520;1540;1650;1720;1750;2010;2210;2300;2540;2720;2850;3000;3150];y=[3...

2018-03-07 14:02:43 12806 1

原创 保护模式小结

在GDT、LDT以及IDT中,每一个描述符都有自己的界限和属性等内容,是对描述符所描述对象的一种限定和保护分页机制中的PDE和PTE都含有R/W以及U/S位,提供了页级保护 页式存储的使用使应用程序使用的是线性空间而不是物理地址,于是物理内存被保护起来中断不再像是模式下一样使用,也提供特权检验等内容I/O指令不再随便使用,于是端口被保护起来在程序运行过程中,如果遇到不同特权级...

2018-03-06 12:49:30 126

原创 pmtest9.asm

pmtest9c.asm所写的中断类似与一种call 调用,更像一种异常,就是直接调用这段,而这个始终中断,类似与单片机,只需要使能之后,就可以进入中断 不需要int 80h 这样的调用;======================================;pmtest9_2.asm;编译方法:nasm pmtest9_2.asm -o pmtest9_2.bin;======...

2018-03-06 10:59:11 594

原创 pmtest9c.asm

8259A的初始化 中断向量表的建立;======================================;pmtest9c.asm;编译方法:nasm pmtest9c.asm -o pmtest9c.bin;======================================%include "pm.inc"; 常量,宏 以及一些说明;org 07c00h...

2018-03-03 21:43:51 240

原创 pmtest8.asm 笔记

pmtest8.asm的功能,先执行某个线性地址处的模块,然后通过改变cr3来转换地址映射关系,再执行同一个线性地址处的模块,由于地址映射已经改变,所以两次得到的应该是不同的输出LABEL_DESC_FLAT_C: Descriptor 0, 0fffffh,DA_CR|DA_32|DA_LIMIT_4K ;0-4G LABEL_DESC_FLAT_RW: ...

2018-03-03 12:52:19 545

原创 pmtest8.asm

有个bug 找了半天,以前的代码都是 LABEL_DESC_CODE32: Descriptor 0, SegCode32Len - 1, DA_C| DA_32; 现在的代码却是 LABEL_DESC_CODE32: Descriptor 0, SegCode32Len - 1, DA_CR| DA_32; 非一致代码段就因为这个原因导致程序出...

2018-03-03 12:49:21 568 1

原创 pmtest7.asm

1.如何由内存推出页表数量 假设内存空间为32MB, 由于每个页是4KB, 则我们需要8K个页表,而每个页表实际占4个字节,所以一共是页表所占内存为32KB分配内存依然是从零开始的,但是里面有一些内存是不能用的,我们只能说自己线性地址指向的内存有部分可用,可用的最大值的地址是01FF0000h, 所以说可以用的内存都被指向到了;====================...

2018-03-02 17:02:34 478 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除