好玩的汇编编译器NASM:一款基于x86架构的汇编与反汇编软件

好玩的汇编编译器NASM

This is the project webpage for the Netwide Assembler (NASM), an asssembler for the x86 CPU architecture portable to nearly every modern platform, and with code generation for many platforms old and new.

Netwide Assembler(NASM)是一种可移植到几乎所有现代平台的x86 CPU架构的组装器,并为许多新旧平台生成代码。

网址:NASM

下载安装NASM

下载页面: Index of /pub/nasm/releasebuilds/2.16.03

下载后解压即可使用。

写代码

 写段代码:

org 07c00hmov ax, csmov ds, axmov es, axcall    DispStrjmp $
DispStr:mov ax, BootMessagemov bp, axmov cx, 16mov ax, 01301hmov bx, 000chmov dl, 0int 10hret
BootMessage:    db "Hello,World"
times 510-($-$$) db 0dw  0xaa55

保存为boot.asm

编译:

nasm.exe boot.asm -o boot.bin

看看编译完成的文件:

E:\work\os>dir
 驱动器 E 中的卷是 新加卷
 卷的序列号是 CA89-671D

 E:\work\os 的目录

2024/12/11  21:52    <DIR>          .
2024/12/11  21:52    <DIR>          ..
2024/12/11  21:44               312 boot.asm
2024/12/11  21:52               512 boot.bin

写入磁盘映像img

使用FloppyWriter软件,将boot.bin文件写入Image。

下载FloppyWriter软件

FloppyWriter/Release at master · huangyingw/FloppyWriter · GitHub

下载之后安装即可使用。 

打开FloppyWriter软件,选择刚才编译好的的boot.bin,写入文件,测试下来需要打开一个*.img文件,

所以可以先创建一个newos.img的空白文件,写入的时候选中它就行了

写入完成:

2024/12/11  22:10               512 newos.img

虚拟机运行

用VirtualBox创建一个新的64位虚拟机,磁盘选择newos.img

然后启动虚拟机,启动成功!

附录

汇编代码解读

百度AI探索版对代码的解读:

这段代码是一段简单的汇编语言程序,用于在启动计算机时显示一段文本("Hello,World")。它是为BIOS中断调用和x86架构编写的,特别是为了在DOS或类似的裸机环境下运行。下面是对代码的逐行解释:

  1. org 07c00h:设置程序的起始地址为0x7c00。这是BIOS将引导扇区加载到内存中的地址。引导扇区是硬盘的第一个扇区,用于计算机的启动过程。

  2. mov ax, cs:将代码段寄存器(CS)的值移动到AX寄存器中。CS寄存器包含当前代码段的基地址。

  3. mov ds, ax:将AX寄存器的值(即CS的值)移动到数据段寄存器(DS)中。这样设置DS寄存器,使得后续的内存访问能够正确解析。

  4. mov es, ax:同样,将AX寄存器的值移动到附加段寄存器(ES)中。这通常用于字符串操作或内存块移动指令,但在这个简单的程序中可能不是必需的。

  5. call DispStr:调用DispStr标签处的子程序,用于显示字符串。

  6. jmp $:无限循环。$代表当前指令的地址,所以jmp $会让程序在这里一直循环,不会继续执行后面的代码。

  7. DispStr:DispStr子程序的开始。

  8. mov ax, BootMessage:将BootMessage标签处的地址移动到AX寄存器中。BootMessage是字符串"Hello,World"的地址。

  9. mov bp, ax:将AX寄存器的值(即BootMessage的地址)移动到基指针寄存器(BP)中。BP寄存器常用于基于基址的寻址。

  10. mov cx, 16:设置CX寄存器为16,表示要显示的字符数。这里"Hello,World"加上末尾的空字符共12个字符,但程序中设置的是16,可能是因为包含了额外的空格或为了对齐。

  11. mov ax, 01301h:设置AX寄存器为0x01301,准备调用BIOS中断10h(视频服务)的功能13h(写字符串)。

  12. mov bx, 000ch:设置BX寄存器为0x000C,指定显示页面的属性(这里是亮白色背景上的红色字符)。

  13. mov dl, 0:设置DL寄存器为0,指定字符串的起始行号。

  14. int 10h:调用BIOS中断10h,根据前面的设置显示字符串。

  15. ret:从子程序返回。

  16. BootMessage: db "Hello,World" times 510-($-$$) db 0:定义BootMessage标签,存储字符串"Hello,World"。times 510-($-$$)是用来填充直到引导扇区的510个字节(引导扇区总共512字节,减去前面的代码和这里的字符串所占的字节数)。db 0是字符串的结束符,确保字符串以空字符结尾。

  17. dw 0xaa55:写入引导扇区的最后两个字节为0xAA55,这是BIOS识别有效引导扇区的标志。

