【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地址继续执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值