dengziqi 发表于 2012-8-1 22:18:56

摩托诺拉\飞思卡尔M68HC16单片机 汇编指令求教,这个子程序要干什么?

本帖最后由 dengziqi 于 2012-8-1 22:20 编辑

ar_0:   set 0         ;0 给标号 VAR_0B
      Pshm x,y         ; IX IY入栈
      Tsx            ;XK:IK 现在存放的是栈指针地址
      Ldab #8          ;B=00001000 累加器B 设置为8
      Tbek             ;EK扩展字段存到累加器B中 此时B存放着EK
      Clrw 4632h       ;地址为4632H 的内存空间的数据清零

      Ldab #8          ;B=00001000
      Tbek             ;EK扩展字段存到累加器B中

      Ldd #8101h       ;8101H 数据存入 D 累加器中

      Std 4630h      ;8101H 存入地址为4630H 的内存空间中地址为4630:4631
      
      Ldab #8          ;B=00001000
      Tbek             ;EK扩展字段存到累加器B中
      Ldd #1         ;D累加器为 0001H
      Std 4636h      ;D 累加器内容存入 地址为4636H 的内存空间中
      Ldab #8          ;B=00001000
      Tbek             ;EK扩展字段存到累加器B中
      Clrw 4638h       ;地址为4638H 的内存空间的数据清零
      Ldab #8          ;B=00001000
      Tbek             ;EK扩展字段存到累加器B中
      Clrw 4642h       ;地址为4642H 的内存空间的数据清零
      Clrw 4644h       ;地址为4644H 的内存空间的数据清零
      Clrw var_0,x   ;地址为X和VAR-0 的内存空间的数据清零

Loc_B688:                              ;CODE XREF:sub_B644+6A j
      Ldab #9          ;B=00001001
      Ldy #4382h       ; 4382H存入 IY 中
      Tbyk             ;累加器B的内容传递给YK
      Ldd var_0,x      ;iX给D
      Lde #30h         ;把30H放入E累加器
      Emuls            ;E*D =E : D
      Lsrd             ; 不循环右移累加器D
      Ady            ;+D=IK:YK地址指向的空间
      Ady            ;+D=IK:YK地址指向的空间
      Bcc loc_B6A2   ;BCC=0 则 执行函数 Loc_B6A2
      Aiy #1         ;1加到IY上,如溢出则KY 也+1或-1
Loc_B6A2:                     ;COED XREF:cub_B644+5A j
      Clr 1,y          ;清零         加1
      Incw var_0,x   ;内容加1,在存回原来的M HHYG地方。VAR-0,X
      Ldd var_0,x      ;内容存放到D里,   
      Cpd #19h         ;比较D 和 19H   
      Bcs loc_B688   ;BCC=1 则 执行函数 Loc_B688
      Pulm y,x         ;pulm 出栈
      Rts            ;返回入口
页: [1]
查看完整版本: 摩托诺拉\飞思卡尔M68HC16单片机 汇编指令求教,这个子程序要干什么?