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