私が書いたこのコードが機能しない理由をよりよく理解し、それを修正するのを手伝ってくれる人がいるかどうか疑問に思っていました. 以下は、私が作成した Y86 であり、その中に定義した配列を合計する必要がありますが、プログラムが返すことができるのは、予想される cba ではなく d4a だけです。
.pos 0
init:
irmovq Stack, %rsp
rrmovq %rsp, %rbp
xorq %rcx, %rcx #zeroing out all temp variables
xorq %rdi, %rdi
xorq %rbx, %rbx
irmovq $8, %rdi #rdi has 4
irmovq ele1, %rbx #initialize rbx as ele1
irmovq $0, %rcx #sum is initially 0
call sum_list
halt
# Sample linked list
.align 8
ele1:
.quad 0x00a
.quad ele2
ele2:
.quad 0x0b0
.quad ele3
ele3:
.quad 0xc00
.quad 0
sum_list:
mrmovq (%rbx), %rax #current rbx value into rax
addq %rax, %rcx #rcx += current rbx value
addq %rdi, %rbx #add 4 to rbx address
andq %rax, %rax #check if previous rbx value was 0
jne sum_list #if it wasn't zero, restart, except rbx+4
done:
rrmovq %rcx, %rax #if it was 0, move the sum to rax
rrmovq %rbp, %rsp #restore rsp
popq %rbp #and rbp
ret #return rax, which should be the sum of linked list
.pos 0x300
Stack:
皆様、お早めによろしくお願いします!組み立ては理解するのが本当に難しく、人々が時間を割いて私にこれらのことを説明してくれると本当に助かります!