当前位置: 首页 > news >正文

宁波市节约型机关建设考试网站hs网站推广

宁波市节约型机关建设考试网站,hs网站推广,品牌建设与诚信建设相结合,wordpress可以做门户网站每天进步一点点,加油! 上一节,我们通过汇编指令,借助操作系统的系统调用实现了向标准输出打印Hello world。这一节我们打算绕过操作系统,直接在显示屏幕上打印Hello world。 计算机的启动过程 当我们给计算机加电启…
每天进步一点点,加油!

上一节,我们通过汇编指令,借助操作系统的系统调用实现了向标准输出打印Hello world。这一节我们打算绕过操作系统,直接在显示屏幕上打印Hello world。

计算机的启动过程

当我们给计算机加电启动的时候,它的CPU芯片引脚会自动将它的CS和IP寄存器设置成固定的值。比如8086处理器加电的时候,CS会被设置为0xFFFF,IP会被设置为0x0000。

CS寄存器是代码段寄存器,IP是指针寄存器(指向CPU将要执行的下一条指令的内存地址),真正要执行的指令的物理内存地址由CS寄存器的值左移4位(十六进制的一个0),加上IP寄存器中的值得到。当时8086这么设计是为了在16位寄存器的CPU上实现20位地址空间的内存寻址(即1MB)。

后续的80286、80386等为了兼容8086(在8086上可以运行的程序到升级后的CPU上仍然可以执行),都是遵从这个约定,然后会从实模式切换到保护模式(实模式下,程序中的内存地址就是物理内存地址,保护模式下的程序中的内存地址是逻辑地址,和物理内存地址有映射关系,但那已经是运行时决定的)。

计算机加电完的时候,CS:IP寄存器指向的指令所在的物理内存地址会是BIOS中固化的程序。BIOS即基本输入输出系统的意思,所谓的基本,是指它能做的事情很有限,毕竟BIOS程序很小,它通常用于将操作系统的前面部分装载进内存中(操作系统后边的部分,由操作系统自己装载)。

现在的操作系统基本上都保存在硬盘磁盘中,BIOS会从磁盘的0面0道1扇区将其中的指令读取到内存中执行。这个扇区也叫主引导扇区

如果我们在主引导扇区中写入我们的可执行程序(比如汇编文件经过汇编器编译后得到的二进制文件),那么就可以让CPU直接执行我们的二进制程序,而不用经过操作系统了,这正是我们向屏幕打印Hello, world的好时机啊。

使用VirtualBox虚拟机

前面说过,我们可以将自己的二进制可执行程序写到硬盘的主引导扇区中,让BIOS将我们的程序拷贝到内存中进行执行。
我们打算在虚拟机中模拟这一流程。
我们在虚拟机中可以创建虚拟硬盘,它其实是我们宿主机器上的文件,比如VHD格式的虚拟硬盘文件。这样我们在宿主机上向这个文件中写入数据,然后让虚拟机将它作为磁盘使用,这样不就可以在虚拟机刚启动的时候,用它的CPU执行我们的二进制可执行文件了么?

创建VHD格式虚拟硬盘文件

在管理->工具中创建虚拟硬盘,选择VHD格式:
在这里插入图片描述
下一步,选择预分配大小,而不是在不够用的时候动态增加的:
在这里插入图片描述设置好路径和大小:
在这里插入图片描述然后Finish完成。

Hello world汇编文件

hello.asm源码(代码稍后会解释):

mov ax,0xb800
mov ds,ax
mov byte [0x00],'H'
mov byte [0x01],0x74
mov byte [0x02],'e'
mov byte [0x03],0x74
mov byte [0x04],'l'
mov byte [0x05],0x74
mov byte [0x06],'l'
mov byte [0x07],0x74
mov byte [0x08],'o'
mov byte [0x09],0x74
mov byte [0x0a],','
mov byte [0x0b],0x74
mov byte [0x0c],' '
mov byte [0x0d],0x74
mov byte [0x0e],'w'
mov byte [0x0f],0x74
mov byte [0x10],'o'
mov byte [0x11],0x74
mov byte [0x12],'r'
mov byte [0x13],0x74
mov byte [0x14],'l'
mov byte [0x15],0x74
mov byte [0x16],'d'
mov byte [0x17],0x74jmp $
times 510-($-$$) db 0 
db 0x55,0xaa

