2009年4月13日 星期一

ASSEMBLY LANGUAGE

進度實在緩慢
最近好不容易把編譯器挑選好...
這才能開始步入動手做階段......

在《組合語言 第五版(ASSEMBLY LANGUAGE FOR INTEL-BASED COMPUTERS FIFTH EDITION)》
作者IRVINE應是大師級的準錯不了,
但書中敘述到只適合MASM8以上的學生使用
而Irvine網站上只述及MASM上的專案操作,不過MASM真的耗能
記憶體吃緊吶......

於是尋找新方向
MASM32
似乎是Kernel.dll的shell上什麼的我不清楚
能跑是能跑但要對書中examples都有的Irvine32函式庫include作修改
這就麻煩大了,保持這種方式連上戰場都不可能!

接著遍尋解決方法,皆不得要領
後在奇蹟下又獲兩種編譯器──WinAsm, Negatory Assembly Studio
試了幾天還沒研究個結果

就在今夜!
我開了Irvine給的MASM上的project檔案,
觀察project的properties
左翻右翻,終於被我找到關鍵點:(linker的地方)
user32.lib Irvine32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
但貼到WinAsm那邊時出現Irvine32.lib不能被開啟
詳細原因我不知道
但將之去掉改成
user32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
一切暢行無阻

注意:本人只在WinAsm成功,MASM32和Studio都仍是個謎。

2009年3月6日 星期五

模指數運算的三個方法

運算型如b^n mod m的演算法 方法一: 先將n表示成二進位 接著使用同餘性質以非常不直觀的方式寫成: 方法二: 使用直觀的遞迴演算 利用b^n mod m=(b*(b^(n-1) mod m)) mod m 及初始條件b^0 mod m=1 就可簡單地作成exp_mod_rec(int,int,int); 方法三: 利用n的奇偶性的遞迴運算 個人是認為 1<=b<m 似乎不需要這個限制。 目前最大的瓶頸是複雜度的求法...... 程式實作如下