5
#include <stdio.h>
int main(){
__asm__ (
"result: \n\t"
".long 0 \n\t"
"rdtsc \n\t"
"movl %eax, %ecx\n\t"
"rdtsc \n\t"
"subl %ecx, %eax\n\t"
"movl %eax, result\n\t"
);
extern int result;
printf("%d\n", result);
}
Tôi muốn chuyển một số dữ liệu từ assembly đến main
qua biến số result
. Điều này có thể không? Mã lắp ráp của tôi gây ra một số Segmentation fault (core dumped)
. Tôi đang sử dụng Ubuntu 15.10 x86_64, gcc 5.2.1.Chuyển biến từ trình biên dịch sang C
GCC có [ASM Extended] (https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html) cho việc này, cho phép bạn tham khảo vào một biến đầu ra trong đoạn '__asm__' đó. –
Để thêm vào đó: mã khi nó phân bổ không gian cho 'kết quả' trong phân đoạn mã của chương trình, và' .long 0' tạo ra hai lệnh 'add% al, (% rax)'. –
Nếu bạn muốn đọc đồng hồ, tại sao không chỉ sử dụng 'unsigned long long a = __builtin_ia32_rdtsc()'? Sau đó, bạn không cần phải viết bất kỳ asm. –