30填学习自制操作系统第二天

今天要干什么?

  1. 初步了解汇编语言
  2. 使用汇编重新写个昨天的镜像文件
  3. 继续开发

一:

什么是电信号?

电脑的处理中心是CPU,即“central process unit”的缩写,翻译成中文就是“中央处理单元”,顾名思义,他就是处理中心。如果我们吧背的原件当作中心来使用的化,那他就叫做CPU了,所以无论什么时候CPU都总是处理中心。不过这个CPU除了与别的电路进行电信号交换以外什么都不会,而且对于电信号只有0(开或关)1 两种状态,就是个集成电路版,只是忠实的执行电信号给他的指令,输出相应的电信号。

0000 0000 0000 0000 0000 0100 1010 0010 这32个电信号的集合来表示1186这个整数。(注:用二进制表示1186的话,就是0100 1010 0010)

虽然二进制与电信号有很好的一一对应关系,但他有一个缺点,那就是位数太多了,举个例子来说,如果我们把1234写成二进制数,就成了0100 1101 0010,长达11位,而写成十进制数,只用4位就够了。因为这样太浪费内存了,所以计算机业界普遍使用十六进制数。十六进制数的1234写成十六进制就是4D2,只用3位就够了。

二进制数和十六进制数对照表

0000 - 0

0001 -1

0010 - 2

0011 - 3

0100 - 4

0101 -5

0110 - 6

0111 -7

1000 - 8

1001 -9

1010 -A(10)

1011 -B(11)

1100 -C(12)

1101 -D(13)

1110 -E(14)

1111 -F(15)

十六进制转换:4D2  == 0100 1101 0010

用汇编语言再写一个hello.img

作者给的汇编工具不能用了,使用DosBox

DOSBox, an x86 emulator with DOS
https://www.masm32.com/download.htm

在D盘下创建文件:masm包含:4个文件:masm.exe,link.exe,debug.exe,exe2bin.exe

文件1:masm.exe:汇编程序,用于汇编源程序(*.asm),得到目标程序(*.obj);

文件2:link.exe:连接程序,用于连接目标程序,得到可执行程序(*.exe);

文件3:debug.exe:调试程序,用于调试可执行程序

在DOSBox安装路径:双击DOSBox 0.74-3 option.bat 会跳出文件dosbox*.conf,在文件末尾填入以下两行后保存关闭,[axtoexec]后面:

其中d:\masm位存放masm.exe、link.exe、debug.exe等文件,第一行指定masm目录,第二行进行c盘

mount c d:\masm

c:

常用的命令:

mount <虚拟盘符><本地路径>:mount c d:\masm # 将本地目录d:\masm挂在为虚拟C盘

dir :常用参数 /w仅显示文件名,/p分页显示,*.exe筛选文件。例子:dir  /w *.exe   # 列出当前目录所有exe文件

del:删除文件 del old.exe # 删除单个文件

deltree: 删除目录及子文件 # deltree temp # 强制删除temp目录

debug:启动debug模式 # 输入debug进入调试环境,常用命令

R:AX # 查看/修改寄存器

D:05 #显示DS段0-5单元的数据(查看内存)

E: 1000 ‘Hello’ #在内存地址1000处写入字符串,写完再用d 1000查看测试

U:050 # 将0-50H地址的机器码转为汇编指令

T #执行当前CS:IP 指向的指令(单步执行)

G : 运行程序(debug hello.exe后输入g回车即可看到hello world)

q:推出debug

汇编程序编译:

masm hello.asm # 生成obj文件

Link hello.obj; # 生成exe文件

例子:手打一下吧,手写一个hello.asm文件,在运行上面的命令

快捷键:

Alt+Enter:切换全屏模式

Ctrl+F10: 释放鼠标锁定

Ctrl+F4:刷新虚拟驱动器(更新挂载目录内容)

Ctrl+F7:降低模拟速度(解决光标闪烁问题)

二:汇编重新编写脚本生成img镜像文件

