首先来看第一条关键汇编指令:rep movw
关于这个movw指令,查了网上很多说法,这里我调查的情况是:在INTEL 80386的数据手册中没有movw指令,只有movsw指令。
按照之前学习的内容,bootsect使用的是intel的as86汇编器编译,as86的mov语法是mov Destination Source;从第47行的mov语法看确实是as86汇编器语法。而movw是GNU as汇编器(AT&T)支持的指令关键字。显然,这里是书中的一个错误。但是,这段程序似乎可以在BOCHS中编译通过,此处是个关于AS86与AT&T汇编器相关知识的一个入口,暂且存疑了。
关于movsw可以参考下面80386手册中的解释:
MOVS是个字符串指令,将ESI指向的字符串元素移动到EDI指向的位置处。movsb/movsw/movsd分别可以对字节、字和双字进行操作。目的段寄存器不能被段覆盖前缀覆盖,源段寄存器可以被覆盖。【段覆盖前缀】。即目的段寄存器只能使用ES,不能使用其他的寄存器代替。源段寄存器是DS,可以被替代为其他的段寄存器。