x86实模式清屏玩具程序

x86开机原理:从加电复位到保护模式的硬件启动全链路解析 操作系统启动过程是计算机底层技术的核心入口,其本质是CPU如何从加电复位开始,通过实模式、段式寻址、中断向量表等机制完成初始引导,并最终切换至保护模式实现内存隔离与特权分级。理解这一过程,需掌握8086分段寻址的工程妥协逻辑、CR3寄存器在页式管理中的枢纽作用,以及GDT/IDT等硬件描述符表对安全边界的硬性约束。这些机制共同构成了现代多任务系统的基础支撑,广泛应用于内核开发、驱动编写、嵌入式启动和安全研究等工程实践场景。本文聚焦x86架构下‘按下电源键’到‘Hello World刷屏’的完整物理执行路径, 阅读详情

介绍

由于mac bochs在启动后会输出一堆不需要的字符,小手一抖写了一个玩具清屏程序

代码

    mov ax,0xb800
    mov es ,ax ;附加段基地址   
    mov cx,2000
    xor di,di	 ;偏移地址
    jmp near clear
 clear:
       mov byte [es:di],0x20	;设置文本模式内容
       inc di
       mov byte [es:di],0x00  ;设置文本属性
       inc di
       loop clear	;循环

   times 510-($-$$) db 0 ;填充0
        db 0x55,0xaa			

文本模式颜色表

在这里插入图片描述

最后效果

在这里插入图片描述

STM32 CubeMX LwIP + freertOS 移植 生成代码,烧录即可ping通。这里要注意的是,要修改freertOS的任务栈大小,默认128,修改为1024,不修改就跑不起来。生产代码,下载进开发板。开发板网口与电脑网口通过网线直连,设置电脑本地网卡在同一网段。在以上无系统的cubeMX配置下继续添加freertOS。无系统LWIP协议栈设置,静态IP地址,关闭DHCP。先用裸机测试LAN8742A的网卡驱动。MCU型号:STM32F746NGH。下面进行freertOS系统移植。网卡型号:LAN8742A。系统时钟和时基定时器如下。 阅读详情

相关推荐

IC面试常考题 Verilog三分频电路设计(占空比50%,三分之一,三分之二)

实现三分频电路最简单的是: 利用计数器实现。 时序图分析(本人比较懒,平常科研忙,所以直接手画时序图了,懒得用软件画了): 直接上图分析:利用计数器每隔三个周期信号翻转一次,同时在不同的计数下翻转得到的同步信号 clk_1和clk_2,再利用异或即可实现出一个不同占空比的三分频信号(同样的方法也可扩展到其他奇数分频设计中)。 例如占空比50%: module Div_three( input clk, input rst_n, output div_three ); reg

qq_41884662的博客 1万+

【汇编】多种方法实现清屏并打印字符串(.asm源码)

项目环境 编译环境:搭建一个nasm2.8的编译环境。 镜像文件:采用winhex_18.2刷入编码。 虚拟机:采用Bochs-2.4.5。 项目软件 傻瓜式环境配置。 解压文件到D盘能直接使用。 项目软件及项目运行环境下载地址:https://download.youkuaiyun.com/download/Gyangxixi/15009979 运行结果 程序源码-方法一(.asm) org 0x7c00 jmp start string db 'world',0 passwrod db "

敲代码两年半的练习生博客 2221

Ollama运行DeepSeek大模型调优指南:GPU与CPU协同实现性能最大化

Ollama运行DeepSeek大模型调优指南

qq_32358423的博客 3995

linux0.00 代码阅读笔记

---------------------------------------- 汇编语言的编写, 编译, 运行,调试: author: hjjdebug date: ---------------------------------------- 参考代码地址:https://github.com/hjjdebug/linux0.00 ubuntu14 的环境这里用gdb(4.8.4)+b...............

hjjdebug的专栏 2287

Matlab路径文件pathdef.m可能为只读文件修改方法

