标题: 汇编语言 逐条解释指令 求助大神啊,谢了 [打印本页]

作者: c907737818    时间: 2017-3-15 19:56
标题: 汇编语言 逐条解释指令 求助大神啊,谢了
1-逐条解释指令
2-说明整个程序功能


IMG_4264.JPG (58.17 KB, 下载次数: 57)

IMG_4264.JPG

作者: angmall    时间: 2017-3-15 22:56
本帖最后由 angmall 于 2017-3-15 23:43 编辑

  1.                
  2.                 ;点亮P2口的多个LED灯闪烁
  3.         ;该程序是单片机学习中最简单最基础的,
  4.                 ;通过程序了解如何控制端口的高低电平
  5.         ORG 0000H        ;意思是该条指令从ROM的0000H单元开始存放,
  6.         LJMP MAIN         ;LJMP longjump简写
  7.         ORG 030H        ;意思是此指令从ROM的30H开始存放,该指令是为了绕开0003H,000BH,0013H,001BH.....等中断入口而设置.
  8. MAIN:                                ;主循环
  9.         MOV P2, #00H        ; P2口 赋初值

  10.         ACALL DELAY                ; 单片机ACALL是短调用子程序的意思。
  11.         MOV P2, #0FFH        ; 此方法使用bit位对单个端口赋值 换成二进制是1111 1111
  12.         ACALL DELAY
  13.         AJMP MAIN                ; 是无条件跳转指令之一,叫做绝对跳转。 AJMP的范围为正负2K单元。
  14. DELAY:                                ;   延时 523277个机器周期
  15.         MOV R5, #04H        ; 典型延时程序 523277个机器周期
  16. F3: MOV R6, #0FFH        ;
  17. F2: MOV R7, #0FFH        ;
  18. F1: DJNZ R7,F1                ; DJNZ是减一判断
  19.         DJNZ R6,F2                ;
  20.         DJNZ R5,F3                ;
  21.         RET
  22.         END
复制代码



;例如MOV指令,执行这条指令需要一个机器周期。DJNZ指令,执行这条指令需要2个机器周期。
;延时程序共有三层循环

;一层循环n:R7*2 = 255*2 = 510个机器周期  (DJNZ 2个机器周期)

;二层循环m:R6*(n+3) = 255*513 = 130815个机器周期 (DJNZ 2个机器周期 + R5赋值 1个机器周期 = 3个机器周期)

;三层循环: R5*(m+3) = 4*130818 = 523272个机器周期 (DJNZ 2个机器周期 + R6赋值 1个机器周期= 3个机器周期)

;循环外: 5个机器周期 子程序调用 2个机器周期 + 子程序返回 2个机器周期 + R7赋值 1个机器周期 = 5个机器周期

;延时总时间 = 三层循环 + 循环外 = 523272+5 = 523277个机器周期

;计算公式:延时时间=[(2*R7+3)*R6+3]*R5+5



ORG 0000H
LJMP MAIN  ;意思是该条指令从ROM的0000H单元开始存放,
ORG 0030H
MAIN:MOV .....  ;意思是此指令从ROM的30H开始存放,该指令是为了绕开0003H,000BH,0013H,001BH.....等中断入口而设置.
ORG指令属于伪指令,不控制程序执行,只是控制汇编过程,也就是说,ORG指令在汇编过程中,告诉紧随其后的指令存放的位置.所以在程序执行时,从0000H单元取出长转移指令LJMP MAIN后,自然会转移到主程序MAIN:MOV.......了.


作者: c907737818    时间: 2017-3-16 08:07
angmall 发表于 2017-3-15 22:56
;例如MOV指令,执行这条指令需要一个机器周期。DJNZ指令,执行这条指令需要2个机器周期。
;延时程序 ...

感谢大神




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1