将数据段寄存器ds的值变成了0x07c0,方便了之后访问内存时利用这个段基址进行寻址,接下来,我们带着这两行代码继续往下看6行:
此时ds寄存器的值已经是0x07c0了,然后用同样的方式将es寄存器的值变成0x9000,接着又把cs寄存器的值变成256。
好的,此时ds,es,cx寄存器的值,都被赋上确定的值了,别慌,接着有两个sub指令。
sub si, si
sub di, di
这个就相当于把寄存器里的值清零,这是一个基本玩法,经过这些指令后,以下几个寄存器的值如下:
ds = 0x07c0
es = 0x9000
cx =256
si = 0
di = 0
为什么要给这些毫不相干的寄存器赋上值呢?其实就是为了下一条指令服务的:
rep movw
其中rep表示重复执行后面的指令。
后面的指令movw表示复制一个字(word, 16位),那其实就是不断重复复制一个字。
那自然就有了额以下几个问题:
重复执行多少次?
答案是cx寄存器中的值