int smplSize = 48;
int Smpl[48];
for(int i = 0; i < smplSize; i++) Smpl[i] = 0x0;
Smpl[smplSize-1] = 0x1;
int *ptrToSmpl = &Smpl[0];
printf("Sample @%p of Size %i :\n",(void*)ptrToSmpl,smplSize);
asm volatile(
"@ ------------------------------------------------- \n"
"@ Invert the sample \n"
"@ ------------------------------------------------- \n"
//"0: \n"
"ldr r2,[r3] \n"
//"cmp r2,#0x1 \n"
//"bne 1f \n"
"add r2,#0x1 \n"
//"add r2,#0x1 \n"
"str r2,[r3] \n"
//"ldr r1, .0 \n"
//"bx r1 \n"
//"1: \n"
:
: "r" (ptrToSmpl)
: "r3", "memory"
);
printf("Sample[0] = %i" , Smpl[0]);
正如你可以看到我想要操縱通過手臂的內聯彙編數組的一個變量,但我總是得到一個段錯誤。如何在沒有段錯誤的情況下訪問內存?
printf("Hello inline asmTest start!\n\n");
int smplSize = 48;
int Smpl[48];
for(int i = 0; i < smplSize; i++) Smpl[i] = 0x0;
Smpl[smplSize-1] = 0x1;
int *ptrToSmpl = &Smpl[0];
printf("Sample @%p of Size %i :\n",(void*)ptrToSmpl,smplSize);
asm volatile(
"@ ------------------------------------------------- \n"
"@ Invert the sample \n"
"@ ------------------------------------------------- \n"
//"0: \n"
"ldr r2,%[ptrToSmpl] \n"
//"cmp r2,#0x1 \n"
//"bne 1f \n"
"add r2,#0x1 \n"
//"add r2,#0x1 \n"
"str r2,%[ptrToSmpl] \n"
//"ldr r1, .0 \n"
//"bx r1 \n"
//"1: \n"
:
: [ptrToSmpl]"r" (ptrToSmpl)
:
);
printf("Sample[0] = %i" , Smpl[0]);
好吧,我這樣做了,但現在我得到一個 「/tmp/cczQDyiw.s|72|Error:internal_relocation(類型:OFFSET_IMM)不固定起來|」編譯它時。
順便說一句:我可以「組織」[程序的地址]「內聯asm代碼嗎?
printf("Hello inline asmTest start!\n\n");
int smplSize = 48;
int Smpl[48];
for(int i = 0; i < smplSize; i++) Smpl[i] = 0x0;
Smpl[smplSize-1] = 0x1;
int *ptrToSmpl = &Smpl[0];
printf("Sample @%p of Size %i :\n",(void*)ptrToSmpl,smplSize);
asm volatile(
"@ ------------------------------------------------- \n"
"@ Invert the sample \n"
"@ ------------------------------------------------- \n"
"init: \n"
"ldr r0,%[ptrToSmpl] \n"
"loop : \n"
"ldr r4,[r0] \n"
"cmp r4,#0x0 \n"
"bne end \n"
"add r4,#0x1 \n"
"str r4,[r0] \n"
"add r0,#0x1 \n"
"b loop \n"
"end: \n"
:
: [ptrToSmpl]"r" (ptrToSmpl)
: "r0" , "r4", "memory"
);
printf("Sample[0] = %i" , Smpl[0]);
編輯2:
正如你可以看到上面依然孤單在adressing我覺得一個錯誤。 現在的錯誤消息是: 「/tmp/ccE69oZd.s|75|Error:未定義符號r6用作立即值|」 但是在任何地方都沒有r6。
你如何確保ptrToSmpl以r3結尾? http://goo.gl/1aJ5t8 – auselen 2014-09-26 12:35:25
如果您有其他問題,請開始一個新的主題 - 一旦答案已經被接受並且被接受,很難對您的編輯進行跟蹤,並且很難正確回答它們。順便說一句 - 使用'adr'的想法是完全錯誤的,並且表明你不知道這條指令是幹什麼的... – 2014-09-26 20:26:32
sry使用adr是一個錯誤,它應該是ldr。 – schwenk 2014-09-28 10:39:33