找到MATLAB目录下的bin这个文件夹,直接改这个文件夹的权限(之前试过改pathdef.m的权限,不好用)如果到这里重新导入还是不行,从官网重新下载需要的安装包,可能是你的安装包出了问题。(Win11系统,matlab版本为2022b)编辑——添加——在输入对象名称来选择中输入everyone。重启matlab,以管理员身份运行。并修改其他已有的权限,都给它。

yqc1123的博客 1万+

多周期路径及set_multicycle_path详解

默认情况下,每条路径都被定义为单周期,即源触发器在时钟的任一边沿启动(launch)的数据都应该由目的触发器在时钟的下一上升沿捕获(capture)。 有的设计需要在数据被捕获前提供一些额外的周期,这类路径被称为多周期路径。 一、set_multicycle_path命令 命令格式如下: set_multicycle_path .........

Jackiezhang1993的博客 4万+

mac上使用Bochs:自己电脑亲测可用

mac上面运行bochs,在自己电脑上一步步操作过的,确保可用

javon_hzw的专栏 997

低功耗蓝牙技术 > GAP和GATT介绍

GAP和GATT作为蓝牙协议栈中的关键协议,为BLE设备之间的通信提供了标准和框架。GAP主要负责设备的连接、广播和角色定义,而GATT则定义了BLE设备之间的具体通信方式,通过Services和Characteristics实现数据的传输和交换。在蓝牙技术的发展中,GAP和GATT两个协议扮演着关键的角色,为BLE(低功耗蓝牙)设备之间的通信提供了规范和框架。GATT连接是建立在GAP协议之上的,是一种独占连接,一个BLE外设同时只能连接一个中心设备。连接建立后,通信是双向的,不同于GAP的单向通信。

DL_62532的专栏 4030

BIOS功能调用之滚屏与清屏

BIOS功能调用之滚屏与清屏每次启动Bochs的时候,显示出来的那些内容有没有干扰你的眼球呢?其实我早就想清屏了,今天就来探索一下怎样利用BIOS中断来清屏。清屏都有哪些方法?1.空格填充法如果单就”清屏幕”这个问题而言,解决办法有很多,最最“勤劳”的方法就是在屏幕上显示25*80的空格。除了这个,还有什么方法呢?对了,BIOS中断。它山之石,可以攻玉。2.滚屏与清除窗口调用 功能号:06H/0

车子(chezi) 1万+

Python爬虫实战:基于最新技术栈的晋江文学城小说爬取

本文将详细介绍如何使用Python最新技术栈构建一个高效的晋江文学城小说爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、分布式爬虫设计以及数据存储优化等高级话题。文章包含完整的代码实现,使用aiohttp+asyncio实现异步爬取,Playwright处理动态渲染,并结合Redis实现分布式任务队列。本文旨在为读者提供一个全面的现代Python爬虫开发指南。网络爬虫(Web Crawler)是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据分析和内容聚合等领域。

2201_76125261的博客 870

微信小程序 - 真机调试调用接口报错{errno: 600001, errMsg: “request:fail -102:net::ERR_CONNECTION_REFUSED},真机运行测试请求异常

微信小程序,真机,调试测试,运行报错,API接口,服务器接口都报错了,小程序报错errno: 600001,小程序报错request:fail -102:net::ERR_CONNECTION_REFUSED,真实手机打开接口全都失效了,微信小程序真机测试失败,微信小程序{errno: 600001, errMsg: "request:fail -102:net::ERR_CONNECTION_REFUSED"},详细解决方法,https,服务器SSL证书,无法解决,服务器更换SSL证书,接口地址改了也不行

🏆 前端领域优质创作者 1万+

让bochs调试时的终端输出有颜色的文本的方法

