_tryl : clrl _i
jra L20
L20001 : movl _i,d0
asll #2,d0
movl #_y,a0
movl _i,d1
asll #2,d1
movl #_x,a1
movl a0@(0,d0:L),a1@(0,d1:L)
addql #1,_i
L20: moveq #50,d0
cmpl _i,d0
jgt L20001
标签为L20001 的指令开始了循环体。i被复制到寄存器d0,然后左移2位。之所以要使用移位操作,是因为它的结果和乘4是一样的,但它的速度更快。
谁能在给我解释一下,谢谢,我汇编不行。
还有求推荐一本比较好的学汇编的书籍,我感觉弄c语言,汇编也很重要。
------解决思路----------------------
_try1: clrl _i ;i的内存位置被清零
jra L20 ;跳转到L20
L20001: movl _i,d0 ;i被复制到d0
asll #2,d0 ;左移两位,(相当于乘4,即根据整型的长度作的调整)
movl #_y,a0 ;y地址复制到a0
movl _i,dl ;下面三行是对数组x做的操作,与对y做的类似
asll #2,d1
movl #_x,al
movl a0@(0,d0:L),a1@(0,d1:L) ;a0+d0所指的值复制到a1+d1
addql #1,_i ;i增1
L20: moveq #50,d0 ;如果d0不是50就 被赋值50
cmpl _i,d0 ;对比_i d0 如果_i不等d0 =50 跳转条件标志被置起
jgt L20001 ;根据上条是否置起的标志 决定是否跳转回 2001 也就是说判断是否循环完成