我一直试图在 x86-64 中扫描和存储双字数组。我翻遍了所有地方,似乎找不到任何我能理解的东西。我的程序应该扫描并打印一个双字数组的所有元素。
我看过很多例子,但我似乎无法使用它们——它们给了我编译错误。此外,我似乎无法使用 - movq %rsi, [array + 8]
这是我的代码:
.data
.comm arr, 800 # int arr[100];
.comm p, 8 # int pointer;
.comm c, 8
.comm c2, 8
.comm c3, 8
arr dd 100 DUP(0)
.text
format1:
.string "Enter integers followed by EOF\n"
format2:
.string "%ld"
format3:
.string "a is %ld\n"
.globl main
main: # main()
movq $format1, %rdi # printf("Enter integers followed by E
movq $0, %rax #
call printf #
movq $arr, %r8
movq $0, c
movq $0, c2
whileloop:
movq $format2, %rdi # scanf("%ld",&a);
movq $p, %rsi #
movq %rsi, %r8
movq $0, %rax #
call scanf #
cmpq $0, %rsi # if(arr[ptr] == 0)
je endwhileloop
addq $8, %r8
addq $1, c
jmp whileloop
endwhileloop:
movq $format3, %rdi # printf("a=%ld",a);
movq $p,%rsi #
movq (%rsi),%rsi #
movq $0, %rax #
call printf #
ret
对于“arr”中的事实,这没有正确存储数组。谢谢!