Sunday, January 14, 2007

誰幹走了我的飲料

元旦前一天剛好是星期天, 母親覺的應該去掃一下墓, 所以我就載著老婆與父母出發, 而弟弟因為等會有事, 所以自己騎車, 再到爺爺奶奶的墓地集合

要到目的地有一段巔箥且很窄的路, 所以開起車來有點辛苦, 不過倒也不是難事, 等一切祭拜完成,也洗了一下墓地週邊, 就載著全家, 一路聊天循原路回家, 其間還跟老爸激烈的討論家族最近發生的事

在離開小路後, 手機響起, 原來是老弟打電話來, 我接起來後老弟劈頭就說 "哇勒,我回到機車上發現,連我掛在車上的飲料也被幹走, 這是什麼世界", 但接下來我的回答連我自己都覺的不可思議, "你的飲料掉在那條小路了啦, 我還差點開車壓到, 你是不是喝清心的, 還用個單杯袋子裝起來, 我想應該是道路巔箥抖出來了, 不是有人幹走你的飲料啦."

掛了電話, 全車的人都以非常訝異的聲音, 問我怎麼知道, 因為大家都在一起, 而我也事前沒提過我有看到一杯茶, 更不用提我還知道那是我弟掉的, 所以事後我回想起來, 是當我弟跟我講說他的飲料被幹走的瞬間, 我立即將我回程看到的情況與我弟的話做連結, 這就太神奇了..!!

ADD 的注意力, 還真是多心呢..!!

ADD 到底注意了哪些東西

ADD 的患者, 到底思緒是怎麼運作的, 這真是有趣的問題, 到底注意力既然沒有在當下這個點,那他到底是跑去哪了..

我一直以為ADD 的思緒很亂, 像是亂槍打鳥, 因為我常遇到, 我在思考A 問題, 到我自己突然想到不是在思考A問題時, 我最後想的議題已經離A 很遠了

但直到最近, 我老婆做了一個實驗, 讓這一切變的比較清楚, 因為我有時聊到一半, 突然失神, 所以她利用這個機會, 稍微等一下, 然後突然出聲音問我, "你現在在想什麼", 這時我會突然發現, 我的思緒停在跟上一個話題根本不相干的地方, 但有趣的發現在後面, 我並不是一下跳到那個思緒的, 當我老婆出聲中斷的瞬間, 我可以清楚的知道, 我是由話題的A事,聯想到B, 在思考B 時, 聯想到C ..就這樣快速的聯想下, 當中斷的那瞬間, 可能已經跳到G or F, 也就是短短的幾分鐘內, 我的思緒已經跳了好幾個地方了

所以這也反應出, ADD/ADHD患者, 對於聯想力的能力為什麼會這麼好, 我聽過很多ADD/ADHD 患者, 對於事件與音樂快速連結的神奇能力, 像我自己就常常聽到A電影的某句對白, 可以立即想到這一句在B電影也曾出現過, 而對於使用雙關語的使用, 也相當在行

不過到底這種異於正常人的快速跳躍式的思考, 到底是怎麼原因呢??

Calling Convention (呼叫慣例)

因為函式呼叫牽涉到參數的傳遞, 所以並不只是單純跳到那個Address執行程式碼再跳回來這麼簡單, 呼叫副程式(函式)的主程式, 需要知道怎麼填參數,副程式(函式)才能接到參數後進行處理, 再將結果, 傳給主程式, 所以這段協定, 稱之為Calling Convention(呼叫慣例)

但因為程式類型的不同(assambly, c/c++ , passcal ,fortran, vc .....), 並因為平台不同(Windows,Linux,MacOS,Unix...), 最主要的是CPU的不同(x86,PowerPC,Sparc.....), 所以這種協定就有很多方式, 此篇列出一些網路的資源


The Old New Thing 上的精彩文
1. The history of calling conventions, part 1
2. The history of calling conventions, part 2
3. The history of calling conventions, part 3
4. The history of calling conventions, part 4: ia64
5. Why do member functions need to be "static" to be used as a callback?
6. What can go wrong when you mismatch the calling convention?

Code Projects 上關於Calling Convention 的精彩文章
1. Calling DLLs in VB and C++
2. Calling Conventions Demystified



Nanyve 大大, 以Debuger 與reverse 的角度來介紹各種類型的Calling Convention, 以及其運作原理

1. Win32 Calling Conventions review


以Optimization 文章聞名的Agner FogSoftware Optimization Resource 中的第五章
Calling conventions for different C++ compilers and operating systems
裡面主要重點是比教不同C++ Compilers 的差別,資料型態,Stack當然包含了
Calling Conventions 的比較


Steve Fried 也有有分別以Assembly 與 C 的來看的介紹,

Intel x86 Function - Call convention - assembly View
Intel x86 Function - Call convention - C Programer's View

尤其assembly View 那篇, 對於參數的傳遞, 用來一個簡單圖表來表示, 相當清楚明遼

在維基百科裡,中文維基並無資料,但英文維基就有
x86 Calling Convention