【发布时间】:2013-11-05 01:00:09
【问题描述】:
我一直在尝试在 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”中的事实存储数组。 谢谢!
【问题讨论】:
-
您使用的是什么汇编程序?除了 cmets 和指令之外,这看起来像 gas 语法。
-
还有:为什么不直接用C写一个简单的程序,然后反汇编呢?
-
AMD x86-64。我也试过了。会再试一次。谢谢
-
对不起,我在用煤气。 GNU。
-
更好的是,
gcc -S -m64 test.c将产生汇编输出 test.s