作者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
1F:推 aliby:哇博伦你超有经验的 我会再用你的测资去de看看 11/05 07:19
2F:→ aliby:辛苦了打了这麽多字 11/05 07:21
3F:推 yungyu:万分感谢这位同学的经验分享 11/05 09:13
4F:推 waterwinds:辛苦了 推一个XD 11/06 00:08
※ 编辑: hypermind 来自: 122.124.78.95 (11/14 23:27)