当前位置: 代码迷 >> 汇编语言 >> 一段 汇编代码 疑义?
  详细解决方案

一段 汇编代码 疑义?

热度:488   发布时间:2016-05-02 04:31:08.0
一段 汇编代码 疑问???
_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   也就是说判断是否循环完成
  相关解决方案