启承山是什么软件骗局?是不是诈骗


王者荣耀兔年限定会是哪五个 兔年限定介绍
发表时间:2023-01-17 17:59:36 作者: 来源:网络转载
王者荣耀兔年限定会是哪五个?兔年限定皮肤很多玩家想知道,今年的兔年限定皮肤为五名英雄的,在这里为大家介绍,可以来看看这五名英雄的兔年限定皮肤。
王者荣耀兔年限定介绍:
【上架时间】
承山海之瑞,启新年万象——王者兔年限定【山海有灵】系列,将于2023年1月21日-3月31日正式上架商城限时出售。
【皮肤价格】
马可波罗、瑶(史诗)
1月21日-1月27日,首周价格为710点券,首周结束后价格为888点券。另外,购买好运60卡的玩家,都可以领取价值178点券优惠券。
李信、曜、小乔(传说)
最新手机游戏排行榜热门游戏下载就在5gwan手游网 违法和不良信息举报邮箱: 违法和不良信息举报邮箱:xiaweibo#qq.com 中国互联网举报中心

王者荣耀小乔兔年限定皮肤多少钱?王者荣耀的承山海之瑞,启新年万象——以先秦古籍《山海经》为灵感来源王者兔年限定【山海有灵】系列小乔-山海·琳琅生首发,那么下面炫酷手游网小编为大家详细介绍王者荣耀小乔山海琳琅生皮肤故事介绍。
王者荣耀小乔兔年限定皮肤多少钱?
承山海之瑞,启新年万象——以先秦古籍《山海经》为灵感来源,以书中温暖而奇幻的生灵为想象起点,王者兔年限定【山海有灵】系列,小乔-山海·琳琅生首发!
“白民之国在龙鱼北,白身披发。有乘黄,其状如狐,其背上有角,乘之寿二千岁。”
两千年前先民的美好祈愿延续至今,灵兽【乘黄】将带你突破时间限制,添福寿,岁岁安,助你兔年【岁岁无忧,花开新颜】!
传说白民之国种植玉石,我们以玉石琥珀之黄,呈现金砂、矿石的绚烂,诠释琳琅烁烁之色;
白民国人白身披发,并融入“双环望仙髻”,塑造古典气质;古典卷轴为器,与乘黄守护相依踏上山海旅程...
自此玉石生花,大地重获生机。
山海有灵系列皮肤都使用了新的风格化渲染技术,结合动态光照GI烘焙技术,光照变化与光影表现更丰富,角色受光效果呈现更细腻的辉光,琳琅晶石质感也显得变幻莫测~
【小乔兔年限定新皮肤】传说品质皮肤将于2023年1月21日(除夕)0点与大家见面。拥有好运60卡的玩家可享皮肤超值优惠哟,详情戳评论区~
主题设计思路-山海有灵
以《山海经》中乘黄为灵感,打造古籍记载中万灵共生,人灵为友的山海幻想世界。同时演绎”事在人为,行者终至”的主题感受。小乔亲密无间的傲娇伙伴乘黄,还有一个可爱的昵称——”玲珑“。
角色设计思路
色彩:以藤黄为基底,点缀明快的青金石色与亮黄,飘带以黑色渲染橘色渐变,张弛有度;
纹样造型:将琳琅晶石以几何化为三角纹样,胸口图形则“模拟”了《山海经》灵兽乘黄形态,庄重不失俏皮;
发型设计:参考“双环望仙髻”样式,以连绵山峦为发簪,增加整体质感;
武器设计:结合书卷的概念,演绎《白民国书》,呈现古典却又富有创意的卷轴造型与扇状造型结合,多添一分雅趣。
展示动画设计
白民王女与灵兽乘黄以《白民国书》立约,跨越龙鱼山重启灵脉,灵脉重启玉石生花,玉花再度绽放,大地重获生机
场景设计思路
整体设计以书中对龙鱼山的描述为灵感,展示了当灵脉重启玉石生花,玉石如花般破土而出的场景
局内特效设计
技能表现上,以琳琅玉石之力为主体进行设计,灵兽乘黄以实体的形式出现在技能的表现中,乘黄翩跹环旋,金纹流;三技能开启掷地凝晶,乘黄虚影浮现,东方古韵流转其中呈现出金砂、晶体结合的视效。
音乐音效设计
以钢琴高音区作为前奏,清脆明亮的音色表现玉石晶体的温润与光泽;背景里的女声哼唱营造出虚幻缥缈的氛围
语音台词设计思路
玲珑伴我,吾道不孤。
一个人一双脚,可以走的路总是有限的。但如果他有伙伴,便可以将脚下之路无限延长。甚至在最后,成为跨越龙鱼,跨越山海的力量。而脚下的路,也不再孤独
皮肤故事
王女站在王城顶部,看着逐渐凋敝的玉花和不断收缩的白民之国。
所有白民都知道,玉花凋敝,必是灵脉出了问题。所有白民都知道,龙鱼山陵高耸入天,凶险异常,无人能及。当众人退缩时,少女手持玉花踏出了迈向山海的第一步。
当传说中的灵兽伙伴”玲珑”载着少女腾空而起,纵使害怕恐惧,少女亦紧紧抓住这最后的希望。
正是她的勇气与决心,为自己赢得了灵兽的好感。
于是,龙鱼山陵似乎也不再是难以跨越的障碍,重启灵脉由无望变为可能。
“但与玲珑相携手,不信山海越不得!”
以上就是王者荣耀小乔兔年限定皮肤多少钱?小乔山海琳琅生皮肤故事介绍的详细内容啦,更多消息和内容关注炫酷手游网,之后会持续给大家带来更多全新的内容。

