萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 679|回复: 0

请教编程问题

[复制链接]
发表于 2004-1-8 11:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
最近在学习mips指令
涉及到一个程序
int zerocount(int *a0, int *a1) {
int *p=zerofind(a0,a1);
if (p==0) {
return 0;
}
return (1+zerocount(p+1, a1));
}
对应mips指令:
zerocount: addi $sp,$sp,8    # Platz schaffen für 2 Worte
sw $ra,4($sp)                        # Rücksprungadresse sichern
sw $a1,0($sp)                       # a1 sichern
jal zerofind
beq $v0,$zero,finish             # keine Nullen mehr Þ Ende
lw $a1,0($sp)                        # a1 wieder vom Stack holen
addi $a0,$v0,4                      # neue Anfangsadresse für rek. Aufruf
jal zerocount
addi $v0,$v0,1
finish: lw $ra,4($sp)                # Rücksprungadresse vom Stack holen
subi $sp,$sp,8                       # Stack freigeben
jr $ra                                      # zurückspringen

调用的zeronfind子程序如下
int *zerofind(int *a0, int *a1) {
int *p=0;
while (a0<=a1) {
if (*a0==0) {
p=a0;
break;
}
a0++;
}
return p;
}

对应mips指令

zerofind: addi $v0,$zero,0   # Ergebnis mit Null initialisieren
loop: slt $t0,$a1,$a0            # while-Schleife: wenn a0&pound;a1,abarbeiten,
bne $t0,$zero,finish             # sonst nach finish springen
lw $t1,($a0)                          # das n&auml;chste Element des Array laden
beq $t1,$zero,found            # Null gefunden?
addi $a0,$a0,4                    # Elementaddresse inkrementieren
j loop
found: addi $v0,$a0,0
finish: jr $ra                          # zurückspringen



可以看到,程序执行为了找出数组中零的个数
子程序执行是找到零,返回的是存零的地址

但是我有点不明白的就是,
addi $a0,$v0,4                      # neue Anfangsadresse für rek. Aufruf
jal zerocount
addi $v0,$v0,1
这部分。
v0里存的明明是若有零则零的地址,但是后面他又加一,却作了计数
而且,每到执行到jal zerocount这部分都会跳转回去作循环,直到找不到零为止
那下面那条addi $v0,$v0,1语句什么时候执行呢?
应为如果找不到零就直接执行finish了

请哪位大侠赐教
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网

GMT+1, 2025-2-7 12:06 , Processed in 0.061559 second(s), 17 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表