深入理解计算机系统 第四章 家庭作业4.47
请问一下Y86-64汇编格式为什么运行不下去了,在L2第一行就中止了
jmp L2处于执行阶段时 L2的 rrmovq %rsi,%r8 处于译码阶段 为什么此时 译码阶段的寄存器的Stat的值为HLT?我明明是传送一个值`为什么传送一个值会导致HLT?
/* bubble.ys */
.pos 0
irmovq stack, %rsp
call main
halt
# Array of 4 elements
.align 8
data:
.quad 0x0000000000000004
.quad 0x0000000000000003
.quad 0x0000000000000002
data_end:
.quad 0x0000000000000001
main:
irmovq data,%rdi
irmovq data_end,%rsi
call bubble_a
ret
# long bubble_a(long *data, long *end)
# data in %rdi, end in %rsi
bubble_a:
jmp L2
L3:
irmovq $8,%rdx #L3
addq %rdx,%rax #i+1
L5:
rrmovq %rax,%r9 #L5
subq %rsi,%r9 #i-end
jge L4 #>=
mrmovq 8(%rax),%rdx #*(i+1)
mrmovq (%rax),%rcx #*i
rrmovq %rdx,%r10
subq %rcx,%r10 #*(i+1)-*i
jge L3 #>=
rmmovq %rcx,8(%rax) #swap
rmmovq %rdx,(%rax) #swap
jmp L3
L4:
irmovq $8,%rdx #L4
subq %rdx,%rsi #end-1
L2:
rrmovq %rsi,%r8
subq %rdi,%r8 #data-end
jle L6 #<
rrmovq %rdi,%rax #start->i
jmp L5
L6:
ret #L6
.pos 200
stack: