博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

老王之家

博学笃志 切问近思 神闲气静 智深沉勇
  zdwang.cublog.cn

关于作者
姓名:Steven Wong
职业:SE
年龄:30
位置:SH.China 
爱好:探索未知,疯狂设计,改变世界
|| << >> ||
我的分类


AVR 汇编范例
;范例1
LSDAA: ADC   R16,R16     ;十进制数(在R16中)左移调整子程序
ADDAA: IN     R6,SREG     ;bcd码相加调整子程序,先保存相加后的
    LDI   R17,$66     ;状态the old status
    ADD   R16,R17     ;再将和预加立即数$66
    IN     R17,SREG   ;输入相加后新状态(the new status)
    OR     R6,R17     ;新旧状态相或
    SBRS   R6,0       ;相或后进位置位则跳行
    SUBI   R16,$60     ;否则减去$60(十位bcd不满足调整条件)
    SBRS   R6,5       ;半进位置位则跳行
    SUBI   R16,6     ;否则减去$06(个位bcd不满足调整条件)
    ROR   R6       ;向高位字节BCD返还进位位!
    RET
    
;范例2
  
SUDAA: BRCC   SBD1       ;bcd码减法调整子程序,差在R16中
    BRHC   SBD3     
    SUBI   R16,$66     ;进位半进位都置位,将差减去立即数$66
    SEC             ;并恢复借位C
    RET             ;ret. with seC
SBD1:   BRHC   SBD2       ;进位半进位都清位,返回
    SUBI   R16,6     ;进位清除而半进位置位,将差减去6
SBD2:   RET             ;ret. with clC
SBD3:   SUBI   R16,$60     ;进位置位而半进位清除,将差减去$60
    SEC             ;并恢复借位C
    RET             ;ret. with seC
   
;范例3
RSDAA: SBRC   R16,7     ;bcd码(在R16中)右移调整子程序
    SUBI   R16,$30     ;十位BCD最高位为1(代表8),将其变为5(否则跳行)
    SBRC   R16,3     
    SUBI   R16,3     ;个位BCD最高位为1(代表8),将其变为5(否则跳行)
    RET
   
;范例4
ADBCD4: MOV   R16,R15     ;4字节压缩bcd码相加子程序
    ADD   R16,R11     ;R12,R13,R14,R15内为被加数,R8,R9,R10,R11内为加数
    RCALL   ADDAA     ;相加后调整
    MOV   R15,R16     ;并返还调整后结果
    MOV   R16,R14
    ADC   R16,R10
    RCALL   ADDAA
    MOV   R14,R16
    MOV   R16,R13
    ADC   R16,R9
    RCALL   ADDAA
    MOV   R13,R16
    MOV   R16,R12
    ADC   R16,R8    
    RCALL   ADDAA
    MOV   R12,R16
    RET
   
;范例5
ADBCD: LDI   R16,4     ;多字节压缩bcd码相加子程序
    MOV   R7,R16     ;(r7):字节数
    CLC
ADLOP: LD     R16,-X     ;X-1指向被加数;
    LD     R6,-Y     ;Y-1指向加数
    ADC   R16,R6
    RCALL   ADDAA     ;相加后调整
    ST     X,R16     ;返还调整后结果
    DEC   R7     
    BRNE   ADLOP
    RET
   
文件:AVR 汇编百例.zip
大小:56KB
下载:下载
        

发表于: 2008-06-11,修改于: 2008-06-11 11:27,已浏览116次,有评论0条 推荐 投诉


网友评论
 发表评论