大灰狼汇编视频的启动程序编写的笔记

 

主要内容

 

开发环境搭建

认识引导程序

nasm汇编

编写第一个启动程序

 

一、开发环境的搭建

我们将使用两种虚拟机Visual PC2004和VMware

Visual PC2004是微软推出的虚拟机软件我们用它来启动我们自己编写的启动程序

VMware虚拟机软件,我们在上面安装Linux。利用nasm汇编器在linux上进行启动程序的编译工作

 

启动程序演示

让Visual PC打开我们自己编写好的启动盘镜像文件,让虚拟机从我们编写的软盘镜像中启动

 

二、知识预备

理解计算机加电过程

BIOS对系统内存的分配

认识引导程序的概念

使用nasm进行编译

制作软盘镜像

 

1.计算机加电过程

当我们按下电源按钮后,计算机是如何从无到有将操作系统运行起来的?

按下开机按钮后,将发送电信号给BIOS

BIOS获得电信号后将启动自检查程序,检查周边设备是否通电完毕

检查完毕后自检程序把控制权交还BIOS,BIOS将读取引导驱动器中的启动程序

2.系统的内存安排

在系统加电时最初的1MB内存是BIOS为我们准备好的,它的分布情况如图

 

 

三、认识引导程序

什么样的程序才能成为引导程序?

BIOS将所检查启动磁盘的第一个扇区521字节载入内存,放于内存0x0000:0x07c00处

如果第一扇区最后两个字节是55AA那么它就是一个引导程序

 

引导程序的特点:

它的大小是512字节,不能多也不能少因为BIOS只读512B到内存中

它结尾必须是55AA,这是引导扇区的标志

它总是放在磁盘第一个扇区上(0磁头0磁道1扇区)因为BIOS只读取第一个扇区

 

四、nasm汇编

nasm是一个为可移植性与模块化而设计的一个80X86的汇编器。它支持相当多的目标文件格式包括linux和windows

 

如何用nasm编写一个引导程序?

什么是nasm它和masm有什么区别?

nasm拥有一个相当简单的内存引用规则,是任何对内存中内容的存取操作必须要在地址上加上方括号。但任何对地质值的操作不需要

 

比如‘mov ax,bar’的指令表示把bar的地址赋给ax寄存器,这相当于masm中mov  ax,offset bar要获得bar变量的值mov ax,[bar]

masm mov ax,es:di = nasm mov ax,[es:di]

 

 

如何在linux下安装nasm?

 

如何用nasm编译自己编写的汇编代码?

 

下面是一个简单的灰狼优化算法的MATLAB程序示例: ```matlab % 灰狼优化算法 MATLAB程序示例 % 初始化种群大小和迭代次数 population_size = 50; max_iterations = 100; % 初始化问题维度和搜索空间范围 problem_dimension = 3; lower_bound = [-10, -10, -10]; upper_bound = [10, 10, 10]; % 初始化灰狼群体 population = repmat(lower_bound, population_size, 1) + ... rand(population_size, problem_dimension) .* (repmat(upper_bound - lower_bound, population_size, 1)); % 初始化每只灰狼的适应度 fitness = zeros(population_size, 1); % 开始迭代 for iteration = 1:max_iterations % 计算每只灰狼的适应度 for i = 1:population_size fitness(i) = objective_function(population(i, :)); end % 找到适应度最佳的灰狼和最差的灰狼 [~, alpha_index] = min(fitness); [~, omega_index] = max(fitness); % 更新每只灰狼的位置 for i = 1:population_size a = 2 * (1 - iteration / max_iterations); % 计算线性递减的系数 % 更新位置 x_rand = population(randi(population_size), :); D_alpha = abs(a * rand * population(alpha_index, :) - population(i, :)); D_omega = abs(a * rand * population(omega_index, :) - population(i, :)); population(i, :) = x_rand - a * D_alpha + a * D_omega; % 限制位置在搜索空间的范围内 population(i, :) = max(population(i, :), lower_bound); population(i, :) = min(population(i, :), upper_bound); end end % 打印最优解 [~, best_index] = min(fitness); best_solution = population(best_index, :); best_fitness = fitness(best_index); disp('最优解:'); disp(best_solution); disp('最优适应度:'); disp(best_fitness); % 定义目标函数 function f = objective_function(x) % 这里可以根据问题定义自行编写目标函数 % 示例:f = sum(x.^2); end ``` 请注意,这只是一个简单的示例程序,你需要根据你的具体问题和目标函数进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值