高级体系结构实验报告

上传人:xzh****18 文档编号:34203583 上传时间:2018-02-21 格式:DOCX 页数:8 大小:25.28KB
返回 下载 相关 举报
高级体系结构实验报告_第1页
第1页 / 共8页
高级体系结构实验报告_第2页
第2页 / 共8页
高级体系结构实验报告_第3页
第3页 / 共8页
高级体系结构实验报告_第4页
第4页 / 共8页
高级体系结构实验报告_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《高级体系结构实验报告》由会员分享,可在线阅读,更多相关《高级体系结构实验报告(8页珍藏版)》请在金锄头文库上搜索。

1、1. 提交三个程序的 mips 汇编代码文件以及 x86 汇编代码文件;MIPS1. test.c:.frame $sp,16,$31.set noreorder.cpload $25.set reorderaddu $sp,$sp,-16.mask 0x40c00000,-8sw $22,0($sp)sw $23,4($sp)sw $30,8($sp)la $30,3la $23,2addu $22,$30,$23subu $22,$30,$23mul $22,$30,$23div $22,$30,$23rem $22,$30,$23move $2,$0L.1:lw $22,0($sp)lw

2、 $23,4($sp)lw $30,8($sp)addu $sp,$sp,16j $312. sum.c.frame $sp,16,$31.set noreorder.cpload $25.set reorderaddu $sp,$sp,-16.mask 0x40800000,-12sw $23,0($sp)sw $30,4($sp)move $30,$0move $23,$0move $30,$0L.2:addu $23,$23,$30L.3:la $30,1($30)la $24,100ble $30,$24,L.2move $2,$0L.1:lw $23,0($sp)lw $30,4($

3、sp)addu $sp,$sp,16j $313. func.c.frame $sp,0,$31.set noreorder.cpload $25.set reorderaddu $2,$4,$5L.1:j $31.end add.globl main.text.align 2.ent mainmain:.frame $sp,48,$31.set noreorder.cpload $25.set reorderaddu $sp,$sp,-48.mask 0x82000000,-28.cprestore 16sw $31,20($sp)la $24,1sw $24,-4+48($sp)la $2

4、4,2sw $24,-8+48($sp)lw $4,-4+48($sp)lw $5,-8+48($sp)jal addsw $2,-12+48($sp)move $2,$0L.2:lw $25,16($sp)lw $31,20($sp)addu $sp,$sp,48j $31X86 汇编Sum.c#includeusing namespace std;int main()012D1370 push ebp 012D1371 mov ebp,esp 012D1373 sub esp,0D8h 012D1379 push ebx 012D137A push esi 012D137B push ed

