我在這個論壇上閱讀了很多主題,並在這個主題上找到了很多答案。我實現了將5個參數從我的彙編代碼傳遞給C函數。這樣做的,我使用的指令如下:將參數從asm傳遞到C上ARM
mov r0, #0
mov r1, #1
mov r2, #2
mov r3, #3
mov r4, #4
STR r4, [sp, #-4]!
BL displayRegistersValue
但是今天我想要整個寄存器傳遞給C函數將它們保存在C結構。我試着用此指令:
STMDB sp!, {registers that i want to save}
我的C函數:
displayRegistersValue(int registers[number_of_registers])
char printable = registers[0] + (int)'0'; // Convert in a printable character
print_uart0(&printable);
但我的顯示效果並不好。那麼,我如何才能訪問C代碼中的寄存器呢?
'STMDB'之前/之後,你需要'mov r0,sp'。這將傳遞一個指向'C'例程的指針作爲第一個參數。那麼你的代碼應該工作。 – 2013-02-12 16:54:23
我不會指望它。你永遠不知道編譯器想要保存到堆棧中。這個,其他垃圾等。更安全的就是給它地址本身。不過,我不認爲OP理解指針,這是阻礙。 – 2013-02-12 16:57:47
編譯器會保留它需要在堆棧上的空間;它不應該覆蓋以前的堆棧幀。 'sp!'表示在保存後更新堆棧指針。他似乎正在爲EABI使用正確的堆棧方向。 – 2013-02-12 21:20:00