最近在摆弄linux0.01的内核代码,在利用bochs调试时,发现控制台输入终端的字符颜色都一样,比较难直观地看出命令与指令的区分。后面在网上看到有网友贴终端的利用终端的字符颜色由转义序列(Escape Sequence)控制文本的输出颜色。所以现学现用,把bochs的源代码在输出的语句上加上颜色值,最张成功地实现了有颜色的输出信息。 具体请看引用的部分语句: 终端的字符颜色由转义序列(Es

苏权的专栏 1682

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

努力让自己发光,对的人才能迎着光而来 13万+

从零自制x86引导程序

引导程序(Bootloader)是电脑启动时BIOS交接控制权的第一段代码,是衔接硬件和操作系统的关键。本文基于x86 16位实模式,从零实现“清屏+移动光标+打印文字”的极简引导程序,全程包含核心概念解析、可直接运行的代码、完整实践步骤,并解答新手常见疑问,适合零基础入门汇编和底层启动原理。

NMEMH4lf3的博客 364

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

macOS下用自制汇编语言编写的x86实模式下的磁盘管理系统

macOS下用自制汇编语言编写的一个x86实模式(real mode)下的磁盘管理系统(类DOS),上次说的是清屏,现在看一下格式化虚拟磁盘的效果。hd80.img是一个虚拟磁盘,本来没有文件系统,在虚拟机bochs中运行磁盘管理系统,输入fmt命令,就可以格式化hd80.img,进而可以操作磁盘。

水木姚姚个人主页:知乎同名个人主页:https://www.zhihu.com/people/66-64-1-50 474

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

操作系统学习10 x86引导程序加载C语言程序

自制操作系统学习2 加载C语言程序一、准备工具二、操作步骤1. 实现步骤2. 重点(1) 汇编语言子程序实现(2) 在C中调用汇编的方法三、编译的重点3. 编译运行 一、准备工具 bochs Virtual Machine nasm gcc ld 等。更多需要的工具已经放在码云开源仓库。 二、操作步骤 1. 实现步骤 完成引导程序开发 使用汇编语言两段子程序 使用C语言开发调用汇编子程序 编译程序,制作软盘镜像 BIOS加载并运行汇编语言的引导程序 汇编语言程序从软盘读取10扇区,当中包含C语言程序

猿来这样-谢厂节的博客 906

从0手写自己的Linux x86操作系统(视频教程)

从0手写自己的Linux x86操作系统(视频教程)

闲余知道 1940

80X86汇编_绘制五角星程序

80X86汇编_绘制五角星程序DATAS SEGMENT mode  dw 0COLOR DW 12 BKCOLOR DW 15 POINT dw 160,200,480,200,480,200,220,380      dw 220,380,320,80,320,80,420,380      dw 420,380,160,200DATAS ENDS STACKS SEGMENT DW 20

dididu1515的专栏 1758

操作系统学习:启动进入实模式

本文参考书籍 操作系统真相还原 Linux内核完全剖析:基于0.12内核 x86汇编语言 从实模式到保护模式 ps:基于x86硬件的pc系统 实模式相关介绍 实模式在上文已经做了简要的介绍,实模式的寄存器都是16位,实模式的1MB的寻址能力是通过段基址左移四位加上段内偏移实现的,由于BIOS启动的过程中就会被cpu执行,所以当bios加载完成时,1MB的内存布局如下图所示(图片来源操作系...

qq_33339479的博客 1906

操作系统学习11 x86-C调用汇编程序与传参

自制操作系统学习3 C调用汇编程序与传参一、准备工作二、C调用汇编的方法1. 写汇编方法 本章实现字符的输入与输出 一、准备工作 Win7环境 Bochs gcc,ld,nasm等 代码架构如下: env和 tools里是一些编译开发工具。 代码托管在: 二、C调用汇编的方法 1. 写汇编方法 [BITS 16] global io_hlt global clear_screen global read_char; global print_char; global print_str; global

猿来这样-谢厂节的博客 1044

从零编写MBR:深入理解计算机启动流程与实模式编程实践

计算机启动流程是理解操作系统底层运行机制的关键。在x86架构中,当按下电源键后,BIOS会首先执行硬件自检,随后将硬盘第一个扇区的主引导记录加载到内存0x7C00地址处,并将控制权移交。MBR作为启动过程的第一阶段,其核心价值在于初始化硬件环境、建立基本内存布局,并为加载更复杂的操作系统内核或引导加载程序奠定基础。这一过程涉及实模式编程、直接内存访问和硬件中断调用等底层技术。在工程实践中,开发者常使用NASM汇编器编写MBR代码,并通过VirtualBox或QEMU等虚拟机进行测试验证。通过亲手实现一个能够

weixin_34259232的博客 349

32位保护模式汇编语言[1]:实模式与保护模式的故事

漫游在机器指令的海洋,徘徊于实模式与保护模式之间,出入之间,自由无限。 ——谨以此系列文档献给广大疯狂痴迷于计算机程序的极客们~!

Mighten Dai的ASM, C, C++的天地 1377

操作系统实模式相关

FFFF0-FFFFF的指令如下: 是一条跳转指令(jmp 0xfe05b),表示跳转到BIOS代码真正开始的地方,BIOS载入一些硬件信息,如何跳转到0x7c00处,交由MBR执行。 接下来便是填写MBR了: mbr.s ;主引导程序 ;------------------------------------------------------------ SECTION MBR vstart=0x7c00 mov ax,cs mov ds,ax mov.

mazamu的博客 289

《操作系统真象还原》 第二章 编写MBR主引导记录

0xFFFF0处存放着一条跳转指令,用于跳转到BIOS程序,BIOS程序会对0盘0道1扇区的最后两个字节进行校验查看是否存放的是MBR主引导记录,如果是0x55,0xaa,就会将改扇区的512字节加载到内存0x7C00处。8086CPU的寄存器是16位的(最多只能存储0x0000~0xFFFF的数值),但它的地址线是20位的(20位地址线,能访问的物理内存范围是0x00000~0xFFFFF,共1MB,这也是实模式的最大内存寻址能力。(CL,CH) = 窗口左上角的(X,Y)位置,此处为(0,0)

2501_92612816的博客 619

UEFI x86_64内核开发实战:从启动流程到NEP程序加载

UEFI(统一可扩展固件接口)作为现代计算机的标准固件,取代传统BIOS实现了64位长模式的直接启动机制。其核心原理是通过EFI应用程序加载机制,在启动时自动搜索并执行EFI系统分区中的可执行文件,省去了复杂的模式切换过程。这种设计为操作系统开发提供了硬件抽象层,开发者可以直接利用UEFI提供的内存映射表和图形输出协议。在x86_64架构下,UEFI环境的技术价值在于大幅降低了内核开发门槛,使得开发者能够专注于内核核心功能的实现。典型的应用场景包括嵌入式系统、定制化操作系统和教育用途的操作系统开发实践。本文

ciya3282的博客 396

mkernel源代码逐行分析:从汇编引导到C语言主函数的实现细节

mkernel作为一个极简内核项目,展示了操作系统从硬件引导到用户空间的完整启动流程。本文将通过分析`kernel.asm`、`kernel.c`和`link.ld`三个核心文件,带你理解一个基础内核的实现细节。 ## 一、汇编引导:系统启动的第一步 内核启动的起点位于`kernel.asm`文件,这段汇编代码负责完成硬件初始化并交接控制权给C语言主函数。 ### 1.1 Multiboot

gitblog_00794的博客 625

操作系统攻略:自己动手从零开始写操作系统——2.编写MBR主引导记录

计算机启动与内存管理摘要 计算机启动时通过BIOS在实模式下完成硬件检测和初始化,其核心特性包括16位地址总线(1MB寻址空间)、分段寻址机制和单一特权级。现代操作系统启动后切换至保护模式,该模式支持更大的内存空间(32位/64位)、4级特权级(Ring 0-3)、内存保护和多任务机制。两种模式的主要区别在于:实模式仅有1MB寻址能力且无安全保护,而保护模式通过分段和分页机制实现内存管理,支持虚拟内存和任务隔离。系统启动必须经过实模式阶段,随后进入保护模式以支持现代操作系统的安全性和功能需求。

梅见十柒的博客 2481
上一篇: MySQL配置test_db数据库
下一篇: linux 常用命令,持续更新中~
code222vip
博客等级 码龄12年 33粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值