当前位置: 技术问答>linux和unix
我现在正读Linux源代码,请问下面代码是什么意思?
来源: 互联网 发布时间:2015-08-28
本文导语: bootsect.s 文件中: 51 mov cx,#256 ! 移动计数值=256 字; 52 sub si,si ! 源地址 ds:si = 0x07C0:0x0000 53 sub di,di ! 目的地址 es:di = 0x9000:0x0000 54 rep ! 重复执行,直到cx = 0 55 movw ! 移动1 个字; 52 sub si,si !是不是...
bootsect.s 文件中:
51 mov cx,#256 ! 移动计数值=256 字;
52 sub si,si ! 源地址 ds:si = 0x07C0:0x0000
53 sub di,di ! 目的地址 es:di = 0x9000:0x0000
54 rep ! 重复执行,直到cx = 0
55 movw ! 移动1 个字;
52 sub si,si !是不是 si = si -si 如果这样下来不是si = 0 了
53 是不是 di 也为 0;
51 mov cx,#256 ! 移动计数值=256 字;
52 sub si,si ! 源地址 ds:si = 0x07C0:0x0000
53 sub di,di ! 目的地址 es:di = 0x9000:0x0000
54 rep ! 重复执行,直到cx = 0
55 movw ! 移动1 个字;
52 sub si,si !是不是 si = si -si 如果这样下来不是si = 0 了
53 是不是 di 也为 0;
|
这个问题我也想过,不过最后好像没有什么结果,直接用mov也没有什么问题,这个可能是个人自己的习惯吧。用sub会影响一些标志寄存器,不知道作者是不是要在设置si的时候同时清除一些标志,但是我个人觉得没有这个必要,好像后面的操作没有那句是依赖标志寄存器的。
|
直接让si和di为0,是立即数寻址方式,不但占用存储空间(指令长),
而且执行慢,要多个cpu周期。
所以采用这种寄存器寻址方式清零,提高存储和执行效率。
嗬嗬,瞎说的,可以不信的呦。
而且执行慢,要多个cpu周期。
所以采用这种寄存器寻址方式清零,提高存储和执行效率。
嗬嗬,瞎说的,可以不信的呦。