(16分)已知计算机M字长为32位,带符号整数用补码表示。某C语言完整程序段和该程序段在计算机M上的部分机器级代码如下,每个机器代码行中依次包含指令序号、虚拟地址、机器指令和汇编指令。
int sum = 0;
1 00401000 C7 45 FC 00 00 00 00 movl $0, -4(%ebp)
for (int i = 0; i < 2048; i++) {
......
3 00401008 EB 21 jmp 00401031h
sum += A[i];
......
5 00401013 C1 E0 02 shll $2, %eax
6 00401016 05 A0 04 00 08 addl $0804A010h, %eax
7 0040101B 8B 08 movl (%eax), %ecx
8 0040101D 01 4D FC addl %ecx, -4(%ebp)
if (sum > 100)
......
10 00401024 7E 07 jle 0040102Dh
sum = 0;
......
14 00401038 7D DC jl 00401010h
}
请回答下列问题:
(1)上述代码中,哪些指令可能会使程序发生跳转?采用了什么寻址方式?请给出第3条指令jmp的跳转目标地址计算过程。(4分)
(2)已知je指令表示“有符号数小于等于时转移”,会根据状态寄存器中的标志位进行判断。若执行到第10条指令jle时,sum=150,则符号标志SF、溢出标志OF和零标志ZF分别是什么?判断跳转的逻辑表达式是什么?(3分)
(3)程序执行过程中,每次在指令5执行前,都会将变量i存储在eax寄存器中。已知shll指令为逻辑左移指令,整型元素int占4字节,A为整型数组。分析第5条指令shll、第6条指令addl和第7条指令movl所实现的功能,cx寄存器存储的内容是什么?第7条指令中操作数“(%eax)”采用了什么寻址方式?计算机M是按字节编址还是按字编址?若数组元素A[10]存在,输出该元素的起始地址。(7分)
(4)计算机M是RISC还是CISC?为什么?(2分)
登录后提交答案
暂无评论,来抢沙发