程序运行后有4个错,请问该怎么改?

afjzcn 2016-05-20 01:40:21

;---------------------------------------------------------------;
;输入参数: ;
;ar0 -->指向输入缓冲起始地址的指针,也就是待交织的数据的首地址 ;
;ar1 -->指向交织表起始地址的指针 ;
;ar2 -->指向输出缓冲起始地址的指针,也就是交织完的数据的地址 ;
;ar3 -->待交织数据的长度,以比特表示 ;
;----------------------------------------------------------------
;uninter_word -->待交织的数据的长度,以字表示 ;
;inter_bit -->交织数据的比特位置 ;
;loc_bit -->待交织数据的比特位置 ;
;loc_word -->待交织数据的字的位置 ;
;---------------------------------------------------------------;
.def inter_R
inter_R: ldm ar3,a ;待交织数据的长度
sftl a,-4 ;长度/16 得到待交织数据所占的字数
stl a,uninter_word ;存储待交织数据的长度(字的个数)
stm #15,BRC ;循环的次数为 16
outstart: st #0000h,inter_bit ;字内比特起始位置为 0
inerstart: rptb i_inner-1 ;循环开始
ld *ar1,-4,a ;由交织表的数据得到此输出比特在待交织数据中的 WORD 位置
stl a,loc_word ;将此 WORD 位置保存起来
ld #15,b ;由交织表的数据得到此输出比特在待交织数据
and *ar1+,b ;中的 BIT 位置
stl b,loc_bit ;将此 BIT 位置保存起来
ld #1,a
rsbx c ;清 C
rpt loc_bit
rol a ;将 1<<loc_bit+1
ror a
stlm a,ar4 ;保存 A 中的数据
ldm ar0,b ;保存 AR0 中的数据
ldm ar0,a ;在输入缓冲区中寻找要交织的 BIT 的字的位置
add loc_word,a ;ar0+loc_word
stlm a,ar0
ldm ar4,a
and *ar0,a ;a 中的第 loc_bit 个比特就是需要交织到此比特位置的数据
stlm b,ar0
rsbx c
rpt loc_bit
ror a ;数据右移到 A 的最低位中
rol a
rsbx c
rpt inter_bit
rol a ;A<<inter_bit,inter_bit 是输出缓冲当前字中
ror a ;要处理的比特位置
ssbx c ;置 C
ld #0ffffh,16,b
or #0fffeh,b
rpt inter_bit
rol b
ror b
and *ar2,b ;清除输出缓冲此比特位置原有的数据
or a,b ;将 A 中的数据通过“或”操作写入输出 B 中
stl b,*ar2 ;将 B 中的数据写入输出缓冲区中
addm #0001h,inter_bit ;输出缓冲中待操作的比特位置加 1
nop
i_inner mar *ar2+ ;输出缓冲中待操作的字位置加 1
ld uninter_word,a
sub #1,a ;待交织数据的字的长度减 1
stl a,uninter_word
and #0ffffh,a ;判断整字的待交织数据是否交织完
bc outstart,aneq ;没有交织完则继续交织,否则去判断剩下的数据够不够一个字
ldm ar3,a ;如果待交织数据长度除以 16 所得余不为 0
and #15,a ;的话,还要继续处理最后一个字的数据
bc endprog,aeq
sub #1,a
stlm a,brc
stm #0000h,ar3
B inerstart
endprog: ret

...全文
750 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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