没有合适的资源?快使用搜索试试~ 我知道了~
首页Archlab实验报告.pdf
资源详情
资源推荐
Archlab 实验报告
Part A
1. SUM.YS 计算链表的和
简要说明
将链表起始地址存入%edi
将求和结果存入%eax
用一个循环实现加和,当到达最末尾元素,用 andl 判断,再 jne 指令跳出
结果显示,%eax=0x00000cba.
每行程序对应 C 语言
.pos 0
init: irmovl Stack,%esp
call Main
halt
.align 4
list:
ele1:
.long 0x00a
.long ele2
ele2:
.long 0x0b0
.long ele3
ele3:
.long 0xc00
.long 0
Main: irmovl list,%edi
call sum_list
ret
sum_list:
irmovl $0,%eax
Loop:
mrmovl (%edi),%ecx
addl %ecx,%eax
mrmovl 4(%edi),%edi
andl %edi,%edi
#Execution begins at address 0
#set up stack pointer
#execute main program
#terminate program
#list of 3 elements
#get ls
#sum_list(list_ptr ls)
#int val=0
#while
#get ls->val
#val+=ls_val
#ls=ls->next
#if ls==0
jne Loop
ret
.pos 0x200
Stack:
#stop when 0
#return
#stack starts here and grows to lower
addresses
2. RSUM.YS 递归计算链表的和
简要说明
将链表起始地址存入%edi
将求和结果存入%eax
利用栈结构实现递归循环:每次把 val 值压入栈,并且触发 call 函数跳转,直到读
到末尾元素,把%eax 值赋 0;然后依次 ret 回到上一级位置,再将 pop 出来的 val
值和当前%eax 值相加并存入%eax,循环,一直到 ret 回主函数。
结果显示,%eax=0x00000cba
每行程序对应 C 语言
.pos 0
init: irmovl Stack,%esp
call Main
halt
.align 4
list:
ele1:
.long 0x00a
.long ele2
ele2:
.long 0x0b0
.long ele3
ele3:
.long 0xc00
.long 0
Main:
irmovl list,%edi
call rsum_list
ret
rsum_list:
loop:
#Execution begins at address 0
#set up stack pointer
#execute main program
#terminate program
#list of 3 elements
#get ls
#rsum_list(list_ptr ls)
#while
andl %edi,%edi
je zero
mrmovl (%edi),%edx
pushl %edx
mrmovl 4(%edi),%edi
call rsum_list
popl %edx
addl %edx,%eax
jmp end
zero:
irmovl $0,%eax
ret
end:
ret
.pos 0x100
Stack:
#if ls==0
#jump to zero if ls==0
#get ls->val
#put ls->val on the stack
#ls=ls->next
#iteration
#get current val
# rest=val+rest
#return 0
#return to last address
#return to last address
#stack starts here and grows to lower
addresses
3. COPY.YS 复制并计算异或
简要说明
将 src 首地址存入%edi,将 dest 首地址存入%esi
将异或结果存入%eax
用一个循环实现:将(%edi)存入(%esi),由于 Y86 指令中没有 mmmovl 指
令,因此需要借助%ecx 来实现,即先 mrmovl,再 rmmovl。然后将%ecx 和%eax
异或,即是 c 语言中的 result^=val。然后对%edi 和%esi 分别加 4,对 %edx(len)
减 1,通过判断 len 是否为 0,跳出。
结果显示,%eax=0x00000cba
每行程序对应 C 语言
.pos 0
init:
irmovl Stack, %esp
call Main
halt
.align 4
src:
.long 0x00a
.long 0x0b0
.long 0xc00 # Destination block
#Execution begins at address 0
#set up stack pointer
#execute main program
#terminate program
#source block
剩余10页未读,继续阅读
菜鸡本菜
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- BSC关键绩效财务与客户指标详解
- 绘制企业战略地图:从财务到客户价值的六步法
- BSC关键绩效指标详解:财务与运营效率评估
- 手持移动数据终端:常见问题与WIFI设置指南
- 平衡计分卡(BSC):绩效管理与战略实施工具
- ESP8266智能家居控制系统设计与实现
- ESP8266在智能家居中的应用——网络家电控制系统
- BSC:平衡计分卡在绩效管理与信息技术中的应用
- 手持移动数据终端:常见问题与解决办法
- BSC模板:四大领域关键绩效指标详解(财务、客户、运营与成长)
- BSC:从绩效考核到计算机网络的关键概念
- BSC模板:四大维度关键绩效指标详解与预算达成分析
- 平衡计分卡(BSC):绩效考核与战略实施工具
- K-means聚类算法详解及其优缺点
- 平衡计分卡(BSC):从绩效考核到战略实施
- BSC:平衡计分卡与计算机网络中的应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功