一、什么是最小操作系统
什么是最小的计算机操作系统?先不提“操作系统”这个高大上的概念,我的理解它就是能让一台裸机“跑”起来的程序集合。现在给你一台最新的64bit个人计算机,没有安装任何的系统或软件,你能用什么方法让它跑起来?这个就必须从计算机的启动过程开始谈起:
1. BIOS: 按下计算机的开关之后,硬件设备会将寄存器CS设置为0xF000,寄存器IP设置为0xFFF0,这样计算机就从地址0xFFFF0
(CS*10H+IP)开始执行程序,这就是BIOS程序。BIOS程序会进行硬件自检即POST过程,如果没有问题屏幕会显示内存,硬盘,CPU等配置信息。这个过程完成之后,BIOS就会去读取下一个设备的程序来启动计算机,那么下一个设备是什么?你应该记得以前每次重新安装操作系统的时候,都会有一个“Boot Device
Priority”的选项,这个选项有软盘、光盘、U盘等存储介质,这个选项就决定了你想让计算机从哪个设备上启动。
2. 主引导记录(MBR):无论你上面选择的是哪一种介质,计算机接下来要做的事情都是一样的:计算机要读取这个设备的第一个扇区共512个字节的数据。如果这个扇区的最后两个字节内容是0x55和0xAA,OK,那就表明这就是用户想用它来启动计算机的设备。否则BIOS会把控制权交给启动顺序中第二个设备,而这512个字节也叫作主引导记录(Master
Boot Record)。找到启动设备之后,接下来就有一个很重要的规矩:那就是计算机要把这512个字节读取到内存的0x7C00这个地址,并从这个地址开始逐条运行程序。
计算机从磁盘扇区上读取数据
对,你没有看错,现在你的计算机就已经启动起来了。既然裸机已经跑起来了,那么这个512字节的主引导记录(MBR)就可以叫做---最小操作系统。
3.为什么是0x7C00?
显然0x7C00是计算机的第一个重要魔数,BIOS为什么会将MBR装载到这个内存地址?这就必须从计算机制造者IBM说起。
下面我们一起来读一篇英语文章《Why BIOS loads MBR into 0x7C00 in x86 ?》:
我来给大家翻译一下这篇文章的意思,它清楚的说明了 0x7C00的科学依据。
首先说0x7c00的前身其实是0x200,当时操作系统是在1980年出现的SCP的"86-DOS"。为什么是0x200?因为这个系统是从0x400开始放置的,而内存空间0x200-0x3FF处于中断向量的区0x00-0x3FF的末端保留空间并没有用到,所以就刚好利用了这个512B的“缝隙”地址。
重点来了:再说到0x7c00的出现是在1981年的IBM PC机5150上,一个叫“大卫XX”的开发团队成员定下的,而且还特别强调了这个事情和INTEL公司以及微软公司没有任何关系:
那怎么定下是0x7c00这个值的呢?那是为了尽量让最多的连续内存空间分配给操作系统,选择把MBR放在内存的最高端方向、另外还需要预留512B的堆栈/数据空间,因此从内存的最高处倒数过来,就计算出了MBR的存放位置:
0X7FFF(5150机器总内存空间32KB)-512B(堆栈/数据空间)-512B(MBR空间)=0X7C00。
看一下最终的内存分布图就更清楚明白:
0X7C00的来源
同时还指出:一旦计算机启动起来之后,MBR区、堆栈/数据区就不再需要了,因此我们完全还可以再次回收利用:0X7C00---0X7FFF之间处于32KB最后的1024B空间,这样无疑为操作系统又扩充了可用空间。这就更加说明MBR需要放置在内存高端方向的原因:因为如果放在内存的低端方向,这部分回收的空间就很难再利用起来,原因在于程序一般都是往内存地址的增长方向向上发展的。难以想象在计算机硬件匮乏的年代,那些设计者大师真是绞尽了脑汁。
二、怎么制作最小操作系统
如上所述,主引导记录(MBR)是有标准格式的,只有遵循要求才能成功启动计算机,它的结构图如下:
MBR结构标准
要按如上标准制作出一个MBR启动程序,可以采取以下方式:
1. 用二进制1010串机器代码制作
计算机在不借助于任何编译工具或软件的情况下,唯一能接受的指令就是二进制串---机器代码。要写出二进制代码的机器语言,不是一般的计算机人士能完成的。普通人,我们只有通过二进制编辑器这样的工具“生班硬套”生成一些预先从各种教科书上查到的二进制数据,你只需要记住这些1010代码串能成功启动计算机就行了。
(1) 用二进制编辑工具WinHex64生成机器代码
(a)首先新建一个二进制文件,大小设置为:1474560B=1440*1024B,这就是俗称的1.44MB软盘容量(严格意义上讲不是1.44MB,而是1474560/(1024*1024)=1.40MB)。
在二进制文件头部输入以下代码:
(b)二进制文件头中间部分输入以下代码,位置在512字节处:
很明显,这是保障第一扇区的最后两个字节值为:0x55和0xAA。
( c ) 其余部分全部用0来填充,有100多万个字节哟,如果是人工来做是要死人的。幸好,WinHex64这个工具在新建的时候,会默认将所有部分自动填充成0,因此这部分工作我们就可以省掉了。这就是计算机应用程序厉害的地方,可以为我们提供太大的帮助。但应用程序也是靠操作系统支撑的,所以,我们能体会到操作系统的伟大!
最后,将文件保存为镜像文件:smallest.img。
对于基础较弱的读者,这里需要稍微科普一个小知识。记得前面不是说了,我们这次是要用1010的机器串代码来启动计算吗?但是在我们编写以上机器代码的过程中,并没有直接写入1010啊,而是写入的是字母和数字(如6F)的组合。这是因为计算机在识别语言文字等信息时,是以ASCII方式进行编码并以BCD方式进行存储的。我们的本意是要输入二进制代码,但是这个编辑器怕我们对二进制代码太过陌生,因此它让我们输入ASCII码即可,然后计算机再以BCD编码的形式进行存储。比如对"hello
world"中的字母h,它的ASCII是0x68,随后计算机要将这个编码再以BCD的方式进行存储,也即掰成2半,高字节存储6,低字节存储8。这样,"h"最终在计算机中就存储为:0110 1000。
如果不嫌麻烦,你也可以将上面的代码全部翻译成101010......的方式,找一个真正支持按位输入二进制的编辑工具,全部直接输101010......这样看上去就是绝对的机器代码输入。
(2) 用二进制镜像文件启动计算机
我们将二进制镜像放入虚拟机Vmware的软盘,计算机将从软盘启动。
接下来就是见证奇迹的时刻,计算机顺利启动起来了!
你用机器代码都能启动计算机,是不是瞬间觉得很流弊?但我敢保证,其实你是一脸懵逼的,因为你根本不知道是怎么回事。为什么输入一堆这些乱七八糟的代码之后,计算机就能运行并显示"hello world"。
接下来,你将逐步明白。
2. 用汇编语言制作
上面都看到了,用机器代码来制作操作系统,在你都还没明白怎么回事的情况下,机器就已经启动起来了。如果都用机器代码来控制计算机的话,计算机就不可能成为流行的科技产品。那么聪明的人,就想办法,用更加直接的语言来代替机器语言,这就是汇编语言。
(1) 汇编语言初级制作方法
通过上一节,我们分析过了,当输入机器代码的时候,实际上我们是在输入ASCII码。但是输入ASCII码也不是简单的一件事,例如上面的程序中,我们就有一段需要输入N的N次方个"00"的痛苦回忆。聪明的人发明了汇编语言之后,需要输入多少个“00”就变成了一句话的事儿。比如 times 10000 db
0就代表输入的是1万个“00”,这就使我们的工作变得相当的容易。但是我们额外需要做的事情就是配置一个专门的软件来把times 10000 db 0这句话翻译成1万个“00”,这个软件就叫汇编器。
基于这样的思路,我们把上面的二进制机器代码用汇编语言来表达就变成了如下格式:
db 0xB8,0x00,0xB8,0x8E,0xD8,0xC6,0x06,0x00,0x00,0x68,0xC6,0x06,0x02,0x00,0x65,0xC6
db 0x06,0x04,0x00,0x6C,0xC6,0x06,0x06,0x00,0x6C,0xC6,0x06,0x08,0x00,0x6F,0xC6,0x06
db 0x0A,0x00,0x2C,0xC6,0x06,0x0C,0x00,0x77,0xC6,0x06,0x0E,0x00,0x6F,0xC6,0x06,0x10
db 0x00,0x72,0xC6,0x06,0x12,0x00,0x6C,0xC6,0x06,0x14,0x00,0x64,0xEB,0xFE
times 510-($-$$) db 0
db 0x55,0xaa
times 1474560-($-$$) db 0
我用的汇编语言是NASM,将上述汇编程序命名为:bootasm1.asm,将它编译成二进制文件:bootasm1.bin。
NASM bootasm1.asm
-o
bootasm1.bin
同样,我们用二进制文件:bootasm1.bin来装入软盘并启动计算机。结果,顺利启动计算机并打印出了“hello world”。
这一次,借助汇编语言,我们用10行内程序就简单的代替了之前的百多万行编辑过程,大大节约了工作量,可以说是迈进了一大步。
但是,这个过程也存在明显的不足,那就是上面一大堆的DB语句。其实,你也根本不明白它究竟代表什么意思。虽然,计算机成功的启动了,但是你仍然是稀里糊涂的。但无论如何,稍微有点经验的人会知道,上面的程序虽然都是汇编语言编写的,但其实并没有起到汇编语言真正的作用,因为它只是利用了汇编语言的“伪指令”简单粗暴的往文件里面堆砌了一堆二进制而已,并没有真正使用到汇编语言的核心程序代码。
(2) 汇编语言进阶制作方法
在上面的汇编程序中,你已经开始看到“hello, world”的影子了,但是你并不明白是什么语句控制了计算机启动后屏幕上显示“hello, world”。那么我们接下来通过真正的汇编语言程序代码实现:
mov ax, 0b800h
mov ds, ax
mov byte [0x00],'h'
mov byte [0x02],'e'
mov byte [0x04],'l'
mov byte [0x06],'l'
mov byte [0x08],'o'
mov byte [0x0a],','
mov byte [0x0c],'w'
mov byte [0x0e],'o'
mov byte [0x10],'r'
mov byte [0x12],'l'
mov byte [0x14],'d'
jmp $
times 510-($-$$) db 0
db 0x55,0xaa
times 1474560-($-$$) db 0
将上述汇编程序命名为:bootasm2.asm。最后,将它编译成二进制文件:bootasm2.bin。可以看出,编译之后生成的二进制文件刚好是1.44MB:
同样,我们用二进制文件:bootasm2.bin来装入软盘并启动计算机,顺利达到预期效果:
很明显,这段汇编程序就把我们的目标表达得相当的清楚:是把“hello, world”这个信息用MOV 指令全部往某个地方送,那是往哪里送呢?显然,是往显示器送(打印)。
(3) 汇编语言高级制作方法
上面小结的汇编程序虽然我们能轻易读懂,但是给编程者带来一定的操作难度。可以看出,我们为了显示某个字母,我们还得把数据挨个送到内存地址从0b800h开始的地方。为了显示一个字符,编程人员得直接操作内存,这样的效率比较低并且不够简易。这样,计算机制造者为了方便我们,对一些非常常用的设备操作又做了一次封装,这就是BIOS调用。简单的说,我们要想操作显示器,就可以通过汇编语言来直接调用BIOS中断。所以,我们就有了以下更加高阶的写法:
mbrseg
equ
7c0h
;启动扇区存放段地址
jmp
start
message:
db 'hello,world','$'
start:
mov
ax,mbrseg
mov
ds,ax
mov
si,message
call
printstr
jmp
$
printstr:
;显示指定的字符串, 以'$'为结束标记
mov al,[si]
cmp al,'$'
je disover
mov ah,0eh
int 10h
inc si
jmp printstr
disover:
ret
times 510-($-$$) db 0
db 0x55,0xaa
times 1474560-($-$$) db 0
这个程序,就比上面的都容易读懂了:
(a)它具备了高级语言的函数调用功能:比如上面的字符串显示就调用了一个自己编写的函数:printstr,而在这个函数里我们又调用了系统自带的BIOS中断来显示字符。
(b)把要显示的字符全部集中放在一起,在汇编里面一般叫数据区。
可以看出,思想其实就是尽量模块化。
将上述汇编程序命名为:bootasm3.asm。最后,将它编译成二进制文件:bootasm3.bin。同样,我们用二进制文件:bootasm3.bin来装入软盘并启动计算机,也能成功。
三、 虚拟机的选择
最常用的虚拟机有3种:Vmware,VirtualBox和 Bochs,我们应该如何选择呢?
一般来讲,Vmware和VirtualBox是属于同一类型的虚拟机,特点是界面都非常的人性化,创建硬件虚拟电脑和硬件设备都采用菜单的方式,直观明了。而Bochs则属于工具型的虚拟机,创建硬件设备是采用命令行的方式。简单来讲,用惯Linux的人喜欢Bochs,而用惯Windows的人会更喜欢Vmware和VirtualBox。
但是,经过我下面的一番测试,则发现了更多的问题。将上一章用来启动计算机512B大小的bootasm3.bin,分别如如下方式来启动计算机,结果如下:
1、将最后2字节启动标记:55,AA修改为:00,00,用软盘方式启动测试:
Vmware能启动;VirtualBox能启动;Bochs不能启动。
2. 将最后2字节启动标记:55,AA删除,用软盘方式启动测试:
Vmware能启动;VirtualBox软盘加载镜像失败(相当于不能启动);Bochs不能启动。
看到没?即使你写的MBR程序有问题,用Vmware和VirtualBox虚拟机来验证根本就发现不了!这个测试结果,把我吓了一跳,因为我在上面一章的所有程序测试中,都是用Vmware来验证的。既然Vmware和VirtualBox虚拟机对非标准化的MRB程序都能成功启动,那说明这两种虚拟机不是绝对的“真机”,至少没有那么严谨。
其实,Bochs也有“55,AA”校验的配置,你可以设置计算机启动的时候是否必须要检测,配置字段为:floppy_bootsig_check。但是,Vmware和VirtualBox我目前还没发现这种配置。
所以,我只有毫不犹豫的选择Bochs来验证自制的MBR。选择了Bochs之后,才发现Bochs更大的功能其实并仅不在于虚拟计算机,而在于调试功能(类似Dos系统的Debug,可以随时设置断点、查看内存、查看寄存器)。这个对于汇编语言编程、操作系统开发来说简直是不可替代的。
虽然在Vmware和VirtualBox能成功运行的操作系统并不代表一定能在真机上成功,但是如果你的操作系统是正确的,那么在Vmware和VirtualBox上是一定能成功运行的。所以,最终我的选择是:用Bochs来调试操作系统;用Vmware和VirtualBox来演示最后的定版。
四、 真机启动
总是在虚拟机上实现我们自制的操作系统让人觉得不踏实,从上面一张可以看出,不合适的虚拟机有可能会“欺骗”我们。如果你自己写操作系统但不在真机上启动那就是耍流氓,因为你的目标其实启动真正的裸机。
所有自制操作系统的书都是讲的用软盘来启动验证,包括我上面的章节也是这个方法。但是,软盘这种古老的设备就只能在虚拟机上玩玩,要在真机上运行,就必须要用U盘了。下面我就来讲如何在U盘上装入我们前面自制的最小操作系统并用来启动一台真正的裸机。
思路是将上面在虚拟机上能成功启动的bootasm3.bin写入U盘,这里需要一个工具:WinHex64。先打开bootasm3.bin,并将其内容复制出来:
然后插入U盘(先格式化),WinHex64选择“工具-打开磁盘”,选中下图红色的U盘(物理驱动器),然后打开。千万不要选到绿色那里了,我就是这里不小心,选中了逻辑驱动器,结果折腾了3天才成功!
打开U盘之后,把刚才bootasm3.bin复制的内容粘贴进U盘的第一个扇区:
最后保存U盘数据,退出WinHex64。重新启动电脑,选择从USB HDD启动,接下来才是真正见证奇迹的时刻:
20行代码就可以启动一台计算机https://www.zhihu.com/video/1196165179396943872
不过,你这样做了之后,可能真机并没有启动起来!不要奇怪,我实验了一下,绝大部分计算机是可以,有少数确实不行。我暂时还不知道原因,可能是不同计算机的BIOS设置不同吧。所以,多试几台机器,应该总有能成功启动的。
五、 总结
我们通过一步步的引导,就已经完成计算机最小操作系统的制作。可以看出,每一步都在进步,它其实就是一个离计算机底层越来越远,而离用户越来越近的过程,这就是汇编语言的发明初衷。按这样的方向走下去,用户就一定能很好的控制计算机来实现自己的应用目标。

我要回帖

更多关于 软件骗局 的文章

 

随机推荐