看板 NTUE-CS102 關於我們 聯絡資訊
豆腐作業寫寫就覺得自己很弱,不過很懶得讓自己變強(被打臉 這次作業寫到現在只拿到90%,最後10%小數還是覺得花時間很懶(還是被打臉 好像沒什麼聽說作業寫不出來的 感覺只有我困擾了很長一段時間感QQQ 首先,因為很弱,所以得站在巨人的肩膀上 #1AzxvVlH (NTUE-CS100)有這學期需要的作業相關資料,與幾個重要範例 比方這次很麻煩的數值輸入,然後配合投影片chap5.chap6對於Irvine32.inc函式說明 與jmp相關範例就能做完這次作業了 -- 不過呢,我還是覺得先從組譯環境建立開始說起 如果你想照老師講義從2008開始,那就是參考這份較新的文件參考 http://kipirvine.com/asm/gettingStartedVS2008/index.htm 下載在 http://www.microsoft.com/taiwan/vstudio/aa700831.aspx 我是直接拉了2010,配合2010版本的說明去做 http://kipirvine.com/asm/gettingStartedVS2010/index.htm 下載在 http://www.microsoft.com/visualstudio/zh-tw 記得安裝時是裝 "Visual C++ Express 2008" / "Visual C++ Express 2010" 就好 底下很多設定需要設定...可以直接選擇像他前頭範例說明一樣 開啟c:\Irvine\Examples\ch03範例後,移除main.asm新增一份自己的asm進去 就不用做其他設定了 -- 直接組譯範例,或是之後自己寫的東西 組譯會有警告訊息如 'Project.exe': 已載入 'C:\WINDOWS\system32\usp10.dll',找不到或無法開啟 PDB 檔 案 這些訊息不用在意,當作是正常組譯完成就可以 PDB沒有是非常正常的 跳出CMD畫面一閃即逝,沒有"Press any key to continue . . ."停著 倒是因為Express好像不如範例會自動加上去這行 你可以在 call WriteString exit 之間補上 call WriteString call WaitMsg exit 就會正常一些了>_O -- 作業很像去年Java第二份作業 : #1Ck_oO_c (NTUE-CS102) / #1CoEFyz1 (NTUE-CS102) 這次我們少了安心的Java內建parse函式,真的要土法煉鋼刻完字元陣列轉數字 這部分已經有chchwy學長給的一組範例在 http://chchwy.blogspot.com/2008/10/masm-io-patterns.html 這裡頭有幾個小錯誤需要自己改正,特別注意是註解以;開頭,而不是// 編譯不過顯示must be in segment block的 請看清楚這份範例少了標頭、引入、程式起始結束點等等的 這個在ch03\main.asm裏頭都有,自己參考一下該擺在哪 請記得作業要求有寫到所有jmp都要註明意義,以及為了追加一個負號flag 所以還是要自己看懂這段code的喔Q 嗯...我不知道該怎樣再次講解這份code,因為註解大概說明完了 如果有問題請推文/回文明確說明一下問題,要針對某部分解釋倒是還可以 至於說小數部分,算是型別轉換後,遇到小數點後改乘0.1,後面應該沒什麼變化 : cmp我不太確定能不能正確判讀小數比較 不過我很懶(略) -- 拿完數值之後,就剩排序部分 相對於前者,後者可以說是非常簡單 這是個C++泡排code,也是我們要寫成組語的原形(?) 請不要拿g++配參數編譯到組語層就停下來,那樣應該會被打臉(?) for (int i=0;i<len-1;i++){ for (int j=i+1;j<len;j++){ if (ar[i]>ar[j]) change(ar[i],ar[j]) } } 解析一下這段要完成三項 分別是 1.巢狀迴圈 2.if判斷 3.記憶體資料交換 -- 同樣地,學長有一份巢狀/for loop的範例可以當基底修改成我們需要的樣子 這部分我是直接看for迴圈 稍作修改就變成要的雙層for迴圈了 以原型做點這樣簡單修改就會變成這樣,當然這樣改是有問題的,需要再追加一點改正 mov ecx,0 //把ecx當作計數器i _for: cmp ecx,9 jge _endfor //jump if greater & equal mov ecx,0 //把ecx當作計數器j _for2: cmp ecx,9 jge _endfor //jump if greater & equal //statement; inc ecx //ecx++ jmp _for _endfor2: inc ecx //ecx++ jmp _for _endfor: -- 做if判斷,就是ch06投影片範例p26 正確利用 mov esi,OFFSET intArray add esi,4 ; (???????) mov eax,DWORD PTR[esi] 取出值,再利用範例比較就能簡單比較出大小 cmp eax,ebx jg change jmp end change: (資料交換) end: 最後輸出的部分,則是利用for loop、既有WriteInt與WriteChar簡單就能做出輸出結果了 多個+號應該是不會怎樣啦(跑遠 -- 本命 ○楽園の巫女  博麗 霊夢 職業:博麗神社の巫女さん  Hakurei Reimu   能力:主に空を飛ぶ程度の能力 @東方project系列 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.127.47.30
pk873:人強真好 Q口Q 11/18 18:11
pk873:移除main.asm新增一份自己的asm進去 高招!!!!人強真好 11/18 18:28
這明明人家範例Q______Q而且你的程度哪裡跟我人強真好QQQ
dosomethnig:為什麼海賊王最近很拖戲.. 11/18 21:25
joe989879:樓上...我也這麼覺得... 11/18 22:06
另外補一下,作組語作業請把自己當人間編譯器 先寫出來C++/Java的code之後,逐行改成asm會比較容易代入思考 不然這語言實在寫不動 ※ 編輯: game0416 來自: 119.14.27.224 (11/18 23:44)
j2612280:鳳娘大耶_O_ 11/19 00:48
CaptainWill:先推,回宿舍再來煩惱@@ 11/19 03:01
jerry771210:有推有過 11/20 16:02
※ 編輯: game0416 來自: 119.14.27.224 (11/21 20:48)