就是把上面所有的16进制文件,在重新写一遍加上符合汇编格式的0x开头,这样要写的内容太多了,所以优化了一个脚本去写

按照作者的讲述流程 根据bat脚本 使用作者给的nask.exe 文件去执行nas文件

bat脚本文件

..\z_tools\nask.exe helloos.nas hellosc.img

作者给的nask文件在z_tools文件夹中

“;命令”,这个是注释命令,相当于C语言或者C++中的”//”

DB指令的新用法,我们居然可以用它写字符串。在写字符串的时候,汇编语言会自动查找字符串中每一个字符所对应的编码,然后把他们一个字节一个字节的排列起来。这个功能非常方便。

DW指令和DD指令,他们分别是”data word“和”data double-word“的缩写,是DB指令的”堂兄弟“。Word的本意是”单词“,但在计算机汇编语言中,word指的是16位的意思,也就是2个字节。”double-word“是32位的意思,也就是4个字节。

RESB 0x1fe-$.这个美元符号的意思(可以告诉我们这一行现在的字节数)(如果严格来说,有时候他还会有别的意思)在这个程序里,我们已经在前面输出了132个字节,所以这里的$就是132.因此nask先用0x1fe减去132,得出378这一结果,然后连续使出378个字节的0x00.

$相当于一个检查固定长度的值,因为输出的”hello world“内容有可能会变化,中间要输出的0x00字节数也会随之变化。为什么呢(必须要保证软盘的第510个字节,即ox1fe字节)开始的地方是55 AA。

注释:专业术语

TAB = 4 .。。。。。。 文本编辑器调整TAB键的宽度

FAT12格式。。。。。(FAT12 Format)用windows或MS-DOS格式化出来的软件就是这种格式。我们的helloos也是这种格式,其中容纳了我们开发的操作系统。这个格式兼容性好,在window上也能用

启动区。。。。。。。(boot sector)软盘第一个的扇区称为启动区。什么是扇区呢?计算机读写软盘的时候,并不是一个字节一个字节的读写的,而是以512字节为一个单位进行读写。因此,软盘的512字节就称为一个扇区。一张软盘的空间共有1440KB,也就是1440*1024=1474560字节,除以512得2880,这也就是说一张软盘共有2880个扇区。

为什么第一个扇区称为启动区呢?计算机首先从最初一个扇区开始读软盘,然后去检查这个扇区最后两个字节的内容。

  如果这最后两个字节不是55 AA,计算机会认为这张软盘上没有所需的启动程序,就会报一个不能启动的错误(也许有人问为什么一定是55 AA呢,那是当初的设计者定的,笔者也没法解释)。如果计算机确认了第一个扇区的最后两个字节正好是55 AA,那他就认为这个扇区的开头是启动程序,并开始执行。

IPL。。。。Initial program loader的缩写,启动程序加载器。启动区只有区区512个字节,实际的操作系统不会这么小,跟本装不进去,几乎所有操作系统,都是把加载操作系统本身的程序放在启动区里面的。有鉴于此,有时也将启动区称为IPL

启动......(bootstrap)boot这个词本是长靴(boots)的单数形式。他与计算机的启动有什么关系呢?

一般应该将启动称之为start的。Bootstrap在网络上有自力更生完成任务这种意思,也可以叫做操作系统的自动启动机制,被称为bootstrap方式。

三:继续开发

对原有的helloos.nas进行了再次开发,其中用到了一些新的指令:

1:“MOV AX,0”,相当于”AX=0;”这样一个赋值语句。同样,”MOV SS,AX”就相当于”SS=AX;“,相当于变量空间赋值语句。

2:再来说说AX和SS是什么。CPU里有一种名为寄存器的储存电路,相当于机器语言中的变量,具体有代表性的寄存器有8个.

AX--accumulator,累加寄存器

CX-counter, 计数寄存器

DX-data, 数据寄存器

BX-base,基址寄存器

SP-stack pointer,基址指针寄存器

