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行,这样代码就相当于在一个程序里继续执行了。

MOVW 和 rep相关推荐

  1. Linux 0.00简单多任务内核boot.s超详注释

    ;标题:简单内核引导启动程序 ;作者:黄旭冬 ;程序描述: ; 该程序首先跳到0x07c00处,这是BIOS开始时将本程序加载到的位置, ; 然后本程序将内核代码(head.s代码)加载到0x1000 ...

  2. 你管这叫操作系统源码(一)

    文章目录 最开始的两行代码 自己给自己挪个地 做好最基础的准备工作 硬盘里其他部分也放到内存 资料 最开始的两行代码 话不多说,直奔主题.当你按下开机键的那一刻,在主板上提前写死的固件程序 BIOS ...

  3. R语言rep函数重复向量或者列表元素实战

    R语言rep函数重复向量或者列表元素实战 目录 R语言rep函数重复向量或者列表元素实战 #基本语法 #仿真数据

  4. R语言:rep函数解析

    函数形式:rep(x, time = , length = , each = ,) 参数说明: x:代表的是你要进行复制的对象,可以是一个向量或者是一个因子. times:代表的是复制的次数,只能为正 ...

  5. repne scasb + rep movsd + rep movsb 内联实现 strcat

    我在前面写了两篇博客分别介绍内联实现 strlen 和 strcpy,这次介绍的 strcat 其实是 strlen + strcpy ,没什么新东西. .text:0040265A lea edi, ...

  6. rep movsd + rep movsb 内联实现 strcpy

    下面的代码片段是一个内联的 strcpy ,not ecx 为止是计算源字符串的长度(含NULL),00402646 到 00402651 是以4字节为单位复制,最后3行是把剩下的0-3字节复制过去. ...

  7. 【Win32汇编】MOVS,STOS,REP 指令

    MOVS MOVS 指令用于将一个内存操作数的值"复制"到另一个内存操作数,使用 MOVS 前要把目标内存的地址移入 EDI,源目标内存移入 ESI.(记忆方法:D表示destin ...

  8. C代码+汇编 C的 函数汇编学习分析 rep stos dword ptr [edi]

    如分析有误,请在评论区中,指出 谢谢合作 主要是分析C的函数调用在汇编中的执行流程 本章主要是说一下函数调用时堆栈的变化,重点理解部分 C代码 #include"stdafx.h" ...

  9. R中rep函数的使用

    官方帮助文档如下写的: Usage rep(x, ...)rep.int(x, times)rep_len(x, length.out) Arguments x a vector (of any mo ...

最新文章

  1. GCC全过程详解+剖析生成的.o文件(2)
  2. 在iOS中安装OpenCV
  3. My Lead route attach and detach issue
  4. .net 5 正式版_.NET 5正式版快来了
  5. Filecoin网络目前总质押量约为2294万枚FIL
  6. Markdown图片并排展示、图注对齐
  7. vue自定义组件递归实现树状_一道价值25k的腾讯递归组件面试题(Vue3 + TS 实现)...
  8. js产生两个数字之间的随机数
  9. 计算机网络学习(四)网络层
  10. 转:施炜:铁军组织是怎样炼成的?高能组织=人×管理体系×数字标准
  11. asterisk的sip.conf配置
  12. “强省会”从产业开始,长沙市智能汽车产业促进会正式授牌
  13. 主打python-2021年度总结-展望2022年
  14. background 与 background-image
  15. Pro Tools正确卸载姿势大全
  16. 产品经理vs项目经理?四类PM区别都在这里啦
  17. 无光照渲染shader-二次元
  18. AGV自动导航控制系统
  19. 【Linux】Linux安装nginx操作详细步骤
  20. 盗取QQ密码的顽固的IEXPLORE.EXE病毒

热门文章

  1. 数据结构复习—1.1
  2. 神在夏至祭降下了神谕(oracle)
  3. Quartz Properties 文件
  4. session 对象的简单实例
  5. python 之模块之 xml.dom.minidom解析xml
  6. 自己写getElementsByClass()方法
  7. C# 获取USB设备信息
  8. Shell的一些基本用法
  9. VC6.0使用中遇到的一些问题
  10. FamilyFilter(4)