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

(10分)已知某计算机M的字长为32位,int型数据占4字节,其执行如下C程序段时的部分机器级代码如下(每行依次包含指令序号、虚拟地址、机器指令和汇编指令,汇编指令中[ebp-X]表示栈帧中存放局部变量的地址):

int a[32][64]; // 数组a在主存中连续存放,首地址为00431000H
for(int i=0; i<32; i++){    // 外层循环:i从0到31
    for(int j=0; j<64; j++){// 内层循环:j从0到63
        a[i][j] = 0x12345678; // 给数组元素赋值
    }
}

对应的机器级代码(部分):

1   00402050  C7 45 F8 00 00 00 00              mov [ebp-8], 0        ; 初始化i=0
2   00402057  EB 0B                             jmp 00402064H         ; 跳转到外层循环判断
3   00402059  8B 45 F8                          mov eax, [ebp-8]      ; eax = i
4   0040205C  6B C0 40                          imul eax, eax, 40H    ; eax = i * 64(64为数组列数)
5   0040205F  89 45 F4                          mov [ebp-4], eax      ; [ebp-4] = i*64
6   00402062  EB 09                             jmp 0040206DH         ; 跳转到内层循环判断
7   00402064  C7 45 FC 00 00 00 00              mov [ebp-4], 0        ; 初始化j=0
8   0040206B  8B 55 FC                          mov edx, [ebp-4]      ; edx = j
9   0040206E  8B 75 F4                          mov esi, [ebp-4]      ; esi = i*64(第5条指令赋值结果)
10  00402071  C7 84 B6 00 10 43 00 78 56 34 12  mov [esi*4 + edx*4 + 00431000H], 0x12345678 ; a[i][j] = 0x12345678
11  0040207C  83 45 FC 01                       add [ebp-4], 1        ; j++
12  00402080  83 7D FC 3F                       cmp [ebp-4], 3FH      ; 比较j与63(判断j<64)
13  00402084  7C E6                             jl 0040206BH          ; 若j<64,跳回内层循环执行
14  00402086  83 45 F8 01                       add [ebp-8], 1        ; i++
15  0040208A  83 7D F8 1F                       cmp [ebp-8], 1FH      ; 比较i与31(判断i<32)
16  0040208E  7C CB                             jl 00402059H          ; 若i<32,跳回外层循环执行

请回答下列问题:
(1) 第11条指令的虚拟地址是多少?(2分)
(2) 第2条jmp(操作码EBH)和第13条jl(操作码7CH)均为跳转指令,跳转目标地址分别为00402064H、0040206BH。这两条指令采用何种寻址方式?请计算第2条jmp指令的跳转偏移量(用十六进制表示),并写出目标地址的推导过程。(3分)
(3) 针对第10条mov指令(实现a[i][j] = 0x12345678):①该指令中源操作数(0x12345678)采用何种寻址方式?②结合数组a的存储结构,说明指令中地址计算表达式“esi*4 + edx*4”的逻辑含义,并写出该指令访问数组元素a[i][j]的有效地址(EA)计算公式。③根据该指令的机器码,判断计算机M采用大端还是小端方式。(3分)
(4) 已知计算机M的Cache采用直接映射方式,Cache总行数为1024行(2¹⁰行),每行大小为64字节(2⁶字节),主存按字节编址。第一次执行第10条指令时,访问数组元素a[i][j](即目标存储单元)是否会发生Cache缺失?请写出具体判断过程(提示:第一次执行时访问的是a[0][0])。(2分)

回答区域
提示
提示内容

登录后提交答案


暂无评论,来抢沙发