【Record】linux0.11上的汇编

bootsect.s汇编代码阅读笔记------
#代码段
       47 mov       ax,#BOOTSEG
       48 mov       ds,ax
       49 mov       ax,#INITSEG     !(0x9000)
       50 mov       es,ax
       51 mov       cx,#256
       52 sub       si,si   !si=0,源地址       ds:si=0x07c0:0x0000
       53 sub       di,di   !di=0, 目的地址     es:si=0x9000:0x0000
       54 rep                         !
       55 movw                   !
       56 jmpi       go,INITSEG   !
#代码段
解释:第52行,执行后si=0;之所以这样,估计是这样置0比mov等指令更快。
                   第47-55,SI为源变址寄存器,DI为目的变址寄存器,在串处理指令中, SI和DI作为隐含的源变址和目的变址寄存器,此时SI和DS联用,DI和附加段寄存器ES联用 ,分别达到在数据段和附加段中寻址的目的。(摘自IBM-PC汇编语言程序设计 第2版 P21)。
由此可以看出为什么可以实现第54行的循环移动操作,而rep指令在地址长度为16位时,用CX寄存器作为计数,直到CX中的值(上面为256)为0。
                   第56行,jmpi(jump intersegment) 是段间跳转指令
                                               jmpi的格式是: jmpi 段内偏移,段选择子
使得 CS=INITSEG,IP=go,也即程序跳转到0x9000:go地址继续执行。

你可能感兴趣的:(【Record】linux0.11上的汇编)