谭斌谭斌 发表于 2013-2-25 19:10:57

关于sub的一个问题

这是我看linux 0.01的源代码的bootsetc.s中的一段开始的代码,主要疑惑的部分如下:
start:
        mov        ax,#BOOTSEG      ;就是一个地址给ax,下同
        mov        ds,ax
        mov        ax,#INITSEG
        mov        es,ax
        mov        cx,#256               ;意思是把256复制给cx
        sub        si,si                         ;这是我不懂得地方,下同
        sub        di,di
        rep            ;循环的意思
我不懂的地方就是代码注释的地方那里,sub si,si,是es:si - ds:si吗?而且还要循环256次~麻烦谁知道告诉我,谢谢!

仁意 发表于 2013-2-25 19:10:58

不用想的太复杂
sub si,si,是si - si, 使得si为0,相当于mov si,0:      
   sub   di,di也一样

而且你对rep的理解有误;
网站上有“汇编金手指”下载,基本上对指令都有介绍:

“REP与MOVS或STOS串操作指令相结合使用,完成一组字符的传送或建立一组相同
----   数据的字符串.”

例如 rep movs,重复的是movs指令,
就是说rep重复的是跟在它后面的一条指令。

bafengao 发表于 2013-2-25 19:47:03

我也有点迷茫 汇编知识需要再学习

谭斌谭斌 发表于 2013-2-26 16:15:41

仁意 发表于 2013-2-25 22:33 static/image/common/back.gif
不用想的太复杂
sub si,si,是si - si, 使得si为0,相当于mov si,0:      
   sub   di,di也一样 ...

昨天后来懂了,sub si,si确实是清零的意思,rep movw的意思是把es:si 的内容复制到ds: di那里去!
页: [1]
查看完整版本: 关于sub的一个问题