5、i 012D137C lea edi,ebp-0D8h 012D1382 mov ecx,36h 012D1387 mov eax,0CCCCCCCCh 012D138C rep stos dword ptr es:edi int i,sum;i=0;012D138E mov dword ptr i,0 sum=0;012D1395 mov dword ptr sum,0 for(i=0;iusing namespace std;int main()003B1370 push ebp 003B1371 mov ebp,esp 003B1373 sub esp,0E4h 003B1379 pus

6、h ebx 003B137A push esi 003B137B push edi 003B137C lea edi,ebp-0E4h 003B1382 mov ecx,39h 003B1387 mov eax,0CCCCCCCCh 003B138C rep stos dword ptr es:edi int a=3;003B138E mov dword ptr a,3 int b=2;003B1395 mov dword ptr b,2 int c;c=a+b;003B139C mov eax,dword ptr a 003B139F add eax,dword ptr b 003B13A2

7、 mov dword ptr c,eax c=a-b;003B13A5 mov eax,dword ptr a 003B13A8 sub eax,dword ptr b 003B13AB mov dword ptr c,eax c=a/b;003B13AE mov eax,dword ptr a 003B13B1 cdq 003B13B2 idiv eax,dword ptr b 003B13B5 mov dword ptr c,eax c=a%b;003B13B8 mov eax,dword ptr a 003B13BB cdq 003B13BC idiv eax,dword ptr b 0

8、03B13BF mov dword ptr c,edx return 0;003B13C2 xor eax,eax 003B13C4 pop edi 003B13C5 pop esi 003B13C6 pop ebx 003B13C7 mov esp,ebp 003B13C9 pop ebp 003B13CA ret 2. 分析和说明上述三个输出文件中,两个版本的主要指令的流程和实现;.Test.caddu $sp,$sp,-16 ;$sp=$sp+(-16)sw $22,0($sp) ;保存$sp+0 到$22sw $23,4($sp) ;保存$sp+4 到$23 sw $30,8($sp)

9、 ;保存$sp+8 到$30la $30,3 ;加载 3 到 $30 la $23,2 ;加载 2 到 $23addu $22,$30,$23 ;$22=$30+$23subu $22,$30,$23 ;$22=$30-$23mul $22,$30,$23 ;$22=$30*$23div $22,$30,$23 ;$22=$30/$23rem $22,$30,$23 ;$22=$30 mod $23 move $2,$0 ;$2=$0lw $22,0($sp) ;$22= memory$SP+0 lw $23,4($sp) ;$22= memory$SP+4lw $30,8($sp) ;$22

10、= memory$SP+8addu $sp,$sp,16 ;$sp=$sp+(16)sum.caddu $sp,$sp,-16 ;$sp=$sp+(-16)sw $23,0($sp) ;保存$sp+0 到$23sw $30,4($sp) ;保存$sp+4 到$30move $30,$0 ;$30=$0move $23,$0 ;$23=$0move $30,$0 ;$30=$0addu $23,$23,$30 ;$23=$23+$30la $30,1($30) ;加载 1 到$30la $24,100 ;加载 100 到$24move $2,$0 ;$2=$0lw $23,0($sp) ;$23

11、=memory$sp+0lw $30,4($sp) ;$30=memory$sp+4addu $sp,$sp,16 ;$sp=$sp+16fun.caddu $2,$4,$5 ;$2=$4+$5.sw $31,20($sp) ;保存$sp+0 的结果到$31la $24,1 ;加载 1 到$24 sw $24,-4+48($sp) ;保存$sp-4+48 的结果到$24la $24,2 ;加载 2 到$24sw $24,-8+48($sp) ;保存$sp-8+48 的结果到$24lw $4,-4+48($sp) ;$4= memory$SP-4+48 lw $5,-8+48($sp) ;$5=

12、 memory$SP-8+48 jal addsw $2,-12+48($sp) ;保存$sp-12+48 的结果到$2move $2,$0 ;$2=$0L.2:lw $25,16($sp) ;$25= memory$SP+16lw $31,20($sp) ;$31= memory$SP+20addu $sp,$sp,48 ;$sp=$sp+(48)j $313.对比 mips 和 x86 指令在实现函数调用方面的差别,基于”函数调用/加和函数” ;(1). 需要将返回地址入栈,如 MIPS 下的 sw $31,20($sp) 一句,就是将函数的返回地址入栈。对于 x86 架构,由于 call

13、 命令会自动将返回地址入栈,所以在函数入口处没有返回地址入栈的指令;(2). 需要将调用函数的帧指针入栈,然后设置本身自己函数的帧指针。在 x86 下,是 push %ebp;mov %esp,%ebp 两句,而在 MIPS 下,是 sw $2,-12+48($sp) , move $2,$0;两句。这里也可以看出 x86 的拥有专门入栈指令的特点 push 的特点;4. 简要分析“诡异的跳转”中的程序为什么会调用 show 这个函数?int _tmain(int argc, _TCHAR* argv)00411420 push ebp 00411421 mov ebp,esp 0041142

14、3 sub esp,0CCh 00411429 push ebx 0041142A push esi 0041142B push edi 0041142C lea edi,ebp-0CCh 00411432 mov ecx,33h 00411437 mov eax,0CCCCCCCCh 0041143C rep stos dword ptr es:edi int a1;a3 =(int) show;0041143E mov dword ptr ebp+4,offset show (4110F0h) getchar();00411445 mov esi,esp 00411447 call dword ptr _imp_getchar (4182B

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号