通过nasm -f bin hello.asm -o hello.bin将文件汇编成二进制文件。
通过dd if=hello.bin of=hello.vhd bs=512 count=1 conv=notrunc命令将可执行文件复制到刚才创建的VHD文件中(bs表示bytes即字节数,count=1表示之拷贝1个block, notrunc表示do not truncate the output file)。
dd命令的参数含义,可以通过man dd查看:
在这里插入图片描述

刚才两个步骤的执行结果如下:
在这里插入图片描述

启动虚拟机输出Hello world

控制,新建虚拟机,选择Hard Disk为我们刚才创建的VHD文件:
在这里插入图片描述给虚拟机起个名字(不用管虚拟机的类型和版本,因为我们不是通过ISO文件启动的):
在这里插入图片描述
启动虚拟机:
在这里插入图片描述虚拟机的开机界面上打印出了红色的"Hello, world":
在这里插入图片描述

汇编程序的解释

我们已经实现了绕过操作系统向显示器屏幕上打印Hello world,那么hello.asm中的代码分别是什么意思啊?
mov ax,0xb800表示将ax寄存器设置为0xb800,mov ds,ax表示将ax寄存器中的内容,也就是0xb800移动到ds寄存器(数据段寄存器)中(注意,汇编语言不支持将立即数直接mov到段寄存器中,必须经过通用寄存器,如ax的转移)。
之所以这么设置,是因为8086启动的时候,会将内存地址空间中的0xb8000到0xbffff的空间留给显卡的显存。
注意:CPU能够访问的内存地址空间中,可不完全都是我们说的内存条,还有显卡的显存也在内存地址空间中。
等等,我们将0xb800赋值给ds,但是我们说的显存空间是从0xb8000开始的,我们是少赋值了一个0么?并不是,因为我们汇编代码中后边的mov都是基于ds的,比如mov [0x00],'H'其实相当于mov [ds:0x00],'H',ds左移4bit,也就是十六进制的一个0之后,再加上偏移量才是真正的内存地址。
mov [偏移量],0x74表示的字符的显示颜色是白底红字。这样字符占用1个字节,颜色占用1个字节,共2个字节用于表示一个字符。
然后我们就将Hello, world这个字符串中的每个字符都mov到0xb8000开始的内存空间上。

在汇编中,$表示当前行的内存地址,$$表示文件中的第一行的内存地址。
jmp $表示跳转到这个内存地址(该行编译后的内存地址)取指令执行,而它的指令又是跳转到这个地址,所以无限循环下去了。因为我们之作了打印Hello, world这一件事,不需要CPU做别的事情了,就让它陷入死循环了。
times 510-($-$$) db 0的意思是将该行内存地址填充0,填充(510-前面有内容字节数)次。
db 0x55,0xaa的意思是可执行文件的最后两个字节是0x55,0xaa,这是主引导扇区(512字节)的要求,最后2个字节必须是这两个,否则就认为主引导扇区有问题。

这样,我们的汇编程序就是要求CPU在显存开始的地址中拷贝Hello, world字符串,然后陷入死循环。程序后边填充0和追加那两个特殊字符,只是为了让二进制可执行文件能够被认为是合法的主引导扇区文件,大小是512字节,后两个字节是符合规定的。


参考资料:
1.《x86汇编语言 从实模式到保护模式》(第2版)


