ARM彙編和C語言混合程式設計中陣列的陣列的操作
ARM彙編和C語言混合程式設計中陣列的陣列的操作
此示例描述a陣列中的元素累加的結果,c和b交換的例項:
·by fulinux(blog.csdn.net/fulinus)
程式碼塊
例如:
#include <stdio.h>
int main (int argc, char **argv)
{
int a[4] = {1, 2, 3, 4};
int b;
__asm__ ("MOV R1, %1;"
"LDMIA R1!, {R2-R5};"
"ADD R2, R2, R3;"
"ADD R4, R4, R5;"
"ADD R2, R2, R4;"
"MOV %0, R2;"
:"=r"(b)
:"r"(a));
printf ("b = %d\n", b);
int c=100,d=200;
int result;
__asm__ __volatile__(
"mov %0,%3\n\t" //%0是一個佔位符,表示result,之後的類推
"ldr r0,%1\n\t"
"ldr r1,%2\n\t"
"str r0,%2\n\t"
"str r1,%1\n\t"
:"=r"(result),"+m"(c),"+m"(d)
:"i"(123));
printf ("c = %d, d=%d, result=%d\n", c, d, result);
int e[4][2] = {{1, 2}, {3, 4}, {5, 6}, {7,8}};
int f;
int *g;
int h;
g = &e[3][1];
printf ("g=%p, %p\n", g, &e[2][1]);
__asm__ __volatile__(
"MOV R0, %2;"
"MOV R3, #0;"
"MOV R4, #0;"
"MOV R5, %3;"
"LOOP:;"
"LDMIA R0!, {R1-R2};"
"ADD R1, R1, R2;"
"ADD R3, R3, R1;" //sum=sum+R1
"ADD R4, R4, #1;" //i++
"CMP R0, R5;"
"BLE LOOP\n"
"MOV %0, R3;"
"MOV %1, R5;"
:"=r"(f),"=r"(h)
:"r"(e),"r"(g)
);
printf ("f = %d, h = %p\n", f, h);
return 0;
} /* ----- End of main() ----- */
浮點運算舉例:
double j=0.001;
short int k = 10;
double l;
asm volatile (
"vmov s8, %[k]\n\t"
"vcvt.f64.s32 d6, s8\n\t"
"vmul.f64 %P[l], %P[j], d6\n\t"
: [l] "=w" (l)
: [j] "w" (j), [k] "r" (k)
: "d8", "s8"
);
printf ("l = %f\n", l);
cmp(Compare)比較指令
cmp:把一個暫存器的內容和另一個暫存器的內容或立即數進行比較。但不儲存結果,只是正確的更改標誌。
一般 cmp 做完判斷後會進行跳轉,後面通常會跟上B指令。
BL 標號:跳轉到標號處執行
B.LT 標號:比較結果是小於(less than),執行標號,否則不跳轉;
B.LE 標號:比較結果是小於等於(less than or equal to),執行標號,否則不跳轉;
B.GT 標號:比較結果是大於(greater than),執行標號,否則不跳轉;
B.GE 標號:比較結果是大於等於(greater than or equal to),執行標號,否則不跳轉;
B.EQ 標號:比較結果是等於,執行標號,否則不跳轉;
B.HI 標號:比較結果是無符號大於,執行標號,否則不跳轉;
作者:原子彈
連結:https://www.jianshu.com/p/7e1eb1d72c83
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。
相關文章
- c語言的陣列C語言陣列
- C語言程式設計基礎:指標陣列與陣列指標C語言程式設計指標陣列
- C語言陣列C語言陣列
- C語言(字元陣列)C語言字元陣列
- c語言字元陣列C語言字元陣列
- c語言程式設計學習之二維陣列C語言程式設計陣列
- 實驗4 c語言陣列應用程式設計C語言陣列程式設計
- C語言 簡單的佇列(陣列佇列)C語言佇列陣列
- C語言如何計算陣列的長度C語言陣列
- 實驗4_C語言陣列應用程式設計C語言陣列程式設計
- [ASM C/C++] C語言陣列ASMC++C語言陣列
- C語言指標和陣列基礎C語言指標陣列
- C語言:陣列和指標的區別C語言陣列指標
- C語言/C++程式設計學習:棧的程式碼實現之陣列方案C語言C++程式設計陣列
- C語言求其字元陣列的長度C語言字元陣列
- 陣列的reduce操作+物件陣列的map操作陣列物件
- C語言 指標與陣列C語言指標陣列
- c語言陣列、sizeof()及strlen()C語言陣列
- C語言基礎-1、陣列C語言陣列
- go 語言陣列Go陣列
- C語言 二維陣列課題程式碼C語言陣列
- C語言指標和陣列筆試題C語言指標陣列筆試
- (C語言)簡單明瞭的 陣列模擬棧+ (C++)陣列模擬棧C語言陣列C++
- C語言入門基礎之陣列——數學和程式設計的完美結合(圖)C語言陣列程式設計
- c++中的陣列C++陣列
- c程式設計--指標與陣列C程式程式設計指標陣列
- C語言陣列求學生成績C語言陣列
- c語言-運算子,陣列,指標C語言陣列指標
- C語言 有一個整形陣列a,有10個元素,要求輸出陣列中的全部元素C語言陣列
- Ruby 中陣列的常用操作陣列
- JavaScript中對陣列的操作JavaScript陣列
- C語言_指標和陣列的幾種訪問形式C語言指標陣列
- Javascript - 陣列和陣列的方法JavaScript陣列
- C語言核心之陣列和指標詳解C語言陣列指標
- JS中陣列操作JS陣列
- JavaScript中對陣列和陣列API的認識JavaScript陣列API
- C語言學習歷程(十二)陣列指標與指標陣列C語言陣列指標
- c語言關於陣列的簡單運算C語言陣列