- 博客(19)
- 收藏
- 关注
原创 阅读分析Linux0.11 /boot/setup.s
每次开机,启动操作系统时,都要获取硬件的参数(setup.s的第一部分),获取参数是通过中断,处理中断的中断例程是BIOS提供的,中断类型码和中断例程的映射要通过中断向量表。所以bootsect.s中只能先加载到0X1000:0X0000处,然后setup.s再移动到0X0000:0X0000处。参数包括:光标的位置、内存的大小、屏幕显示的参数、硬盘的参数等。将加载到内存0X1000:0X0000处的系统核心模块System,移动到0地址(0X0000:0X0000)处。保护模式不是一两句话能说清的。
2025-04-04 17:04:26
662
原创 阅读分析Linux0.11 /boot/bootsect.s
bootsect.s是操作系统安装好后,操作系统所在磁盘引导扇区中的代码。CS=0XFFFF;IP=0X0000,先执行烧录在主板ROM中的BIOS程序,。BIOS会进行硬件检测、等工作,最重要的是将磁盘中(最初使用的软盘)0磁头0磁道1扇区的,然后设置CS=0X7C0;IP=0X0000,开始执行引导扇区的引导程序bootsect.s。bootsect.s源码的大致结构如下。最复杂的是,我会单独列出它的流程图。fill:#333;color:#333;color:#333;fill:none;
2025-03-29 23:21:51
1086
1
原创 第17章 使用BIOS进行键盘输入和磁盘读写
我参考书中本小节的分析,写了上述代码。调试时出错了,分析是显示出现了问题,但由于本书后半段写显示功能比较多,大致看了没问题,就在其它地方找问题。找的都烦了找不出问题,没办法只能单步调试,最后发现确实是显示出了问题,保存行号的dh没有恢复。,int 9中断例程向键盘缓冲区中写入,int 16h中断例程从缓冲区中读出。书中例子是在软盘上操作的,软盘早就淘汰了,本来我想拿U盘来测试,但是现在BIOS被UEFI代替了,没法操作,等升级了笔记本,装上虚拟机再来测试本小节,还有后面的实验17、课程设计2和综合研究。
2025-03-17 16:57:34
524
原创 第16章 直接定址表
这个实验的重点要关注,中断例程安装完成后,中断例程调用其它子程序时,地址的设置。在安装程序中,中断例程不会执行,安装程序中所有对内存访问的地址基础,是安装程序所在的地址空间,这个空间是DOS系统分配的;安装完成后,中断例程对内存访问的地址基础,是安装的位置。在其它段中,我们也可以使用数据标号来描述存储数据的单元的地址和长度。使用这种包含单元长度的标号,可以使我们以简洁的形式访问内存中的数据。(代码内不包含,测试部分,有兴趣的安装完中断例程,自己写个单独的测试文件,我已测试通过)在code段中使用的标号。
2025-03-06 21:46:49
709
原创 第12章 内中断
任何一个通用的CPU,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。
2025-02-14 21:34:28
567
原创 第8章 数据处理的两个基本问题
不过通过写这个程序,确实让我学会了结构化的访问数据,操作数据,对循环嵌套,加深了理解,以前简单的嵌套能写,复杂点的要搞半天才能解决,考虑问题没思路,现在感觉抓住结构化这点,至少让我有思路了。学了这一小节,我知道了,以前我写java程序时,数据都是瞎定义,只会根据是字符、布尔值,还是数字、数字长度、数字是不是浮点型,这些表面的东西来定义,或者说复杂的结构化的数据考虑,已经被水平更高的人规划好了,我只需要在别人框架下,写点增删改查。它是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复。
2024-10-02 19:23:58
1692
原创 第7章 更灵活的定位内存地址的方法
计算机中,所有信息都是二进制,而人能理解的信息是已经具有约定意义的字符。把人能理解的字符存储到计算机中,就需要对其进行编码,将其转化为二进制信息进行存储。而计算机要将这些存储的信息再显示给我们看,就要再对其进行解码。只要编码和解码采用同样的规则,我们就可以将人能理解的信息存入到计算机,再从计算机中取出。 在汇编程序中,,编译器将把它们转化为相对应的ASCII码。‘…’ 中几个字符就分配几个字节的空间。比如’unix’系统就分配4个字节。 我们也可以 在指令中以字符的形式给出数据。例如:m
2024-09-27 18:01:36
796
原创 第6章 包含多个段的程序
在操作系统的环境中,,因为操作系统不会让一个程序所用的空间和其他程序以及系统自己的空间相冲突。在操作系统允许的情况下,程序可以取得任意容量的空间。
2024-09-26 14:55:19
1580
原创 第4章 第一个程序
弹出的黑框是windows的shell,是Command程序,也是DOS的命令解释器。end是一个汇编程序的结束标记,编译器在编译过程中,如果碰到了伪指令end,就结束对源程序的编译。这章实验很简单,查看PSP的内容直接用debug的D命令,查看之后发现,我现在写过的仅有的两个汇编程序,运行时的PSP内容是相同的。汇编源程序中,除了汇编指令和伪指令,还有一些标号,比如“codesg”,一个标号指代一个地址,这个段名称最终将被编译、连接程序处理为一个段的 段地址。程序在编译时被编译器发现的错误是语法错误。
2024-09-20 16:28:42
720
原创 第3章 寄存器(内存访问)
push、pop实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出,而是由SS:SP指出的,同时push和pop指令还要改变SP中的内容。任意时刻,SS和SP指向栈顶元素,当栈为空时,栈中没有元素,也就不存在栈顶元素,所以SS:SP只能指向栈的最底部单元下面的单元,该单元偏移地址为栈最底部的字单元的偏移地址+2。一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么都不是。
2024-09-12 19:29:22
704
原创 第1章 基础知识
什么是内存地址空间呢?举例来讲,一个CPU的地址总线宽度为10,那么可以寻址1024个内存单元,这1024个可寻址的内存单元就构成这个CPU的内存地址空间。
2024-09-06 19:54:29
1773
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人