返回列表 发帖

Turbo C下的寄存器变量

在Turbo C下有种变量叫寄存器变量。使用寄存器的好处是可以提高程序的运行速度!因为减少了寻址时间。 看下面的C代码: main() { int i,k; register j; for(i=1;i<=100;i++); for(k=1;k<=100;k++); for(j=1;j<=100;j++); } 这里j被声明为寄存器变量。通过tcc -S后看它的部分汇编代码。 ====================================================================================== …… …… mov di,1 jmp short @5 @4: @3: inc di @5: cmp di,100 jle @4 @2: ; ?debug L 6 mov word ptr [bp-2],1 jmp short @9 @8: @7: inc word ptr [bp-2] @9: cmp word ptr [bp-2],100 jle @8 @6: ; ?debug L 7 mov si,1 jmp short @13 @12: @11: inc si @13: cmp si,100 jle @12 …… …… ====================================================================================== 看到了!里面有di和si两个寄存器。但是只有j被声明为寄存器变量,为什么会出现两个呢?这个我没有找到什么合理的解释,也可能是由于程序中的变量少(少的范围是1-3个,如果使用两个变量,一个为普通变量,一个为寄存器变量,在汇编的代码下两个变量均是使用寄存器)。 在Turbo C中寄存器变量的个数最多只能使用两个(因为寄存器这个资源是很宝贵的)。但是如果声明多个寄存器变量的话,在编译时并不会报错,但这并不表示可以定义多个寄存器变量。同样,用tcc -S生成汇编代码后可以看到最多也就使用了di和si两个寄存器。 在一个程序中寄存器变量只能声明两个,肯定对于我们来说是少了点,但是我们也要合理的运用它。如果把它用在程序中规模比较大的循环中,效果也是可佳的(人能感觉到的话,可能不现实吧?我没有用过太大规模的循环)。总之,为了自己程序的速度,合理的利用这两个宝贵的寄存器变量吧!

返回列表 回复 发帖