综上所述,这段代码的主要目的是在计算机启动时显示"Hello,World"字符串,并通过BIOS中断调用实现。它遵循了BIOS引导扇区的标准格式和约定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI知识】有监督学习分类任务之支持向量机

1.支持向量机概念 支持向量机&#xff08;Support Vector Machine, SVM&#xff09; 是一种有监督学习算法&#xff0c;主要用于分类任务&#xff08;也可用于回归任务&#xff0c;即支持向量回归&#xff0c;SVR&#xff09;。SVM的核心思想是找到一个最优的超平面&#xff0…

杭州乘云联合信通院发布《云计算智能化可观测性能力成熟度模型》

原文地址&#xff1a;杭州乘云联合中国信通院等单位正式发布《云计算智能化可观测性能力成熟度模型》标准 2024年12月3日&#xff0c;由全球数字经济大会组委会主办、中国信通院承办的 2024全球数字经济大会 云AI计算创新发展大会&#xff08;2024 Cloud AI Compute Ignite&…

【经典】制造供应链四类策略(MTS、MTO、ATO、ETO)细说

关注作者 制造供应链的牛鞭问题与复杂问题主要是从两个方面解决&#xff0c;一是同步化供应链消减从需求到供应的放大效应&#xff0c;二是供应链细分&#xff0c;针对不同的客户、不同的需求供应的匹配策略来应对复杂性&#xff0c;更好的满足客户并以最低的总成本来实现。 对…

实时日志与发展:Elasticsearch 推出全新专用的 logsdb 索引模式

作者&#xff1a;来自 Elastic Mark Settle, George Kobar 及 Amena Siddiqi Elastic 最新发布的 logsdb 索引模式是专为日志管理优化的功能&#xff0c;旨在提升日志数据的存储效率、查询性能以及整体可用性。这个模式专注于满足现代日志处理需求&#xff0c;提供更高效的日志…

React Image Crop——在React应用中轻松实现图片裁剪功能

React Image Crop是一个用于在React应用程序中裁剪和调整图像的库。它提供了一个简单而强大的界面&#xff0c;允许用户选择和调整裁剪区域&#xff0c;并生成裁剪后的图像。 什么是React Image Crop&#xff1f; React Image Crop是一个开源的React组件&#xff0c;用于在浏览…

【HarmonyOS】鸿蒙应用实现手机摇一摇功能

【HarmonyOS】鸿蒙应用实现手机摇一摇功能 一、前言 手机摇一摇功能&#xff0c;是通过获取手机设备&#xff0c;加速度传感器接口&#xff0c;获取其中的数值&#xff0c;进行逻辑判断实现的功能。 在鸿蒙中手机设备传感器ohos.sensor (传感器)的系统API监听有以下&#xf…

微积分复习笔记 Calculus Volume 2 - 3.7 Improper Integrals

3.7 Improper Integrals - Calculus Volume 2 | OpenStax

ViewModel

ViewMode是MVVM架构模式中VM层对应的类&#xff0c;它的作用是存储界面数据&#xff0c;并和界面发生数据交互。ViewModel能感知生命周期&#xff0c;并且在界面由于配置问题发生重建时候&#xff0c;可以保持当前的数据不变。生命周期如下&#xff1a; ViewMode由ViewModePr…

智慧城市道路分割数据集labelme格式2648张1类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;2648 标注数量(json文件个数)&#xff1a;2648 标注类别数&#xff1a;1 标注类别名称:["road"] 每个类别标注的框数&#x…

leetcode-73.矩阵置零-day5

