linux内核的艺术_汇编_rep movw什么意思呢

linux内核的艺术_汇编_rep movw什么意思呢,第1张

下面的资料应该可以解答你的疑问,请参考http://blog.donews.com/huqingyu/archive/2005/02/19/281058.aspx

MOVW:将DS:SI的内容送至ES:DI,是复制过去,原来的代码还在。很多书用了“移”这个字,实际上是复制过去。

Linux内核中引导部分一开始有这样一段代码:

45 entry start ! 告知连接程序,程序从start 标号开始执行

46 start:

47 mov ax,#BOOTSEG ! 将ds 段寄存器置为0×7C0;

48 mov ds,ax

49 mov ax,#INITSEG    ! 将es 段寄存器置为0×9000;

50 mov es,ax

51 mov cx,#256             ! 移动计数值=256 字;

52 sub si,si                    ! 源地址 ds:si = 0×07C0:0×0000

53 sub di,di                    ! 目的地址 es:di = 0×9000:0×0000

54 rep                              ! 重复执行,直到cx = 0

55 movw                          ! 移动1 个字;

56 jmpi go,INITSEG      ! 间接跳转。这里INITSEG 指出跳转到的段地址。

57 go: mov ax,cs            ! 将ds、es 和ss 都置成移动后代码所在的段处(0×9000)。

! 47–56 行作用是将自身(bootsect)从目前段位置0×07c0(31k)

! 移动到0×9000(576k)处,共256 字(512 字节),然后跳转到

! 移动后代码的go 标号处,也即本程序的下一语句处。

注意,在55行执行完毕之后,0×7c00之后的512字节应当与0×9000之后的512字节一模一样。

然后看56行,这里的go是段内偏移,也就是0×39(十进制的57),而INITSEG=0×9000,所以执行这条语句是跳到0×9000:0×39也就是复制过去的第57行,这样代码就相当于在一个程序里继续执行了。

Linux 是一个开放自由的 *** 作系统内核,具有一些鲜明特点如下:

(1) Linux 是一个一体化内核;

注:“一体化内核”是也称“宏内核”,是相对于“微内核”而言的。几乎所有

的嵌入式和实时系统都采用微内核,如 VxWorks、uC/OS-II、PSOS 等。

(2) 可移植性强。尽管 Linus 最初只为在 X86 PC 上实现一个“类 UNIX”,后来随

着加入者的努力,Linux 目前已经成为支持硬件平台最广泛的 *** 作系统;

注:目前已经在 X86、IA64、ARM、MIPS、AVR32、M68K、S390、Blackfin、M32R

等众多架构处理器上运行。

(3) 是一个可裁剪 *** 作系统内核。Linux 极具伸缩性,内核可以任意裁剪,可以大至

几十或者上百兆,可以小至几百 K,运行的设备从超级计算机、大型服务器到

小型嵌入式系统、掌上移动设备或者嵌入式模块,都可以运行;

(4) 模块化。Linux 内核采用模块化设计,很多功能模块都可以编译为模块,可以在

内核运行中动态加载/卸载而无需重启系统;

(5) 网络支持完善。Linux 内核集成了完整的 POSIX 网络协议栈,网络功能完善;

(6) 稳定性强。运行 Linux 的内核的服务器可以做到几年不用复位重启;

(7) 安全性好。Linux 源码开放,由众多黑客参与 Linux 的开发,一旦发现漏洞都能及时修复;

(8) 支持的设备广泛。Linux 源码中,设备驱动源码占了很大比例,几乎能支持任何

常见设备,无论是很老旧的设备还是最新推出的硬件设备,几乎都能找到 Linux下的驱动。致远电子那边有很多的,你可以去看一下


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7165445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存