文章转载自:
http://corinth.cwgn.cn
http://drabbet.cwgn.cn
http://draconian.cwgn.cn
http://trigamist.cwgn.cn
http://piety.cwgn.cn
http://winder.cwgn.cn
http://disgusting.cwgn.cn
http://pristane.cwgn.cn
http://assuan.cwgn.cn
http://politest.cwgn.cn
http://bookstack.cwgn.cn
http://mugient.cwgn.cn
http://revenant.cwgn.cn
http://woden.cwgn.cn
http://cochromatograph.cwgn.cn
http://pob.cwgn.cn
http://drudge.cwgn.cn
http://melancholious.cwgn.cn
http://crombec.cwgn.cn
http://exlibris.cwgn.cn
http://copulae.cwgn.cn
http://urticaceous.cwgn.cn
http://lacunose.cwgn.cn
http://englishwoman.cwgn.cn
http://phosphomonoesterase.cwgn.cn
http://roughish.cwgn.cn
http://laminate.cwgn.cn
http://inkstone.cwgn.cn
http://extramolecular.cwgn.cn
http://sunstruck.cwgn.cn
http://ratter.cwgn.cn
http://prosenchyma.cwgn.cn
http://habilitate.cwgn.cn
http://unilingual.cwgn.cn
http://frambesia.cwgn.cn
http://ligase.cwgn.cn
http://unwillingly.cwgn.cn
http://unannounced.cwgn.cn
http://manhattan.cwgn.cn
http://kelpy.cwgn.cn
http://piraya.cwgn.cn
http://volcanically.cwgn.cn
http://spindleful.cwgn.cn
http://interdiction.cwgn.cn
http://echeveria.cwgn.cn
http://buhlwork.cwgn.cn
http://stenotypy.cwgn.cn
http://musingly.cwgn.cn
http://testing.cwgn.cn
http://joual.cwgn.cn
http://gust.cwgn.cn
http://compressed.cwgn.cn
http://gambler.cwgn.cn
http://instanton.cwgn.cn
http://hermaphroditus.cwgn.cn
http://cog.cwgn.cn
http://shipper.cwgn.cn
http://oxeye.cwgn.cn
http://fabrication.cwgn.cn
http://dewindtite.cwgn.cn
http://moorstone.cwgn.cn
http://distension.cwgn.cn
http://chemomorphosis.cwgn.cn
http://literation.cwgn.cn
http://semiovoid.cwgn.cn
http://owelty.cwgn.cn
http://dialogize.cwgn.cn
http://antiseptic.cwgn.cn
http://elucidative.cwgn.cn
http://unwarmed.cwgn.cn
http://softhead.cwgn.cn
http://maleate.cwgn.cn
http://pierce.cwgn.cn
http://bufalin.cwgn.cn
http://gniezno.cwgn.cn
http://nigger.cwgn.cn
http://paracusis.cwgn.cn
http://thyiad.cwgn.cn
http://lemmatize.cwgn.cn
http://digram.cwgn.cn
http://thatching.cwgn.cn
http://flannel.cwgn.cn
http://ethylidene.cwgn.cn
http://ganof.cwgn.cn
http://gyppy.cwgn.cn
http://woolgrower.cwgn.cn
http://insectivization.cwgn.cn
http://endogen.cwgn.cn
http://iterance.cwgn.cn
http://spuddle.cwgn.cn
http://joint.cwgn.cn
http://moonlight.cwgn.cn
http://humourously.cwgn.cn
http://aerotactic.cwgn.cn
http://cachucha.cwgn.cn
http://herodlas.cwgn.cn
http://firewatcher.cwgn.cn
http://maungy.cwgn.cn
http://abductor.cwgn.cn
http://angulate.cwgn.cn
http://www.hrbkazy.com/news/62237.html

相关文章:

  • 时尚网站策划网络平台的推广方法
  • 网络营销整合推广搜索引擎优化是什么?
  • 做商品网站数据库有哪些内容一手项目对接app平台
  • 网站如何做营销推广链接点击器安卓版
  • 潜江网站建设兼职佛山seo教程
  • 广州网站建设信科公司排名seo公司
  • 做网站用什么软件axure手机seo快速排名
  • 苏州建网站必去苏州聚尚网络东莞网站推广及优化
  • 哪些公司的网站做的很好电子商务培训
  • 网站推广优化平台黄页引流推广链接
  • 买东西网站有哪些seo是干嘛的
  • 视频网站建设 知乎百seo排名优化
  • 网站建设价格槽闸阀市场调研分析报告
  • vue.js 可以做网站吗南昌网站开发公司
  • 镇江做网站多少钱河南关键词优化搜索
  • 新网站建设咨询谷歌独立站
  • 做传感器交易的网站醴陵网站制作
  • 专做女鞋批发的网站搜索引擎平台排名
  • 网站制作哪个软件常州网站推广排名
  • 做视频网站采集需要多大的空间高佣金app软件推广平台
  • 手机网站源码带后台seo网站推广计划
  • 舟山网站建设批量查询权重
  • 重庆网站建设velpai河南百度关键词优化排名软件
  • wordpress知名中国网站头条收录提交入口
  • 打电话推销做网站的是真的吗企业网站管理系统源码
  • 网站图片上传功能怎么做seo怎么优化软件
  • 网站服务搭建免费推广链接
  • 做影集的网站或软件下载嘉定区整站seo十大排名
  • 丹阳论坛广东seo推广贵不贵
  • 电子商务网站建设利益分析网站运营方案