作者hypermind (博士倫)
看板b95902HW
標題Re: [作業] 組語 HW2
時間Mon Nov 5 04:04:55 2007
※ 引述《yungyu (cyy)》之銘言:
: We can't release the test data for grading. However, TA has sent some
: test data we used in the submission system. That should be enough for
: you to test your own program. If you still have problems, I will suggest
: that you test your program in the same way that the submission system
: tests your code
: toyasm -o < 1.asm > 1.obj
: toyasm -o < part1.asm > part1.obj
: toylink 1.obj part1.obj > part1.toy
: toyvm part1.toy < input > output
: diff output correct-answer
: ※ 引述《aliby (小青)》之銘言:
: : 想請問老師可不可以公佈part1 BCD的測資呢?
: : 因為我在toy上跑沒有問題 跟一些人討論了一些常能測出錯的測資也都ok
: : 可是上傳總是wrong answer...T.T
: : 比較奇怪的是 我上傳後他出現的clock都十分的小
: : 大概只有176 .184左右
: : 這是否代表他幾乎沒有執行我的BCD..?
: : 但我的code基本上也是符合規格
: : (一開始標籤是BCD; 最後要jr RF; BCD中也未動用RF)
: : 嗯 主要還是希望有測資 重拾一些debug的方向
: : 麻煩老師了:)
我在寫BCD的時候發現的一些錯誤可供參考
差不多是一樣得情況,上傳的前幾次都是wrong answer
所以我採用自己debug的方式
1.把toyasm.zip下載下來並解壓縮
2.將toyasm.exe跟toylink.exe複製一份到你的homework的asm檔的目錄下
3.使用命令提示字元(開始\執行\cmd)用linux的語法切換目錄到homework所在地
Ex C:\Documents and Settings\User> 輸入 cd hw2
C:\Documents and Settings\User\hw2>
4.開始類似linux的compile方法
C:\Documents and Settings\User\hw2 > toyasm -o < 1.asm > 1.obj
C:\Documents and Settings\User\hw2 > toyasm -o < 檔名.asm > 隨便.obj
C:\Documents and Settings\User\hw2 > toylink 1.obj 隨便.obj > 隨隨便便.toy
當中若有問題會出現一些訊息,沒有則皆大歡喜
5.打開X-toy 開啟 隨便取名.toy 轉到debug模式(就是電腦圖示)
6.在stdin標籤中 先輸入你即將要輸入的data個數(因為老師的1.asm是先把所有變數歸零
再讀取資料個數,然後開個迴圈跑幾次RA = stdin->BCD->stdout = RB)
7.輸入測資
Ex
0014 //20個資料 (0014)hex = (0020)dec
0000
0001
000A //別小看ABCDEF,若轉換出來有ABCDEF你就得修改
0010
0016
001A
00A0
00AA
00FF
0100
010A
01A0
0A00
0A0A
0AA0
0FFF
1000
10A0
1FFF
270F //終極測資 (270F)hex = (9999)dec -> (9999)hex = (-327...忘了)dec
8.跑跑玩具機,要Run要step來trace code皆可
其中通常會發生的錯誤是
1.資料溢位 Ex 8-bit的變數你存16-bit的甚麼東西給他 被迫中止
Ex 超過變數容納範圍 32767~-32767吧? 中指
2.變數沒定義 add R3, R4, R5 但是R5甚麼都沒有
3.變數濫用 前後變數Ex R1多重用導致資料複寫來複寫去 甚至用加的累積成不是原來的
預期目標數值
4.最難找的就是 當老師的1.asm在跑迴圈時 前後執行BCD中的變數因為濫用 所以第一個
答案正確,但是後面的狂炸,牛頭不對馬嘴。
所以正確的習慣
1.使用function前要先把local variable給歸零或lda,ld,add成你要的數
2.若不想因此影響效能,就設立專用變數,舉例規定code中R1就是個位數,R2就是百位數
等等,像無線通訊頻道專一一樣的general variable
3.測資在reset時會被刪掉,最好利用save成一個檔案
4.不斷炸掉時就要不斷修改答案,所以cmd,文字編輯器,TOY視窗通通別關,縮小就好
5.修改完答案後存檔, assemble, link(在cmd中只要上下鍵就可以挑以前的指令)
然後在TOY中Open一次繼續測試。
ps使用好的編輯器如虎添翼像是Vim,UltraEdit等等分割視窗、並排視窗就可以把asm
及自己寫的c code擺在一起相互對照 省時又省力。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.124.88.156
推 aliby:哇博倫你超有經驗的 我會再用你的測資去de看看 11/05 07:19
→ aliby:辛苦了打了這麼多字 11/05 07:21
推 yungyu:萬分感謝這位同學的經驗分享 11/05 09:13
推 waterwinds:辛苦了 推一個XD 11/06 00:08
※ 編輯: hypermind 來自: 122.124.78.95 (11/14 23:27)