自制操作系统前置知识汇编学习

news/2025/2/24 19:13:22

今天要做什么?

为了更好的理解书中内容,需要学习下进制分析和汇编

汇编语言其实应该叫叫机器指令符号化语言,目前的汇编语言是学习操作系统的基础。

一:触发器

电路触发器的锁存命令默认是断开的,是控制电路触发器是否锁存。

触发器有输入端和输出端,输入端就类似电路的开关,输出端就类似用小灯泡来控制显示。

二:

  1. 寄存器(锁存器)

寄存器是一个多输入,多输出的器件

当按下锁存的命令,所有的寄存器都在同一时刻命令。

问题:若某个寄存器是由八个触发器组成,它最大可以保存的数是多少?

1111 1111 =255

三:

带寄存器的加法机

5+7+25

这个预置开关是将左侧的输入锁存到寄存器R,一个个进入

先拨动开关 ,预置进去5,在拨动开关,然后拨动相加,在加法电路中进行相加操作,,然后寄存器R中的数字是12,再按照相同 步骤进入25

四:四则运算电路

根据预置加减乘除操作,寄存器中存放的内容,根据左侧电路生成的二进制数字和右侧寄存器中的存放内容,做出相应的变化(加减乘除)

(12+3)/(12+3) 如果做稍微复杂点的运算,但是寄存器只能保存一个值,就需要另外的去记

指令的概念,引入指令

增加一个寄存器,目前有两个寄存器,寄存器R和寄存器Z,左侧的电路输入,可以选择进入哪个寄存器, 两个寄存器中的值 也可以相互传送,如果这些命令都由开关控制,那开关就太多了,需要换一种思路。

指令:

根据接受的指令去执行相应的操作,可以囊括上面所有的开关。

六:

指令太多,最好有个容器保存起来,方便用,可以用内存

内存简单介绍

1:每个内存单元都有其编号,每个内存单元由八个二进制位组成

2:每个内存单元都有相应的编号,地址线输入相应的编号即可读取到相应的内存,地址线的数量决定了可以读到的最多的内存单元。

如果有八个二进制地址线,从0000 0000 到1111 1111,最多256个内存单元,2的n次方个内存单元。

3:内存单元的编号,就是他的内存地址

4习惯上,字节是用来描述二进制序列的长度单位。8个比特组成一个字节。字节的英语单纯是Byte,简称位B。1001 1101的长度是一个字节。

5:在主流的计算机上,内存单元的长度是8个比特,换句话说,每个内存单元的长度都是一个自己

6:内存的容量可以用内存单元的数量来统计。因为每个内存单元的长度是1个字节,所以经常用字节数来衡量。

根据内存的大小,内存的容量是以字节(B)、千字节(KB)、兆字节(MB)、吉字节(GB)和太字节(TB)来标称

1kb = 1024b

1MB =1024KB

1GB = 1024MB

1TB = 1024GB

7:练习,某内存有16条地址线,则他的容量有多大?每个内存单元的长度是多少?一个字节(8个比特)

0000 - FFFF  65536个字节 64KB

七:

内存数据线(入或者出)

内存要入或者出数据,需要通过数据线,是双向的

内存的操作入和出需要一个控制器,也就是读/写控制

如何写入:

1:先在地址线给一个地址

2:在数据线上给出一个要写入的数据

3:读写控制线发出写命令,就可以把数据写入给定的地址

如何读出:

1:现在先在地址线上给出一个地址,指出要读哪个单元

2:由读写控制线发出读命令,数据就会从指定的数据线上读出,并发送到数据线上

八:自动计算学习

运算器是在刚才四则运算的基础上增加了一i个指令指针寄存器

1:第一条指令是将207传送到寄存器R

2:将寄存器R中的内容和9相加,结果在寄存器R

3:将56传送到寄存器Z

4:将寄存器Z中的内容和48相减,结果在寄存器Z

5:将寄存器Z中的内容和48相减,结果在寄存器Z

6:将寄存器R和寄存器Z的内容相出,结果在寄存器R

7:将寄存器R的内容传送到地址位12的内存单元

8:可以进行停机

九:

处理器组成

总线接口部件、控制部件、指令执行部件

8086 是跨时代的16位处理器,因特尔一直保持兼容

每种处理器。例如64位处理器对应64位的寄存器和64位的算数逻辑部件。

指令集:任何一款处理器,所有包含的指令的集合称为指令集

算术运算指令和逻辑运算指令:逻辑运算

数据传送指令:内部寄存器之间,处理器和内存之间,处理器和外围设备之间

处理器状态控制指令:处理器的工作模式和工作状态

十:

Mov 指令 传送 赋值

