某程序中有如下一段循环代码段 P: for (i = 0; i < N; i++) sum += A[ i ]; 假设编译时变量 sum 和 i 分别分配在寄存器 R1 和 R2 中,常量 N 在寄存器 R6 中,数组 A 的首地址在寄存器 R3 中,程序段 P 的起始地址为 08048100H,对应的汇编码和机器代码如下所示: 指令序号 指令地址 机器代码 汇编码 操作注释 1 08048100H 00022080H loop: sll R4, R2, 2 (R2)<<2→r4 1 2 3 4 5 6 32 08048104h 00083020h add r4, r3 (r4)+(r3)→r4 08048108h 8c850000h load r5, 0(r4) ((r4)+0)→r5 0804810ch 00250820h r1, r5 (r1)+(r5)→r1 08048110h 20420001h addi r2, (r2)+1→r2 08048114h 1446fffah bne r6, loop if (r2)≠(r6) goto 执行上述代码的计算机中,存储器 m 采用 位定长指令字,其中分支指令 采用如下格式: 31:26 25:21 20:16 15:0 op rs rd offset 指令格式中的 代表操作码字段, 和 都代表寄存器编号, 为偏移量常数(用补码表示), 请回答下列问题,并说明理由: (1)存储器 的编址单位是什么? (2)已知 sll 指令实现左移功能,数组 a 中每个元素占多少位? (3)上表中 指令的 字段的值是多少?已知 指令采用相对寻址方式, pc 的当前内容为指令bne 的地址,通过分析表中指令地址和 指令内容,推断>
第1题
main()
{ char ch[2][5]={"6937","8254"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++)p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>′\0′;j+=2)
s=10*s+p[i][j]-′0′;
printf("%d\n",s);}
该程序的输出结果是
A.69825
B.63825
C.6385
D.693825
第2题
A.0 1 2
B.1 2 3
C.2 3 4
D.3 4 5
第3题
A.35
B.37
C.39
D.3975
第4题
第5题
int[12]={0},*p[3],**pp,i;
for(i=0;i<3;i)
p[i]=&a[i*4];
pp=p;
则对数组元素的错误引用是
A.pp[0][1]
B.a[10]
C.p[3][1]
D.*(*(p+2)+2)
第6题
main( )
{ int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++) p[i]=i+1;
printf("%d \n",a[1][2]);
}
程序运行后的输出结果是
A.3
B.6
C.9
D.2
第7题
int[12]={0},*p[3],**pp,i;
for(i=0;i<3;i)
p[i]=&a[i*4];
pp=p;
则对数组元素的错误引用是
A.pp[0][1]
B.a[10]
C.p[3][1]
D.*(*(p+2)+2)
第8题
int[12]={0},*p[3],**pp,i;
for(i=0;i<3;i)
p[i]=&a[i*4];
pp=p;
则对数组元素的错误引用是
A.pp[0][1]
B.a[10]
C.p[3][1]
D.*(*(p+2)+2)
第9题
fun(char p[][10])
{ int n=0,i;
for(i=0;i<7;i++)
if(p[i][0]=='T')n++;
return n;
}
main()
{ char str[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
printf(" % d\n",fun(str));
}
程序执行后的输出结果是
A)1
B)2
C)3
D)0
第10题
A.int*p=a;
B.intp=a;
C."p=a;
D.p=a;
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!