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

2023-11-02 06:10

本文主要是介绍大灰狼汇编视频的启动程序编写的笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

主要内容

 

开发环境搭建

认识引导程序

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编译自己编写的汇编代码?

 

这篇关于大灰狼汇编视频的启动程序编写的笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/328655

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编