⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 paulmon1.asm

📁 MCS51系列单片机的汇编器
💻 ASM
📖 第 1 页 / 共 4 页
字号:
        JZ      PSTR2        mov     c,acc.7        anl     a,#01111111b        jnb     ti,*            ;wait for last character to finish sending        mov     sbuf,a        clr     ti        Jc      pstr2        inc     dptr        SJMP    PSTR1                                          PSTR2:  POP     ACC        RET    pstr3:  clr     ri        mov     a,sbuf        cjne    a,#27,pstr1        mov     a,#13        acall   cout        sjmp    pstr2disasm:    ;prints out instruction @dptr, and advances dptr        acall   phex16        ;they'd like to know the address...        clr     a        movc    a,@a+dptr        inc     dptr        mov     r3,a        push    dph        push    dpl        mov     dptr,#mnot    ;mnot=mnunonic offset table        movc    a,@a+dptr        mov     r2,a        mov     a,r3        mov     dptr,#opot    ;opot=operand offset table        movc    a,@a+dptr        mov     r6,a              ;these 2 tables are a bitch to enter!!!        anl     a,#11111100b        rr      a        rr      a        mov     r7,a        mov     a,r6        anl     a,#00000011b        pop     dpl        pop     dph        mov     r6,a        dec     a        jz      disasm1        push    acc        clr     a        movc    a,@a+dptr       ;fetch 2nd byte (if nec)        inc     dptr        mov     r4,a        pop     acc        dec     a        jz      disasm1        clr     a        movc    a,@a+dptr       ;fetch 3rd byte (if nec)        inc     dptr          mov     r5,adisasm1:acall   disasm4         ;prints the bytes+spaces        push    dpl        push    dph        mov     dptr,#mnu_tbl   ;mnu_tlb: table with actual text...        acall   disasm5         ;prints the mnenonic+spaces        mov     a,r7        mov     r0,a        pop     acc        pop     b        push    b        push    acc        mov     r6,a      ;(high) in case of ajmp or acall or rel        mov     a,b        mov     r7,a      ;(low)        mov     a,r0        dec     a        clr     c        rlc     a        mov     b,#dasm2 & 0xff  ;(low)        push    b        mov     b,#dasm2 / 256    ;(high)        push    b        mov     dptr,#oprt      ;oprt=operand routine table        jmp     @a+dptrdasm2:  pop     dph        pop     dpl        acall   newline        retdisasm4:mov     a,#':'       ;print bytes and some punctuation        acall   cout        acall   space        mov     a,r3        acall   phex        acall   space        cjne    r6,#1,dis4a        mov     r1,#11        sjmp    dis4cdis4a:  mov     a,r4        acall   phex        acall   space        cjne    r6,#2,dis4b        mov     r1,#8        sjmp    dis4cdis4b:  mov     a,r5        acall   phex        mov     r1,#6dis4c:  acall   space        djnz    r1,dis4c        retdisasm5:mov     r0,#7+1         ;prints the mnunonic+spacesdis5a:  mov     a,r2        MOVC    A,@A+DPTR        INC     r2        dec     r0        mov     c,acc.7        anl     a,#01111111b        acall   cout        Jc      dis5b        SJMP    dis5adis5b:  acall   space        djnz    r0,dis5b        RET;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;;       2k page boundry must exist between these dividers             ;;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;           prompt1:.db     ">Loc=",0prompt2:.db     ": (Version 1.0) Command>",0prompt3:.db     "Location (",0prompt4:.db     "=Default): ",0prompt5:.db     "New memory pointer location: ",0prompt6:.db     "\rS=Single Step, N=Normal (default), ?=Help >",0prompt7:.db     "Press any key: ",0prompt8:.db     "\r\rRun from memory loaction (",0prompt9:.db     "\r\rInterrupt priority> "        .db     "L=Low, H=High (default): ",0 prompt10:.db    ")  New Value: ",0abort:  .db     "  Command Aborted!\r",0;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;;       2k page boundry must exist between these dividers             ;;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-;oprt:   ajmp   opcd1           ;addr11        ajmp   opcd2           ;A,Rn        ajmp   opcd3           ;A,direct        ajmp   opcd4           ;A,@Ri        ajmp   opcd5           ;A,#data        ajmp   opcd6           ;direct,A        ajmp   opcd7           ;direct,#data        ajmp   opcd8           ;C,bit        ajmp   opcd9           ;C,/bit        ajmp   opcd10          ;A,direct,rel        ajmp   opcd11          ;A,#data,rel        ajmp   opcd12          ;Rn,#data,rel        ajmp   opcd13          ;@Ri,#data,rel        ajmp   opcd14          ;A        ajmp   opcd15          ;C        ajmp   opcd16          ;bit        ajmp   opcd17          ;direct        ajmp   opcd18          ;@Ri        ajmp   opcd19          ;AB        ajmp   opcd20          ;Rn,rel        ajmp   opcd21          ;direct,rel        ajmp   opcd22          ;Rn        ajmp   opcd23          ;DPTR        ajmp   opcd24          ;bit,rel        ajmp   opcd25          ;rel        ajmp   opcd26          ;@A+DPTR        ajmp   opcd27          ;addr16        ajmp   opcd28          ;Rn,A        ajmp   opcd29          ;Rn,direct        ajmp   opcd30          ;Rn,#data        ajmp   opcd31          ;direct,Rn        ajmp   opcd32          ;direct,direct        ajmp   opcd33          ;direct,@Ri        ajmp   opcd34          ;@Ri,A        ajmp   opcd35          ;@Ri,direct        ajmp   opcd36          ;@Ri,#data        ajmp   opcd37          ;bit,C        ajmp   opcd38          ;DPTR,#data16        ajmp   opcd39          ;A,@A+DPTR        ajmp   opcd40          ;A,@A+PC        ajmp   opcd41          ;A,@DPTR        ajmp   opcd42          ;@DPTR,A        ajmp   opcd43          ; <nothing>p_reg_n:mov     a,#'R'        lcall   cout        mov     a,r3        anl     a,#00000111b        lcall   phex1        retp_reg_i:mov     a,#'@'        lcall   cout        mov     a,#'R'        lcall   cout        mov     a,r3        anl     a,#00000001b        lcall   phex1        retpdirect:        mov     a,r4        jb      acc.7,pdir1pdir0:  mov     a,r4        lcall   phex        retpdir1:  mov     dptr,#sfrmnupdir2:  clr     a        movc    a,@a+dptr        inc     dptr        jz      pdir0        mov     r0,a        clr     c        subb    a,r4        jnz     pdir3        lcall   pstr        retpdir3:  clr     a        movc    a,@a+dptr        inc     dptr        jnb     acc.7,pdir3        sjmp    pdir2                pbit:         mov     a,r4        anl     a,#01111000b        rl      a        swap    a        mov     r0,a        mov     a,r4        anl     a,#10000000b        jz      pbit1        mov     dptr,#bitptr        ;it's a Special Function Reg.        mov     a,r0        movc    a,@a+dptr        mov     dptr,#bitmnu        addc    a,dpl        mov     dpl,a        jnc     pbit0        inc     dphpbit0:  lcall   pstr        sjmp    pbit2pbit1:  mov     a,r0            ;it's between 20h and 2Fh        add     a,#20h        lcall   phexpbit2:  mov     a,#'.'        lcall   cout        mov     a,r4        anl     a,#00000111b        lcall   phex1        retprel:        mov     a,r4        jb      acc.7,prel4        clr     c        addc    a,r7        mov     r7,a        jnc     prel8        inc     r6        sjmp    prel8prel4:  cpl     a        inc     a        mov     r4,a        mov     a,r7        clr     c        subb    a,r4        mov     r7,a        jnc     prel8        dec     r6prel8:  mov     a,r6        lcall   phex        mov     a,r7        lcall   phex            retopcd1:  mov     a,r6        ;addr11             done        anl     a,#11111000b        mov     r0,a        mov     a,r3        swap    a        rr      a        anl     a,#00000111b        orl     a,r0        lcall   phex        mov     a,r4        lcall   phex        ret       opcd2:                      ;A,Rn               done        acall   pac        acall   p_reg_n        retopcd3:                      ;A,direct           done        acall   pac        acall   pdirect        retopcd4:                      ;A,@Ri              done        acall   pac        acall   p_reg_i        retopcd5:                      ;A,#data            done        acall   papdata:  acall   pcomma        acall   plb        mov     a,r4        lcall   phex        retopcd6:                      ;direct,A           done        acall   pdirect        acall   pcomma        acall   pa        retopcd7:                      ;direct,#data       done        acall   pdirect        mov     a,r5        mov     r4,a        ajmp    pdataopcd8:                      ;C,bit              done        acall   prc        acall   pcomma        acall   pbit        retopcd9:                      ;C,/bit             done        acall   prc        acall   pcomma        mov     a,#'/'        lcall   cout        acall   pbit        retopcd10:                     ;A,direct,rel       done        acall   pac        acall   pdirectopcd10a:acall   pcomma        mov     a,r5        mov     r4,a        acall   prel        retopcd11:                     ;A,#data,rel        done        acall   paopcd11a:acall   pcomma        acall   plb        mov     a,r4        lcall   phex        ajmp    opcd10aopcd12:                     ;Rn,#data,rel       done        acall   p_reg_n        ajmp    opcd11aopcd13:                     ;@Ri,#data,rel      done        acall   p_reg_i        ajmp    opcd11aopcd14:                     ;A                  done        acall   pa        retopcd15:                     ;C                  done        acall   prc        retopcd16:                     ;bit                done        acall   pbit        retopcd17:                     ;direct             done        acall   pdirect        retopcd18:                     ;@Ri                done        acall   p_reg_i        retopcd19:                     ;AB                 done        acall    pa        mov     a,#'B'        lcall   cout        retopcd20:                     ;Rn,rel             done        acall   p_reg_n        acall   pcomma        acall   prel        retopcd21:                     ;direct,rel         done        acall   pdirect        ajmp    opcd10aopcd22:                     ;Rn                 done        acall   p_reg_n        retopcd23:                     ;DPTR               done        acall   pdptr        retopcd24:                     ;bit,rel            done        acall   pbit        ajmp    opcd10aopcd25:                     ;rel                done        acall   prel        retopcd26:                     ;@A+DPTR            done        acall   pat        acall   pa        mov     a,#'+'        lcall   cout        acall   pdptr        retopcd28:                     ;Rn,A               done        acall   p_reg_n        acall   pcomma        acall   pa        ret    opcd29:                     ;Rn,direct          done        acall   p_reg_n        acall   pcomma                  acall   pdirect        retopcd30:                     ;Rn,#data           done        acall   p_reg_n        ajmp    pdataopcd31:                     ;direct,Rn          done        acall   pdirect        acall   pcomma        acall   p_reg_n        retopcd32:                     ;direct,direct      done        mov     a,r4        push    acc        mov     a,r5        mov     r4,a        acall   pdirect        acall   pcomma        pop     acc        mov     r4,a        acall   pdirect        retopcd33:                     ;direct,@Ri         done        acall   pdirect        acall   pcomma        acall   p_reg_i        retopcd34:                     ;@Ri,A              done        acall   p_reg_i        acall   pcomma        acall   pa        retopcd35:                     ;@Ri,direct         done        acall   p_reg_i        acall   pcomma        acall   pdirect        retopcd36:                     ;@Ri,#data          done        acall   p_reg_i        ajmp    pdataopcd37:                     ;bit,C              done        acall   pbit        acall   pcomma        acall   prc        retopcd38:                     ;DPTR,#data16       done        acall   pdptr        acall   pcomma        acall   plbopcd27: mov     a,r4           ;addr16          done        lcall   phex        mov     a,r5        lcall   phex        retopcd39:                     ;A,@A+DPTR          done        acall   pac        acall   pat        acall   pa        mov     a,#'+'        lcall   cout        acall   pdptr        retopcd40:                     ;A,@A+PC            done        acall   pac        acall   pat        acall   pa        mov     a,#'+'        lcall   cout        mov     a,#'P'        lcall   cout        acall   prc        retopcd41:                     ;A,@DPTR            done        acall   pac        acall   pat        acall   pdptr        retopcd42:                     ;@DPTR,A            done        acall   pat        acall   pdptr        acall   pcomma        acall   paopcd43: ret                 ;<nothing>          donepat:            ;prints the '@' symbol        mov     a,#'@'        lcall   cout        retpcomma:         ;prints a comma

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -