📄 paulmon1.asm
字号:
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 + -