自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

车子(chezi)

熟能生巧,功不唐捐

  • 博客(304)
  • 资源 (8)
  • 收藏
  • 关注

原创 问题解决:下载的网页打开后自动跳转到首页

提出问题我把CSDN上的某篇博客下载到本地,用浏览器打开,看着看着,不到5秒钟就会跳转到CSDN的首页,实在是闹心啊。有没有解决办法呢?解决问题用文本编辑器打开(下图以Notepad++为例),搜索关键词onerror,找到下图中所示的一行: 【例 1】 【例 2】 不要心慈手软,直接删除后保存即可。【完】...

2018-04-24 23:08:27 10159 9

原创 C语言中“数组名”和“&数组名”

C语言中 数组名 和 &数组名== 实验环境 == 1. 编译器:gcc 5.4.0 2. 操作系统:Ubuntu 16.04 x86_64缘起本以为此知识点我已熟练掌握,可是最近应用的时候还真给记混淆了。所以写篇文章加深印象。Show me the code废话少说,show me the code.#include <stdio.h>int ...

2018-04-22 23:35:27 9123 14

原创 在 C 中引用汇编语言定义的 .globl 变量

缘起在 Linux-0.11 中遇到了这种用法,所以想做个实验以加深理解。实验代码分为2个源文件和1个Makefile.a.s.globl phone_num.dataphone_num:.word 0x1234.word 0x5678可以认为,phone_num是一个全局变量,可以供其他文件链接,phone_num的值是0x56781234.b...

2018-04-22 15:07:07 3017

原创 main 函数解析(二)—— Linux-0.11 学习笔记(六)

