<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[csprimer的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/csprimer</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; csprimer]]></copyright><item><title><![CDATA[使用Bootloader加载操作系统内核2:Bootloader启动流程]]></title><link>https://blog.youkuaiyun.com/csprimer/article/details/145871639</link><guid>https://blog.youkuaiyun.com/csprimer/article/details/145871639</guid><author>csprimer</author><pubDate>Wed, 26 Feb 2025 10:52:38 +0800</pubDate><description><![CDATA[搞清楚了i386分段机制以后，我们来看bootloader是怎么启动的。下图就是32位CPU的物理地址空间范围，前面的1M是之前的8086的地址空间，从0到640K就是之前的8086可以使用的物理内存，从640到768是VGG显存空间，往这个区域写入字符就可以在显示器里显示，768-960是用来映射到外设，960-1M就是映射到BIOS ROM，BIOS程序是放在ROM里面，ROM跟RAM一样通过地址就可以访问，1M以上就是32位CPU的物理内存，最上面的一点是映射到32位CPU的外设。]]></description><category></category></item><item><title><![CDATA[使用Bootloader加载操作系统内核1:i386分段的机制]]></title><link>https://blog.youkuaiyun.com/csprimer/article/details/145724773</link><guid>https://blog.youkuaiyun.com/csprimer/article/details/145724773</guid><author>csprimer</author><pubDate>Wed, 19 Feb 2025 11:20:35 +0800</pubDate><description><![CDATA[描述符表设置完成以后，我们就看段选择子，段选择子就是每个段在描述符表中的偏移，gdt表里第1个段的偏移是0，那么它的段选择子就是0，第二个段是代码段它的偏移是8个字节，所以它的段选择子是8，第三段是数据段它的偏移是16，所以它的段选择子是16，代码段的段选择子是放在CS寄存器里面的，数据段是放在DS寄存器里面的，下图就会设置相应段的段选择子，代码段是8，数据段是0x10就是16，]]></description><category></category></item><item><title><![CDATA[十分钟掌握最常用的x86汇编语言]]></title><link>https://blog.youkuaiyun.com/csprimer/article/details/145678923</link><guid>https://blog.youkuaiyun.com/csprimer/article/details/145678923</guid><author>csprimer</author><pubDate>Mon, 17 Feb 2025 11:33:15 +0800</pubDate><description><![CDATA[movl是四个字节，但它这里比较特殊，它相当于是movzlq，它不仅会改变前面的四个字节，它还会把后面字节扩展成0，而movq就是8个字节，然后再看下面的，把一个64位整数赋给寄存器，把AA赋给dl，这里是把dl赋给al就改变一个字节，然后movs是符号扩展，这里就改变一个字节，并把后面几位做符号扩展，A它符号位是1，所以后面都扩展成1，z是零扩展，首先设置成AA，然后把后面几位扩展成0。寄存器寻址就是把寄存器的值来作为操作数，这里是把ebx的值赋给eax。]]></description><category></category></item><item><title><![CDATA[使用晶体管/门电路/D触发器实现寄存器和存储器]]></title><link>https://blog.youkuaiyun.com/csprimer/article/details/145606589</link><guid>https://blog.youkuaiyun.com/csprimer/article/details/145606589</guid><author>csprimer</author><pubDate>Thu, 13 Feb 2025 10:55:35 +0800</pubDate><description><![CDATA[然后我们来看怎么实现d触发器，在实际的使用d触发器的时候，我们还会加一个load，当load=1的时候，输出才受输入的影响，当load=0的时候，它的输出就保持之前的值，所以我们在前面加一个多路选择器，它的一个输入是新的输入in，一个输入是之前的输出out，当load=1的时候，它的输出就是新的输入in1，当load=0的时候，它的输出就是之前的输出out，就通过一个多路选择器来实现，]]></description><category></category></item><item><title><![CDATA[加法器的实现:使用晶体管,门电路实现加法]]></title><link>https://blog.youkuaiyun.com/csprimer/article/details/145335419</link><guid>https://blog.youkuaiyun.com/csprimer/article/details/145335419</guid><author>csprimer</author><pubDate>Fri, 24 Jan 2025 09:53:38 +0800</pubDate><description><![CDATA[首先我们看1位二进制的加法的实现，下图中a加b结果是sum进位是carry，那么我们通过下面的真值表可以看出来，0+0是等于0的，1+1是等于0的，其他情况相加的结果是1，所以这正好符合异或门的特性，我们把a b输入到一个异或门，它的输出就是a加b的结果sum，然后再看进位,1+1的进位是1，其他情况相加进位都是0，所以这正好符合与门的特性，我们把a b输入到一个与门，那么它的输出就是a+b的进位carry。实现完成以后也看一下结果，看一下它的结果是不是正确的，]]></description><category></category></item><item><title><![CDATA[基本门电路的实现:使用晶体管verilog实现门电路]]></title><link>https://blog.youkuaiyun.com/csprimer/article/details/145326452</link><guid>https://blog.youkuaiyun.com/csprimer/article/details/145326452</guid><author>csprimer</author><pubDate>Thu, 23 Jan 2025 17:15:22 +0800</pubDate><description><![CDATA[在verilog里面语句的前后顺序是没有关系的，它只是描述这些门电路之间是怎么连接的，比如下面的代码，g1这个异或门,它的输入是a b输出是s1，g1是连接到g4这个与门的，g1的输出s1作为g4的输入，然后g4是连接到g5的，g4的输出c2是作为g5的输入，所以你去改变这些语句的前后顺序是不会去改变这种连接顺序的。而FPGA是基于一种查找表的结构，叫做LUT， LUT本质上是一个RAM，RAM的内容是可以修改的，可以通过地址来寻址，我们可以把a b c的输入比如都输入0作为RAM的地址，]]></description><category></category></item><item><title><![CDATA[计算机系统概述：门电路，继电器，真空管和晶体管的工作原理]]></title><link>https://blog.youkuaiyun.com/csprimer/article/details/144973014</link><guid>https://blog.youkuaiyun.com/csprimer/article/details/144973014</guid><author>csprimer</author><pubDate>Sun, 12 Jan 2025 15:43:24 +0800</pubDate><description><![CDATA[比如我们看一下怎么执行1+1=2这个程序，它编译后会编译成4条汇编指令，我们假设这四条汇编指令是存放在M0到M3里面的，然后两个操作数1是存放在M40跟M41里的，最开始的时候PC是指向M0的，那么在第1个时钟周期CPU首先执行取指的操作，从M0里面取出第一条指令，然后执行第二步译码，解释指令的意思，然后第三步执行指令，把操作数1从M40里面移动到R0寄存器里面，然后第四步是回写，这条指令不需要回写。]]></description><category></category></item><item><title><![CDATA[自己动手编写CPU，操作系统，算法与数据结构，数据库，计算机网络，TCP/IP协议栈，软件工程，设计模式，编译器.]]></title><link>https://blog.youkuaiyun.com/csprimer/article/details/136069878</link><guid>https://blog.youkuaiyun.com/csprimer/article/details/136069878</guid><author>csprimer</author><pubDate>Wed, 07 Feb 2024 15:30:49 +0800</pubDate><description><![CDATA[计算机科学基础学习指南：从零编写CPU，操作系统，算法与数据结构，数据库，计算机网络，TCP/IP协议栈，软件工程，设计模式，编译器.]]></description><category></category></item></channel></rss>