x86-64 でダブル ワード配列をスキャンして保存しようとして困っています。私はすべてを見てきましたが、私が理解しているものは何も見つからないようです。私のプログラムは、dword 配列のすべての要素をスキャンして出力する必要があります。
多くの例を見てきましたが、それらを使用できないようです-コンパイルエラーが発生します。さらに、次のようなものを使用できないようです - 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」のファクトの配列を適切に保存していません。ありがとう!