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
...全文
51 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)
CASL引入国内以后作为中国计算机软件专业技术资格和水平考试高级程序员级考试内容之一。使用虚拟的计算机目的为的是一个公平的考试环境,毕竟如果让每天和MC680X0打交道的朋友去和写PC驱动的朋友一起考i80X86汇编显然是不公平的。 CASL达到这一目的的同时却带来了一个麻烦:CASL程序无法在常见的PC或者其他任何计算机上运行。 我们有三条常见选择: 1)汇编器,将Casl汇编程序汇编成诸如80X86指令的程序,在PC上运行 2)解释器,解释执行每一条指令,有点像解释型高级语言,但是来的简单一些 3)忘记CASL,忘记高程考试 ;;;;-) 在选择了第二种方案以后我们开始了这个软件...... Nasl的设计主要目标便是简单易用,事实上在我能找到的所有CASL解释器中没有一个能很快上手运行起来的,当然这不包括Nasl本身。由于Comet是一个虚拟计算机,诸如复旦大学计算机科学系所设计的CASL汇编器的设计只能给使用者带来不必要的麻烦。鉴于它只能在Pure DOS下运行,Nasl诞生了,编写一个开放的人人可以得到的方便的CASL解释器是编写Nasl的初衷之一。 Nasl能对输入的CASL汇编程序解释运行,以此可以观察各个寄存器以及内存的变化情况,使得您可以熟悉CASL汇编并对汇编语言程序设计的思想有所了解,帮助通过高程考试。Nasl支持CASL汇编文件的编辑,但是请不要将它视作一个";;;开发环境";;;,CASL和Nasl都不值得您去那么做。 最后祝所有努力学习的朋友好运!

2,948

社区成员

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

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