登录
首页 单片机论坛
回帖 发帖
正文

主题:这个程序看不懂,请教!

点击:1401 回复:4

。  这是书上的一个例题:在20H单元有两个十六进制数,试将它们分别转换成ASCII码,存入30H和31H单元。
         ORG     0030H
MAIN:  MOV    SP,#60H
         PUSH   20H         20H内容到61H吗?
         LCALL  CASC
         POP     30H
         MOV    A,20H
        SWAP   A
        PUSH    ACC
        ACALL   CASC
        POP      31H
        SJMP     $
        ORG      3000H
CASC: DEC      SP
        DEC       SP
        POP       ACC
        ANL       A,#0FH
        CJNE      A,#0AH,NEXT
NEXT: JC         XY10
         ADD     A,#37H
         SJMP    EXIT
XY10:  ADD     A,#30H
EXIT:   PUSH    ACC
          INC      SP
          INC      SP
          RET
能结合一个具体的数给讲讲,给个批注也行。谢!
06-09-22 20:45
取20的数,与f(低4位),如果是0-9,加30;如果是字母,加37.得到低位ASC放30;
取20数,交换高低,然后同样.
什么的汇编啊?是51的吗?
06-09-23 17:17
ORG     0030H
MAIN:  MOV    SP,#60H
         PUSH   20H         ;20H内容到61H.同时SP=61
         LCALL  CASC
         POP     30H        ;61H内容(即原20H里的内容)到30H。同时SP=60
         MOV    A,20H
        SWAP   A           ;ACC.3~0和ACC.7~4高低四位相互交换
        PUSH    ACC       ;ACC交换好后的数据入栈到61H
        ACALL   CASC
        POP      31H       ;刚入栈到61H内的数据(即即原ACC里的内容)输到31H里.同时SP=60
        SJMP     $
        ORG      3000H
CASC: DEC      SP          ;数据指针栈减一(若刚才栈是60H,那现在是59H)
        DEC       SP
        POP       ACC       ;同上假设,则现在58H里的数据输到A寄存器去。同时,SP=57H
        ANL       A,#0FH    
        CJNE      A,#0AH,NEXT  ;A不等于10,则转到
NEXT: JC         XY10              ;A<10,则转到XY10  处
         ADD     A,#37H           ;A ≥10则在此处进行A+#37H
         SJMP    EXIT              ;跳到EXIT处
XY10:  ADD     A,#30H          
EXIT:   PUSH    ACC
          INC      SP
          INC      SP
          RET
06-09-27 21:00
非常感谢!
06-09-27 21:39
晕,这不书上的例题吗?还看不懂,那你可的从新学习一下单片机了
06-10-05 17:38

工控新闻

更多新闻资讯