Arch lab
一:实验梗概
在这个lab中,分为PartA,PartB,PartC。在PartA中,你要编写Y86-64程序.在PartB中,你要给SEQ处理器添加iaddq指令。在PartC,你要优化你的程序。
file | contains |
---|---|
misc | YAS和YIS |
seq | SEQ处理器 |
pipe | PIPE处理器 |
y86_code | 书上的y86代码 |
ptest | 测试脚本 |
Makefile | Makefile |
README | README |
工具
YAS
Y86-64汇编器,输入.ys结尾的y86 code,输出.yo结尾的object code。
./yas ./asum.ys //会输出asum.yo文件
YIS
Y86-64指令模拟器,输入.yo结尾的object code,输出执行结果
./yis ./asum.yo //会输出asum.yo程序情况
SEQ
SEQ+
PIPE
SEQ处理器对应于ssim(这个可执行文件),PIPE处理器对应于psim
-h | help |
---|---|
-g | gui模式 |
-t | 输出处理器执行和ISA执行的差异(用来检测处理器是否遵守ISA) |
./ssim -t <../a.yo //ssim执行a.yo
PART A
在sim/misc文件里,有*examples.c**文件,里面有三个函数,sum,rsum,copy。编写这三个函数的y86-64code.
sum.ys
#Execution begins at address 0,written by peanwang
.pos 0
irmovq stack,%rsp
call main
halt
# Sample linked list
.align 8
ele1:
.quad 0x00a
.quad ele2
ele2:
.quad 0x0b0
.quad ele3
ele3:
.quad 0xc00
.quad 0
#This is main function
main:
irmovq ele1,%rdi
call sum_list
ret
#long sum_list(list_ptr ls)
# ls in %rdi ,return i %rax
sum_list:
irmovq $0,%r14
irmovq $0,%rax
L2:
subq %r14,%rdi
je L4
mrmovq (%rdi),%r13
addq %r13,%rax
mrmovq 8(%rdi),%rdi
jmp L2
L4:
ret
#stack starts here and grows to lower addresses
.pos 0x200
stack:
rsum.ys
#rsum.ys,written by peanwang
.pos 0
irmovq stack,%rsp
call main
halt
# Sample linked list
.align 8
ele1:
.quad 0x00a
.quad ele2
ele2:
.quad 0x0b0
.quad ele3
ele3:
.quad 0xc00
.quad 0
#main function
main:
irmovq ele1,%rdi
call rsum_list
ret
#rsum_list(list_ptr ls)
#ls in %rdi, return in %rax
rsum_list:
irmovq $0,%r14
subq %r14,%rdi
je L7
pushq %rbx
mrmovq (%rdi), %rbx
mrmovq 8(%rdi), %rdi
call rsum_list
addq %rbx,%rax
popq %rbx
ret
L7:
irmovq $0,%rax
ret
#stack starts here and grows to lower address
.pos 0x200
stack:
copy.ys
#copy.ys,written by peanwang
.pos 0
irmovq stack,%rsp
call main
halt
#two block
.align 8
# Source block
src:
.quad 0x0