casl 热身 (关于链表)(转)

zy155 2003-10-10 11:56:43
链表删除
一子程序的功能是从链表中删除与指定数据具有相同值的元素
1、链表存放在以list地址开始的200个连续单元中
2、链表的各元素的构成如下图,每个链表元素占一个存储字

位 0 7 8 15
数据部 指针部
3、指针部是放置了相对与list地址的相对位移量。链表的最后元素的指针部内放置为(f、f)16
4、链表的头指针(相对位置)放置在first地址中,但若链中无元素,则first存放(00ff)16
5、要删除元素的数据部值存放在gr1的8-15位,这样传递给子程序。
6、链表中数据部具有同一值的元素不多于一个
7、若在链表找到同一值的元素,将gr3设置为0,如不存在,则将gr3设置为-1,返回主程序。


DELE START
PUSH 0,GR1
PUSH 0,GR2
SLL GR1,8
ST GR1,DATA
LEA GR1,FRST
LD GR2,FRST
CPA GR2,MSK2
D10 <1>
LD GR0,LIST,GR2
AND GR0,MSK1
CPL GR0,DATA
JZE D20
<2>
LD GR2,LIST,GR2
AND GR2,MSK2
<3>
D20 LD GR3,LIST,GR2
AND GR3,MSK2
ST GR3,WK
LD GR0,0,GR1
AND GR0,MSK1
OR GR0,WK
ST GR0,0,GR1
LEA GR3,0
<4>
D30 LEA GR3,-1
D40 POP GR2
POP GR1
DATA DS 1
WK DS 1
MSK1 DC #FF00
MSK2 DC #00FF
FRST DS 1
LIST DS 200
END
...全文
50 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
y2b 2003-10-11
  • 打赏
  • 举报
回复
楼上的
and gr2,msk2这个操作已经改变符号位了
jmp d10后进行判断是否链表尾
ppjob 2003-10-11
  • 打赏
  • 举报
回复
and gr2,msk2这个操作不会改变符号位的,问题还是存在的呀!
ppjob 2003-10-11
  • 打赏
  • 举报
回复
是否考虑一下《3》前还有一句
CPA GR2,MSK2
然后才是
JMP D10 呢?
ppjob 2003-10-11
  • 打赏
  • 举报
回复
我也支持这个答案,可是“链表的最后元素的指针部内放置为(f、f)16”这里是在那里考虑呢。举个例子,进入了中间段d10里面,但是查找没法到应有的数据,程序没有考虑重新跳出到d30呀???????
请各位高手帮忙解答!
wdiaide 2003-10-11
  • 打赏
  • 举报
回复
发表一下个人观点:
在1处当发现没有要删除的元素时的处理,此时自然跳到3
在2处应该是进行删除工作,也就是此时,向前移一下。
在3处为应跳到开头,再来找,
在4处也就是查完了链表时,当然是退出了,
个人答案如下:
1》
jze d30
2>
lea gr1 , list ,gr1<向后移一个数据段也就是对链表向后移后进行搜索!>
3>
jmp d10
4>
jmp d40

以上答案,均系个人观点,如有不妥,敬批评指正!
kskyshi 2003-10-11
  • 打赏
  • 举报
回复
ding
JakarLuo 2003-10-11
  • 打赏
  • 举报
回复
(1) JZE D30 //不存在,则将gr3设置为-1
(2)AND GR2,MSK1 //下一个数据的地址
(3)JMP D10
(4)JMP D40

本人愚见,请各位看看对不对?
ww51xh 2003-10-11
  • 打赏
  • 举报
回复
明天会考吗?、、
如果会的话好可得多看看啊
qqdove 2003-10-11
  • 打赏
  • 举报
回复
同意Hasudrone的看法
pjchen 2003-10-11
  • 打赏
  • 举报
回复
考试不可能这么难,这样就更加偏了。要知道是系统设计师而不是CODING
NTTTTTTTT 2003-10-11
  • 打赏
  • 举报
回复
答案是没错,但是感觉程序本身有问题
lcs560 2003-10-11
  • 打赏
  • 举报
回复
smilywind(smilywind)的答案应该是正确的.
NTTTTTTTT 2003-10-11
  • 打赏
  • 举报
回复
还有,假如即将查找到地址为LIST+0的单元,跳转到D10后会再跳到D30结束子程序,这样似乎不行吧
NTTTTTTTT 2003-10-11
  • 打赏
  • 举报
回复
回楼上的楼上的:
AND GR2,MSK2
这个操作,即使GR2的8-15位是FF,那么MSK2和XXFF相与后跳转到D10也还是会继续执行程序的呀,并不会跳到D30嘛
joflywang 2003-10-11
  • 打赏
  • 举报
回复
96年的《高程》书上有介绍。
关键是(2)不好填,要头脑清醒才能得出正确的答案:LEA GR1,LIST,GR2
其它的都是跳转.
zy155 2003-10-10
  • 打赏
  • 举报
回复
大家把答案贴出来看看
windlrming 2003-10-10
  • 打赏
  • 举报
回复
smilywind的答案应该是正确的
happylearn 2003-10-10
  • 打赏
  • 举报
回复
4用JMP D40好吧。
smilywind 2003-10-10
  • 打赏
  • 举报
回复
hoho
顾着研究那一段忘了删了节点后的链接问题了

那么正确答案如下
<1> jze d30
<2> lea gr1,list,gr2
<3> jmp d10
<4> jmp d40
siriushz 2003-10-10
  • 打赏
  • 举报
回复
xxxno的答案是对的,我弄错了,呵呵,不过我的解释应该是对的
加载更多回复(11)

2,947

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