add 加法指令 将,r和9中的数据相加在保存到r中

sub 减法指令,把寄存器z中的内容和48相减,在赋值给z。

div 除法指令,将寄存器r中的内容和z相除得到的商,再传给r

mov [12] ,r ,中括号中的地址是内存中的地址,把寄存器r中的内容,传送到寄存器[12]里面去。

Hlt 停机指令

十一:认识intel 8086处理器(低端字节序)内部的通用寄存器

AX/BX/CX/DX/SI/DI/BP/SP  16位寄存器 16个比特组成,从右往左寄存器编号是0-15

十进制 23235

16进制5AC3

换算方式

INTEL 8086通用寄存器划分

AX、BX、CX、DX 可以拆分成两个八进制的寄存器,分别是:

AX:AH AL

BX:BH BL

CX:CH CL

DX:DH DL

寄存器使用编号:

AX是16位的寄存器,一个字节八个比特,两个单词 一个字就是AX。

寄存器AH是寄存器AX的高字节部分,寄存器AL是寄存器AX的低字节部分

改变了寄存器AH的值,就改变了寄存器AX的值

DX(083C)(DH(08)、DL(3C))

十二:

8086的内存访问和字节序

十六进制的寄存器写入八位的内存,需要拆分成两个字节,假设写入0002编号的内存,那么0002编号的内存保存的就是16位寄存器的低字节部分,0003保存的是16位寄存器的高字节部分。(像这种寄存器低字节部分写入内存编号低地址单元,寄存器高字节部分写入内存编号高字节单元的称为低端字节序)。

看的李忠老师网易云的汇编课程,笔记就先整理到这里,后续统一提交git仓库


http://www.niftyadmin.cn/n/5864739.html

相关文章

Hot100 动态规划

动态规划 动规五部曲: 确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 70. 爬楼梯 - 力扣(LeetCode) 爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法。 那么第一层楼梯再跨两步就到第三…

HttpWatch 9.4.17 Pro网页调试与性能优化 资源工具分享

HttpWatch 9.4.17 Pro 是一款专业的网页调试与网络分析工具,专为开发者和网络管理员设计,帮助您轻松监控、分析和优化网页性能。无论是前端开发、后端调试,还是网络性能优化,HttpWatch 都能为您提供强大的支持。 使用方式&#x…

figure机器人技术架构的演进初探——Helix人形机器人控制的革新

一、前言 近期具身智能机器人公司figure提出了人形机器人端到端的控制方案Helix,大小模型结合架构实现了慢速决策规划快速反馈控制的结合,类似于人类的大闹小脑的结构。无疑是人形机器人领域的一项重大突破。作为一个通用的视觉-语言-动作(V…

大白话React第三章高级应用阶段

大白话React第三章高级应用阶段 1. 学习 React 路由 在单页应用里,页面不会像传统网页那样每次切换都刷新整个页面,React 路由就像是一个智能的导航员,能让你在一个页面里轻松切换不同的“场景”,就像在一个大房子里从客厅走到卧…

UE5实现角色二段跳

1.二段跳 首先如果不想使用UE中增强输入功能,可以在SetupPlayerInputComponent函数中绑定对应的操作,具体可以自行查找。如果使用增强输入,可以通过创建一个UE自带的第三人称模板C项目学习,假设当前项目是创建自UE第三人称模板项目…

【部署优化篇十三】深度解析《DeepSeek API网关:Kong+Nginx配置指南》——从原理到实战的超详细手册

一、为什么需要API网关?从单体服务到微服务的必然选择 1.1 单体服务的痛点 想象一下早期的淘宝——所有功能(用户中心、商品管理、订单系统)都打包在一个巨型服务里。这样的架构存在三大致命问题: 单点故障:一旦服务崩溃,整个系统瘫痪扩展困难:每次发布都需要全量部署…

git,bash - 从一个远端git库只下载一个文件的方法

文章目录 git,bash - 从一个远端git库只下载一个文件的方法概述笔记写一个bash脚本来自动下载get_github_raw_file_from_url.shreanme_file.shfind_key_value.sh执行命令 END git,bash - 从一个远端git库只下载一个文件的方法 概述 github上有很多大佬上传了电子书库&#xf…

每天一个Flutter开发小项目 (2) : 构建实用的待办事项列表应用

引言 欢迎回到 每天一个Flutter开发小项目 系列博客!在上一篇博客中,我们一起构建了简单的计数器应用,初步体验了 Flutter 的魅力。今天,我们将更进一步,构建一个日常生活中非常实用的应用——待办事项列表。 随着生活节奏的加快,待办事项列表应用成为了我们管理时间和…