早期as86汇编指令rep movw解释

研读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)。

 

查了很多资料,才完全弄清楚,这种汇编语法和AT&T以及现代intel汇编有不少区别的样子:(,看来还是有不少要继续学习的

rep: 重复执行该语句直至寄存器cx为0

movw: 将DS:SI的内容送至ES:DI,note! 是复制过去,原来的代码还在。

转载于:https://www.cnblogs.com/unsigned-error/p/8456542.html

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值