BP-base-pointer,基址指针寄存器

SI-source index,源变址寄存器

DI-destination index,目的变址寄存器

这些寄存器全都是16位寄存器,因此可以存储16位的二进制数

参考链接:
30天自制操作系统——第二天_30 天自制操作系统-CSDN博客

(初学者)使用DOSBox编写汇编程序_dos box 中masm指令时出现1 severe errors怎么办-CSDN博客

汇编语言学习篇2——MASM的环境搭建(win10与Ubuntu1604下的配置)【有问题,待更正】-CSDN博客

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

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

相关文章

Python的顺序结构和循环结构

文章目录 一、条件语句&#xff08;1&#xff09;条件语句的定义&#xff08;2&#xff09;条件语句的语法&#xff08;a&#xff09;单分支 if&#xff08;b&#xff09;双分支 if-else&#xff08;c&#xff09;多分支 if-elif-elif-...-else &#xff08;3&#xff09;注意事…

金蝶云星空点击按钮实现指定文件下载

文章目录 金蝶云星空点击按钮实现指定文件下载业务需求开发实现 金蝶云星空点击按钮实现指定文件下载 业务需求 点击按钮&#xff0c;下载excel 开发实现 创建表单插件&#xff0c;在按钮点击事件&#xff0c;调用附件下载窗口进行指定路径的指定文件下载 模板存放路径 …

EasyExcel的简单使用

EasyExcel使用 官方文档&#xff1a;关于EasyExcel 1.1EasyExcel相关依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.11</version></dependency> 1.2 写Excel 1.2.1 最…

游戏引擎学习第107天

仓库:https://gitee.com/mrxiao_com/2d_game_2 回顾我们之前停留的位置 在这段内容中&#xff0c;讨论了如何处理游戏中的三维效果&#xff0c;特别是如何处理额外的“Z层”。由于游戏中的艺术资源是位图而不是3D模型&#xff0c;因此实现三维效果变得非常具有挑战性。虽然可…

「vue3-element-admin」基于 TypeScript 的 ECharts 按需引入方案实战 - Vue3 项目打包体积优化 57%

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

用Python实现图像风格迁移的技术分析

文章目录 一、概要 二、效果预览 三、整体架构流程 1. 用户界面(GUI): 2. 图像加载与显示: 3. 风格迁移核心算法: 4. 结果显示与保存: 5. 多线程处理: 四、技术名词解释 1. OpenCV: 2. TensorFlow: 3. VGG19: 4. GUI(图形用户界面): 5. 多线程: 五…

gsoap实现webservice服务

gsoap实现webservice服务 在实现Web服务时&#xff0c;使用gSOAP是一个很好的选择&#xff0c;因为它提供了强大的工具和库来创建SOAP和RESTful服务。gSOAP是一个C和C语言开发的库&#xff0c;它支持SOAP协议的各种版本&#xff0c;包括SOAP 1.1和SOAP 1.2。下面是如何使用gSO…

穷举 vs 暴搜 vs 深搜 vs 回溯 vs 剪枝

穷举 vs 暴搜 vs 深搜 vs 回溯 vs 剪枝 1. 全排列2. 子集 1. 全排列 题目链接&#xff1a;46. 全排列 算法原理&#xff1a; 画出决策树 设计函数 全局变量&#xff1a;二维数组ret存储结果&#xff1b;一维数组path存储路径&#xff1b;boolean类型一维数组visited表示当…

NAT(网络地址转换)技术详解:网络安全渗透测试中的关键应用与防御策略

目录 NAT的作用 NAT类型 NAT工作流程示例 NAT 转换技术的原理 源地址转换&#xff08;SNAT&#xff0c;Source NAT&#xff09;&#xff1a; 目标地址转换&#xff08;DNAT&#xff0c;Destination NAT&#xff09;&#xff1a; 端口地址转换&#xff08;PAT&#xff0c…

OpenCV图像基本操作

