标签: Linux_x86_OS

12 篇文章

【OS】11 – 实模式到保护模式(中)【从16位代码段进入到32位代码段,从实模式进入到保护模式】
【OS】11 - 实模式到保护模式(中)【从16位代码段进入到32位代码段,从实模式进入到保护模式】 gitee仓库传送门 保护模式的编程 从16位代码段进入到32位代码段,从实模式进入到保护模式; inc.asm ; Segment Attribute DA_32 equ 0x4000 DA_DR equ 0x90 DA_DRW equ 0x92 DA_DRWA equ …
【OS】09 – 主引导程序控制权的转移【fat表加载loader并跳转执行,boot使命结束】
  参考:【OS】09 - 主引导程序控制权的转移   实验1 代码写完之后,发现boot已经超出了512字节,怎么办呢? 代码重构:删除部分的push和pop代码,这是为了保证不会影响关键寄存器的值。   代码调整后,再次make通过;打印加载出来的文件内容。     code org 0x7c00 ;补上三个字节 jmp…
【OS】07 – 突破512字节的限制(中)【主要内容:内存比较函数 MemCmp 和根目录区查找函数 FindEntry 】
原理参考:【OS】07 - 突破512字节的限制(中)   0x01 验证1:内存比较函数 MemCmp 1.1 code ;@ ;目的: 验证MemCmp函数 ;参考此函数调用即可 org 0x7c00 jmp short start nop define: BaseOfStack equ 0x7c00 ;start from here start: mov a…
【OS】06 – 突破512字节的限制(上)
参考: 【OS】06 - 突破512字节的限制(上)   0x01 定义栈空间 sp寄存器的值 为什么要用0x7c00用作栈的起始地址? 程序执行从0x7c00从低地址到高地址执行;栈的增长方向是高地址到低地址(和程序执行方向相反); 用0x7c00作为栈的起始地址是可以的,函数调用的操作(栈增长)不会影响程序的执行;   0x02 读取数据 需要的文件…
【OS】01&02 – Hello,DTOD!
【OS】01 :进阶操作系统 【OS】02 - Hello,DTOD! boot.asm org 0x7c00 ;指明入口 start: ;标签代表下面第一条指令的地址 mov ax, cs ;获取当前代码执行的段地址。 mov ss, ax ;设置堆栈段地址与当前代码段地址相同。 mov ds, ax ;设置数据段地址与当前代码段地址相同,从而能够访问数据。 mov es…
【OS】03 – bochs环境搭建
引用:【OS】03 - bochs环境搭建-理论详情 开发环境搭建 bochs安装、配置和测试 bochs调试环境搭建和测试 bochs常用调试命令 0x01 Bochs安装和配置 1.1 ./configure --enable-debugger --enable-disasm ./configure --enable-debugger --enable-disasm 有…
【OS】04 – 主引导程序的拓展(上)【了解Fat12】
【OS】04 - 主引导程序的拓展(上) ,理论详情 实验: 把文件写入虚拟软盘 0x01 创建虚拟软盘 1.1 创建虚拟软盘和文件,文件写入虚拟软盘 需要的工具: bochsrc freedos.img bochsrc ############################################################### # Configurati…
深入浅出的处理器
深入浅出的处理器(上) 深入浅出的处理器(中) 深入浅出的处理器(下) 深入浅出的处理器(续) tip: 点击链接的时候按下键盘的 CTRL 就会另外新打开一个页面
gcc的编译选项-详细
嵌入式C语言编译器,文章的理论部分 注意: 下文验证的内容,使用的是这里的func.h、test.c func.h #include <stdio.h> void func() { #ifdef TEST printf("TEST = %s\n", TEST); #endif return; } test.c #include <std…