main函数解析(二)——Linux-0.11 学习笔记(六)4.6 blk_dev_init函数void blk_dev_init(void){ int i; for (i=0 ; i<NR_REQUEST ; i++) { request[i].dev = -1; //表示空闲 request[i].next = NUL...

2018-04-14 23:57:48 1502 1

原创 PC 机 UART(NS8250)详解

PC 机 UART(NS8250)详解异步串行通信原理两台计算机/设备进行数据交换,即通信,必须像人们对话一样使用同一种语言。在计算机通信术语中,我们把计算机/设备与计算机/设备之间的“语言”称为通信协议。通信协议规定了传送一个有效数据长度单位的格式。通常我们使用术语“帧”来形容这种格式。为了能让通信双方确定收/发的顺序和进行一些错误检测操作,除了必要的数据以外,在传输的一帧信息中还包含用...

2018-04-11 23:35:01 4509 2

原创 波特与比特率

题目:波特与比特率码元码元(code cell)是携带信息的波形符号,也即“时间轴上的一个信号编码单元”。码元可能是二进制的,也可能是多进制的。 二进制中,脉冲的有或无就表示这个码元状态的“1”或“0”,即码元有2种状态,这种码元称为二进制码元。在QPSK(四进制相移键控,Quaternary Phase Shift Keying)中,利用载波的四种不同相位来表示数字信息,即码...

2018-04-05 16:55:34 1065

原创 main函数解析(一)——Linux-0.11 学习笔记(五)

main()函数解析(一)——Linux-0.11 学习笔记(五)经过了前面的各种铺垫,终于来到了main函数。这篇博客的任务是把init/main.c讲清楚。由于牵扯到很多的函数调用,要想一次就说明白是很难的,所以我们把目标定得低一点,把脉络理清楚就行。1. 宏定义_syscall0文件开头的头文件包含等就不多说了。对于C语言比较熟悉的朋友,我想第一个拦路虎就是“GCC内嵌汇编”...

2018-04-01 23:17:08 2729 2

原创 Linux 0.11 实验环境搭建与调试

缘起之前我写过一篇博文:Linux 0.11 实验环境搭建本以为有了这个环境(gcc-3.4 & gdb-6.8),就可以调试无忧了。谁知遇到了以下问题:(1)用 gdb 调试 main 函数的时候,无法输出变量的值。总是提示: No symbol “XXX” in current context.(2)虽然在编译时为 gcc 加上了-gdwarf-2 -g3这两...

2018-03-25 12:05:34 16377 5

原创 ubuntu 终端内查找/搜索

缘起有人问终端的 find 功能在哪儿?比如说终端哗啦啦刷了一波屏,我想查找之前显示的某个消息,请问怎么找?答案其实非常简单,看图。

2018-03-24 22:47:19 11159 2

原创 从源码安装GDB-8.1

实验环境:Ubuntu 16.04(64位)缘起虽然在编译 Linux-0.11 时为 gcc 加上了-gdwarf-2 -g3这两个选项,但还是无法查看宏的定义。我想是不是 gdb 的版本太低了,于是打算升级 gdb.下载源码在 http://www.gnu.org/software/gdb/ 上找到最新的 8.1 版本安装安装三部曲——配置 、make、in...

2018-03-24 22:40:15 5783

原创 故障解决:端口已被占用 1080

更新记录版本 时间 修订内容1.0 2018-3-28 增加了方案二问题的提出【实验环境】:Win7 64bit也许你会碰到以下错误: 本文给出2种解决方案。方案一既然说端口已被占用,那就需要找出是哪个程序占用了1080端口。 打开cmd.exe,输入命令:netstat -aon|findstr "1080"最后一列就是 PID 了,...

2018-03-24 18:59:39 178023 17

原创 故障解决:error while loading shared libraries: libncurses.so.5

故障解决:error while loading shared libraries: libncurses.so.5 问题的提出在我准备调试 Linux-0.11 内核的时候,出现了如下故障(真奇怪,以前没有这个问题啊,怎么突然就这样了,555555555……) /rungdb ./gdb: error while loading shared libraries: l...

2018-03-19 23:26:23 43320 3

原创 kernel_mktime() 详解 —— Linux-0.11 学习笔记(四)

题目:kernel_mktime() 详解 —— Linux-0.11 学习笔记(四)在init/main.c文件中,有一个函数static void time_init(void)该函数读取 CMOS 实时时钟信息作为开机时间,并保存到全局变量startup_time (以秒为单位)中。static void time_init(void){ struct tm time;...

2018-03-17 22:59:42 1002

原创 head.s 分析——Linux-0.11 学习笔记(三)

题目:head.s 分析head.s 程序在被编译生成目标文件后会与内核其他程序一起被链接成 system 模块,它位于 system 模块的最开始部分,这也就是为什么称其为“头部(head)”程序的原因。从这里开始,内核完全是在保护模式下运行了。head.s 汇编程序与前面的语法格式不同,它采用的是AT&T汇编语言格式,并且需要使用 GNU 的 as 和 ld 进行编译和连接。因...

2018-03-11 00:00:49 3911 1

原创 在汇编程序中调用C函数

一、参数如何传递汇编程序调用C函数时,函数的入口参数使用栈来传送,参数的传递顺序是从右到左。即函数最后(最右边的)一个参数先入栈,而最左边的第一个参数最后入栈,然后执行 CALL 指令去调用C函数。二、参数的清除在C函数返回后,汇编程序需要把先前压入栈中的函数参数清除掉,即调用者负责清除参数占用的栈空间。比如要调用的C函数和要传递的参数是printSomething (arg1...

2018-03-10 21:30:57 18177

原创 ORG 伪指令

汇编地址计数器汇编地址计数器用符号$表示,它用来记录正在被汇编程序翻译的语句的地址,即它的内容标示了汇编程序当前的工作位置。在一个源程序中往往包含多个段。汇编程序在将该源程序翻译成目标程序时,每遇到一个新的段,就为该段分配一个初置为0的汇编地址计数器,然后,再对该段中的指令汇编。在汇编过程中,对凡是需要申请分配存储单元的变量和产生目标代码的指令,汇编地址计数器就按存储单元数和目标代码的长度...

2018-03-08 21:46:48 4448

原创 setup.s 分析—— Linux-0.11 学习笔记(二)

更新记录 版本 时间 修订内容 1.0 2018-4-14 增加了“获取显示模式”这一节,AL取值的表格标题: setup.s 分析—— Linux-0.11 学习笔记(二)老规矩,为了节省篇幅,完整的代码就不贴了。定义符号常量INITSEG = 0x9000 ! bootsect.s 的段地址SYSSEG = 0...

2018-03-06 22:06:45 3895 4

原创 详解8259A

详解8259A可编程中断控制器可编程中断控制器(PIC - Programmable Interrupt Controller)是微机系统中管理设备中断请求的管理者。当PIC向处理器的INT引脚发出一个中断信号时,处理器会立刻停下当时所做的事情并询问PIC需要执行哪个中断服务请求。PIC则通过向数据总线发出与中断请求对应的中断号来告知处理器要执行哪个中断服务过程。处理器则根据读取的中断...

2018-03-04 21:48:41 57631 30

原创 关于A20

A20是什么1981年8月,IBM 公司最初推出的个人计算机所使用的 CPU 是 Intel 8088。在该微机中地址线只有 20 根(A0~A19)。当时,计算机的 RAM 只有几百 KB 或不到 1MB 时,20 根地址线已足够用来寻址。其所能寻址的最高地址是0xffff:0xffff,即0x10ffef。对于超出 0x100000(1MB)的寻址地址, 将默认回卷到0x0ffef。I...

2018-02-24 22:59:57 2532

原创 Markdown语法入门

版本 时间 修订内容 1.0 2018-4-5 完善了“表格”这一节写在前面: 若没有特别说明,则以CSDN在线编辑器为例,不同的编辑器或平台也许效果不一样。关于Markdown语法的文章是汗牛充栋,一搜一大片。这里我不打算写一篇大而全的文章,而是提纲挈领,让新手快速入门。Markdown 是什么 Markdown 是一种轻...

2018-02-21 23:15:19 953

原创 bootsect.s 分析—— Linux-0.11 学习笔记(一)

bootsect.s分析—— Linux-0.11学习笔记(一)为了节省篇幅,完整的代码就不贴了。感兴趣的朋友可以去下载,下载地址是: http://oldlinux.org/Linux.old/本文,我打算详解bootsect.s。如有纰缪,还请各位看官斧正。关于如何讲好代码,我暂时没有找到什么好的展示方法。姑且贴一段、注释一段、讲一段吧。为了不使代码片太长,我删去了一些原来的注释。...

2018-02-13 23:31:45 5608 8

原创 Linux-0.00 代码解析(四)

Linux 0.00 的编译、运行、源码下载: http://blog.csdn.net/longintchar/article/details/78757065 Linux 0.00 Makefile 解读: http://blog.csdn.net/longintchar/article/details/78857966 Linux 0.00 代码解析(一): http:/

2018-02-04 15:32:32 1657

原创 如何在自己的博客中搜索

问题的提出:我曾经总结了一个知识点,但是不记得是哪篇博文了。我需要在我的所有博文中搜索某个关键词。解决方法:使用搜索引擎的site语法。site表示在指定的域名或网站内搜索。示例:搜索包含“金庸”和“古龙”的中文新浪网站页面金庸 古龙 site:sina.com.cn示例:在我的博客中搜索关键词“大小端”(我的CSDN博客主页是:http://blog.csdn.net/lon

2018-01-30 23:09:51 689

原创 Linux-0.00 代码解析(三)

6. 安装中断门和陷阱门# setup timer & system call interrupt descriptors. movl $0x00080000, %eax movw $timer_interrupt, %ax movw $0x8E00, %dx movl $0x08, %ecx # The PC default t

2018-01-21 20:18:02 2262 3

原创 Linux0.00 代码解析(二)

Linux 0.00 的编译、运行、源码下载: http://blog.csdn.net/longintchar/article/details/78757065 Linux 0.00 Makefile 解读: http://blog.csdn.net/longintchar/article/details/78857966 Linux 0.00 代码解析——boot.s: h

2018-01-20 13:11:06 2255 1

原创 浅谈尾递归的优化

在 浅谈尾调用和尾递归 这篇博文中,我谈了什么是尾递归以及编译器如何优化尾递归。这篇文章,咱来个具体的例子,通过汇编代码来看看优化和不优化的区别。求阶乘的尾递归写法// file_name : factorial.c#include int factorial_tail(int n, int product_from_n){ if (n == 1) re

2018-01-18 23:07:56 841

原创 浅谈尾调用和尾递归(C语言)

什么是尾调用在计算机科学里,尾调用是指一个函数里的最后一个动作是一个函数调用的情形,即这个调用的返回值直接被当前函数返回的情形。这种情形下称该调用位置称为“尾位置”。说得通俗点,尾调用就是指某个函数的最后一步是调用另一个函数。这个调用位置称为“尾位置”。比如有个函数叫fun,其实现是:int fun(void){ foo();}上面代码中,函数fun的最后一步是

2018-01-07 21:58:20 2608 2

原创 二分查找的递归和非递归算法(C语言实现)

二分查找的用途二分查找又称折半查找,它用来解决“在一堆数中找出指定的数(也可能找了,发现没有)”这类问题。二分查找的应用条件要应用二分查找,这“一堆数”必须有以下特征:存储在数组中 有序排列所以,如果数是用链表存储的,那就无法在其上应用二分查找。 至于是升序排列还是降序排列、数组中是否存在相同的元素都不要紧。在本文的实验中,我们使数组递增排列,且数组中的元素互不相同。

2018-01-06 18:34:17 13088 2

原创 关于 Intel 8253/8254

Intel 8253/8254是一个可编程定时/计数器(PIT-Programmable Interval Timer)芯片,用于处理计算机中的精确时间延迟。该芯片提供了 3个独立的16位计数器通道。每个通道可工作在不同的工作方式下, 并且这些工作方式均可以使用软件来设置。对于PC/AT及其兼容微机系统采用的是8254芯片。

2017-12-24 16:13:56 10073 3

原创 80x86描述符总结及解析描述符的小程序

一、描述符的分类二、描述符格式1、数据段描述符2、代码段描述符3、LDT段描述符4、TSS段描述符5、调用门描述符6、中断门描述符7、陷阱门描述符8、任务门描述符三、解析描述符的小程序#include //定义描述符中的低32位struct seg_des_low_wo

2017-12-23 18:15:02 1300 1

原创 Linux 0.00 Makefile 说明

对Linux-0.00的Makefile进行注解。

2017-12-20 22:28:13 899

原创 Linux 0.11 实验环境搭建

如果想学习Linux 0.11,实验环境是必不可少的。最好是能编译,能运行,能调试。如今大家都是用64位的Linux操作系统,而且是高版本的GCC(4.0以上),所以环境搭建是个难题。要么就是编译后满屏报错,要么就是运行时出问题,总之各种麻烦。还好,有热心的朋友提供了可用的环境,在此深表谢意。我的环境是:Win7(64位)+Vmware+Ubuntu 16.04(64位) 如果不用虚...

2017-12-17 21:21:37 17293 56

原创 Linux 0.00 代码解析(一)

《Linux内核完全剖析》这本书在第4章给出了一个简单多任务内核示例程序,作者称之为Linux 0.00系统。源码的下载地址和实验方法可以参考我的博文 http://blog.csdn.net/longintchar/article/details/78757065本文想分析一下启动代码boot.s.

2017-12-10 21:46:40 2729

原创 Linux 0.00 的编译和运行

《Linux内核完全剖析》这本书在第4章给出了一个简单多任务内核示例程序,我们称之为Linux 0.00系统。本文介绍了一种把它跑起来的方法。

2017-12-09 10:55:40 3895 4

原创 故障解决:没有未桥接的主机网络适配器

我在win7上安装了VMware虚拟机,虚拟机上安装了Ubuntu,但是我发现Ubuntu不能上网了。在VMware的“虚拟网络编辑器”中,我想把VMnet0设置为桥接,可是弹出提示——无法将网络更改为桥接状态:没有未桥接的主机网络适配器。搜了一波,问题已经解决。

2017-12-04 20:24:28 22440

原创 单链表入门(二)

上篇博文,介绍了线性表、单链表等概念。这篇博文,我们就写代码来实现带头结点的非循环单链表。

2017-12-02 21:55:36 417

原创 单链表入门(一)

什么是线性表什么是单链表

2017-12-02 15:37:41 478

原创 双向循环链表的插入排序

前两篇博文,我讨论了链表的冒泡排序和选择排序(以Linux内核链表为例),这篇文章,我想说说插入排序。

2017-11-30 21:55:53 4183

原创 双向循环链表的选择排序

以Linux内核链表为例,进行选择排序

2017-11-30 20:55:45 1743

原创 双向循环链表的冒泡排序

以内核链表为例,进行冒泡排序

2017-11-28 21:15:58 7086 1

themes.zip

typora主题包,解压后覆盖目标文件夹即可。 # How to install a theme Download theme from this website or other place. Open typora. Click "Open Theme Folder" button from `Preference Panel` → `Appearance` section. Put downloaded content into the opened folder, make sure your css files are directly under that directory.

2020-04-12

《从实模式到保护模式》第15章习题二的答案

《从实模式到保护模式》第15章习题二的答案,经测试,符合题目要求。

2016-07-17

《从实模式到保护模式》第15章习题一的答案

《从实模式到保护模式》第15章习题一的答案,经测试,符合题目要求。

2016-07-17

《从实模式到保护模式》第15章代码修改

《从实模式到保护模式》第15章代码修改

2016-07-11

《从实模式到保护模式》第14章的代码(修改版)

《x86汇编语言:从实模式到保护模式》第14章的代码(修改版),内容包括: 课后习题1和2; 修复了一些BUG; 增加颜色支持; 用栈传递参数;

2016-06-04

《x86汇编语言:从实模式到保护模式》第13章代码补丁

我发现配书代码中有一个小小的BUG,制作了自己的补丁包,另外还添加了其他功能。比如字符串输出支持不同的颜色等。

2016-04-10

《从实模式到保护模式》配书源码和工具

《x86汇编语言:从实模式到保护模式》主要讲述INTEL x86处理器的16位实模式、32位保护模式,至于虚拟8086模式,则是为了兼容传统的8086程序,现在看来已经完全过时,不再进行讲述。《x86汇编语言:从实模式到保护模式》的特色之一是提供了大量典型的源代码。 本资源就是配书工具和源代码

2016-01-03

orange's:一个操作系统的实现

非常不错的一本书,非扫描,可以复制。 “本书是《 自己动手写操作系统》 的第二版, 通过一个具体的实例向读者呈现一个操作系统雏形的实现过程。 有关操作系统的书 籍资料可以找到很多, 但是关注如何帮助读者实现一个试验性操作系统的书籍却不多见, 本书便是从一个简单的引导扇区开始, 讲 述一个操作系统成长的故事, 以作读者参考之用。 本书面向实践, 通过具体实例教读者开发自己的操作系统。 书中的步骤遵循由小到大、 由浅入深的顺序, 跟随这些步骤, 读者 可以由一个最简单的引导扇区开始, 逐渐完善代码, 扩充功能, 最后形成一个小的操作系统。”

2015-10-20

空空如也

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

TA关注的人

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