学习目标&#xff1a; 学习一些OpenCV中对于图像的基本操作 学习内容&#xff1a; 第一步导入库和所需的图像。 import cv2 import numpy as np imgcv2.imread("lena.png") # cv2.imshow("img",img) # cv2.waitKey(0) 访问和修改图片像素 访问图片像素…

具身智能在智能巡检机器人中的应用——以开关柜带电操作机器人为例

随着机器人技术和人工智能的迅速发展&#xff0c;具身智能在各行业的应用日益广泛&#xff0c;尤其是在电力行业中的智能巡检领域。传统的电力巡检和维护工作通常需要人工操作&#xff0c;存在着高温、高压、强电磁场等危险环境&#xff0c;且效率较低。开关柜带电操作机器人作…

巨控GRM530系列的远程模块用于PLC远程上下载方案

巨控GRM530系列的远程模块用于PLC远程上下载方案 一、方案概述 巨控科技基于全球加速服务器与智能通讯模块&#xff0c;提供高效、安全的工业设备远程上下载及维护服务。支持多协议PLC、触摸屏、运动控制器等设备&#xff0c;突破地域限制&#xff0c;实现跨国、跨网络的无缝调…

fastadmin快速搭建导航站和API接口站点系统

这份源码是基于fastadmin框架制作的&#xff0c;不仅可以快速搭建漂亮的导航站和API接口站点&#xff0c;而且还具有可扩展性和定制性。源码开放&#xff0c;方便二次开发和定制&#xff0c;适合各种需求。快来体验这个功能强大的站点源码&#xff0c;为您的项目提供便捷解决方…

【VB语言】EXCEL中VB宏的应用

【VB语言】EXCEL中VB宏的应用 文章目录 [TOC](文章目录) 前言一、EXCEL-VB1.实验过程2.代码 二、EXCEL-VB 生成.c.h文件1.实验过程2.代码 四、参考资料总结 前言 1.WPS-VB扩展包 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、EXCEL-VB 1.实验过…

告别第三方云存储!用File Browser在Windows上自建云盘随时随地访问

文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 无论是个人用户还是企业团队&#xff0c;都希望能够有一个高效、安全的解决方案来…

[250217] x-cmd 发布 v0.5.3:新增 DeepSeek AI 模型支持及飞书/钉钉群机器人 Webhook 管理

目录 X-CMD 发布 v0.5.3&#x1f4c3;Changelog&#x1f9e9; deepseek&#x1f9e9; feishu|dingtalk&#x1f4e6; x-cmd✅ 升级指南 X-CMD 发布 v0.5.3 &#x1f4c3;Changelog &#x1f9e9; deepseek 新增 deepseek 模块&#xff0c;用户可通过 deepseek 直接请求使用 …

Kubernetes控制平面组件:etcd常用配置参数

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…

Docker 入门与实战:从安装到容器管理的完整指南

&#x1f680; Docker 入门与实战&#xff1a;从安装到容器管理的完整指南 &#x1f31f; &#x1f4d6; 简介 在现代软件开发中&#xff0c;容器化技术已经成为不可或缺的一部分。而 Docker 作为容器化领域的领头羊&#xff0c;以其轻量级、高效和跨平台的特性&#xff0c;深…

Android 14输入系统架构分析:图解源码从驱动层到应用层的完整传递链路

一、资料快车 1、深入了解Android输入系统&#xff1a;https://blog.csdn.net/innost/article/details/47660387 2、书籍 - Android系统源代码情景分析 二、Perface 1、参考&#xff1a; 2、系统程序分析方法 1&#xff09;加入log&#xff0c;并跟着log一步步分析 -logc…

HarmonyOS-ArkTS基础快速入门

目录 ArkTS 快速入门 ArkTS 快速入门 如图&#xff0c;index.etc里面的内容&#xff08;图中框住的大长方形区域&#xff09;会渲染到预览区中&#xff0c;而console.log(xx,xxx)用于内容的打印&#xff0c;需要在日志中查看打印的内容