class Solution {public void setZeroes(int[][] mat) {int m mat.length, n mat[0].length;// 1. 扫描「首行」和「首列」记录「首行」和「首列」是否该被置零boolean r0 false, c0 false;for (int i 0; i < m; i) {if (mat[i][0] 0) {r0 true;break;}}for (int j …

uni-app H5端使用注意事项 【跨端开发系列】

&#x1f517; uniapp 跨端开发系列文章&#xff1a;&#x1f380;&#x1f380;&#x1f380; uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…

DCDC降压模块

一、项目介绍 在B站看到工科男孙老师发的DCDC模块视频&#xff0c;后面有提到这款芯片&#xff0c;于是就使用这款芯片自己设计了这款降压模块。 芯片的封装为TSOT23-8&#xff0c;对空间利用率高。 输入电压的范围为3-18V。 输出电压的范围为0-8V。 输出电流最…

康耐视智能相机(Insight)通过ModbusTCP发送字符串到倍福(BECKHOFF)PLC中

文章目录 1.背景2.分析3.实现3.1.PLC的ModbusTCP_Server3.1.1.安装TF6250-Modbus-TCP3.1.2.PLC设置 3.2.智能相机的ModbusTCP_Client3.2.1.了解ModbusTCP的协议3.2.2.根据协议写代码3.2.2.1.纯函数代码3.2.2.2.脚本代码 3.2.3.非脚本处理时的代码逻辑图3.2.4.关于代码的问题及解…

基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究|文献速递-生成式模型与transformer在医学影像中的应用速递

Title 题目 Mammography classification with multi-view deep learning techniques:Investigating graph and transformer-based architectures 基于多视角深度学习技术的乳腺X线分类&#xff1a;图神经网络与Transformer架构的研究 01 文献速递介绍 乳腺X线检查是乳腺癌…

恢复删除的文件:6个免费Windows电脑数据恢复软件

数据恢复软件可帮助您从众多存储设备中恢复损坏或删除的数据。您可以使用这些文件恢复软件来检索文件、文档、视频、图片等。这些应用程序支持多种标准文件格式&#xff0c;如 PNG、RTF、PDF、HTML、JPG、MP3 等。 经过超过 75 小时的研究&#xff0c;我分析了 25 最佳免费数据…

探索 Python 编程调试案例:程序平均值的修复过程

&#x1f49d;&#x1f49d;&#x1f49d;Python 作为一门广泛应用的编程语言&#xff0c;其编程过程并非总是一帆风顺。即使是经验丰富的程序员&#xff0c;也会在代码中遇到各种错误。而调试Python代码过程&#xff0c;也是学习中不可避免的步骤。 今天来看一个简单的案例。…

简单了解一下 Go 语言构建约束?

​构建约束是一种在 Go 语言中控制源文件编译条件的方法&#xff0c;它可以让您指定某些文件只在特定的操作系统、架构、编译器或 Go 版本下编译&#xff0c;而在其他环境中自动忽略。这样可以方便您针对不同的平台或场景编写不同的代码&#xff0c;实现条件编译的功能。 构建…

人工智能大语言模型起源篇(二),从通用语言微调到驾驭LLM

上一篇&#xff1a;《人工智能大语言模型起源篇&#xff08;一&#xff09;&#xff0c;从哪里开始》 &#xff08;5&#xff09;Howard 和 Ruder 于2018年发表的《Universal Language Model Fine-tuning for Text Classification》&#xff0c;https://arxiv.org/abs/1801.06…

基于MATLAB的电力系统潮流计算

为了进行潮流计算&#xff0c;通常可以使用像MATPOWER这样的电力系统分析工具包&#xff0c; 在MATLAB中的MATPOWER工具包中&#xff0c;多个不同的系统模型被定义为测试案例&#xff08;case&#xff09;。这些测试案例用于模拟和分析电力系统中的潮流计算、最优潮流问题、稳…

Unity屏幕截图、区域截图、读取图片、WebGL长截屏并下载到本地jpg

Unity屏幕截图、区域截图、读取图片、WebGL长截屏并下载到本地jpg 一、全屏截图并保存到StreamingAssets路径下 Texture2D screenShot;//保存截取的纹理public Image image; //显示截屏的Imagepublic void Jietu(){StartCoroutine(ScrrenCapture(new Rect(0, 0, Screen.width…