返回主页
学习人数: 96
stroke-dashoffset="*2.6389" stroke-linecap="round" transform="rotate(-90 50 50)"/>
正确率: 100%
未通过

(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分)

回答区域
提示
提示内容

登录后提交答案


暂无评论,来抢沙发