討論區快速選單
知識庫快速選單
軟體開發過程中有哪些資安漏洞? 政府補助!學嵌入式+物聯網
[ 回上頁 ] [ 討論區發言規則 ]
GCC & ASM
更改我的閱讀文章字型大小
作者 : lord_joseph(Lord Joseph)
[ 貼文 79 | 人氣 5967 | 評價 300 | 評價/貼文 3.8 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/5/12 下午 04:57:41
小弟想請問一個問題:
在 GCC 中如果要使用 ASM 的指令的話,
該如何傳遞引數(或傳回結果)呢
作者 : nilhc(apple1)
[ 貼文 29 | 人氣 1470 | 評價 160 | 評價/貼文 5.52 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/5/19 上午 11:16:57
你說的是 inline assembly 嗎
還是 gcc 的 compile option?
如是 compile option => gcc -Wa,option
如是 inline assembly 就是像
__asm(" move ax,bx");

用search engine 找 inline assembly 可找到一些範例
作者 : lord_joseph(Lord Joseph)
[ 貼文 79 | 人氣 5967 | 評價 300 | 評價/貼文 3.8 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/5/21 上午 09:23:44
>你說的是 inline assembly 嗎
YES!!
>還是 gcc 的 compile option?
>如是 inline assembly 就是像
>__asm(' move ax,bx');
>用search engine 找 inline assembly 可找到一些範例
一般的 inline 用法我了解,
但是我的問題是如果是要傳遞 C 的變數的話,在網路上就比較少有人提到了
例如有一變數 var_a 要傳給 register ax 的話,沒有找到比較清楚的說明
連到書店去翻原文書(GCC)都只有不到兩頁的說明,有點沒力.....-_-|||
作者 : nilhc(apple1)
[ 貼文 29 | 人氣 1470 | 評價 160 | 評價/貼文 5.52 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/5/24 下午 04:28:15
利用 google 查 "inline;asm;linux"
有好多範例與文章
如 linuxassembly.org/article/rmiyagi-inline-asm.txt
你也可以用 gcc -S example.c
讓gcc產生assmebly file來比對
試試
如果還不行
那就把你的範例post上來
也許大家有興趣
作者 : sub(sub)
[ 貼文 30 | 人氣 1323 | 評價 60 | 評價/貼文 2 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/5/29 下午 10:44:37
如果是 inline assemably的話,
example:

int VarA;
int VarB;
_asm {
mov ax, VarA
mov VarB, ax
}
我不知道gcc是不是也一樣??
try it!!!
作者 : lord_joseph(Lord Joseph)
[ 貼文 79 | 人氣 5967 | 評價 300 | 評價/貼文 3.8 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/5/30 下午 03:14:40
>如果是 inline assemably的話,
>example:
>int VarA;
>int VarB;
>_asm {
>mov ax, VarA
>mov VarB, ax
>}
>我不知道gcc是不是也一樣??
>try it!!!
不太相同,GCC 在 inline assembler 這個部份與其他的 C 差異蠻大的
但是還是很謝謝你
作者 : nilhc(apple1)
[ 貼文 29 | 人氣 1470 | 評價 160 | 評價/貼文 5.52 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/5/31 下午 12:19:35
X86 example

example1:

int main() {
int VarA;
int VarB;
__asm__ ( "movl VarA, %eax");
__asm__ ( "movl $VarB, %eax");
}

gcc -S main.c
你可以得到組合語言的結果

---------------------------------------------------
example2:
int main (void) {
     int operand1, operand2, sum, accumulator;
    
     operand1 = rand (); operand2 = rand ();
    
     __asm__ ("movl %1, %0\n\t"
     "addl %2, %0"
: "=r" (sum) /* output operands */
: "r" (operand1), "r" (operand2) /* input operands */
: "0"); /* clobbered operands */
    
     accumulator = sum;
    
     __asm__ ("addl %1, %0\n\t"
"addl %2, %0"
: "=r" (accumulator)
: "0" (accumulator), "g" (operand1), "r" (operand2)
: "0");
     return accumulator;
}

-------------------------------

作者 : nilhc(apple1)
[ 貼文 29 | 人氣 1470 | 評價 160 | 評價/貼文 5.52 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/5/31 下午 12:19:45
X86 example

example1:

int main() {
int VarA;
int VarB;
__asm__ ( "movl VarA, %eax");
__asm__ ( "movl $VarB, %eax");
}

gcc -S main.c
你可以得到組合語言的結果

---------------------------------------------------
example2:
int main (void) {
     int operand1, operand2, sum, accumulator;
    
     operand1 = rand (); operand2 = rand ();
    
     __asm__ ("movl %1, %0\n\t"
     "addl %2, %0"
: "=r" (sum) /* output operands */
: "r" (operand1), "r" (operand2) /* input operands */
: "0"); /* clobbered operands */
    
     accumulator = sum;
    
     __asm__ ("addl %1, %0\n\t"
"addl %2, %0"
: "=r" (accumulator)
: "0" (accumulator), "g" (operand1), "r" (operand2)
: "0");
     return accumulator;
}

-------------------------------

 板主 : maple-leaf
 > UNIX - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - UNIX - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
UNIX
1 Anderson 1130 
2 old cat 450 
3 maple-leaf 420 
4 MooCow 310 
5 又改暱稱 290 
6 青衫 200 
7 sazabi 200 
8 member one 200 
9 愛睏魚 190 
10 pail 160 
UNIX
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
6.298828E-02