目次
前
次
PIC逆アセンブル(AWK)
アマチュア無線の知人から、周波数カウンタの使い勝手が
悪いので、不要な機能を削除してほしいと依頼が来ました。
その周波数カウンタは、以下。
回路図、操作方法は公開されているので、アセンブリ言語を
解析して、どこを改定すればよいのか調べることに。
5桁の7セグメントのLEDをダイナミック点灯で表示するのと
周波数を測定するのがメインの仕事で、プログラムを吸出し
次のHEXファイルとなっているのを確認。
:10000000A1298207DD348434E934E534B43475340D
:100010007D34C434FD34F534FC343D342934AD34FE
:10002000793478345D34BC3408340034FF34F83427
:1000300028342D34F4340D3439347534E93418341B
:10004000853439341934DC341D3421348207F734D3
:10005000FB34FE34FD34FF34820700349834963488
:10006000803400340F344234403400340134863458
:10007000A034003400342734103400340034033406
:10008000E834003400340034643400340034003484
:100090000A3400340034003401343C088207B62AA4
:1000A000C12AD72ADF2AE72AEF2AFA2AFC2AFE2ABF
:1000B000002B022BB62A3C0882070D2B0E2B152B8A
:1000C000232B302B352B382B382B382B382B0D2B63
:1000D000640083168100831200346400810183165A
:1000E0002730810064002F308100831200340030FB
:1000F00086008B016400810183162B3081008312FE
:10010000630000000800C9007F390120C91B0238C4
:10011000C9000034CA007F390120CA1B0238CA0056
:100120000034CB007F390120CB1B0238CB000034D8
:10013000CC007F390120CC1B0238CC000034CD002C
:100140007F390120CD1B0238CD0000340030C900BA
:10015000CA00CB00CC00CD0000348B1383169B006B
:100160008312000883169A001C158B1355309D00CE
:10017000AA309D009C149C18BB281C1183120034CB
:10018000AF008B1383169B001C141A088312800087
:100190002F080800C020013E840AC020013E840AC6
:1001A000C020013E840AC028B001B101B201B301F0
:1001B000AC018101000000004E082620AF0049304C
:1001C0004E078400000886002F088500CF0A4F1BC9
:1001D000CE0A4F134E08043C031CCE010108B300A5
:1001E0000130AC1F0301B31B0301B2070318B10AAE
:1001F000B11B18293308AC00AE080319AD03AE03D8
:1002000064000C30FF3E031D0229000000000000C6
:10021000000000002D082E04031DDC280108B30097
:100220000130AC1F0301B31B0301B2070318B10A6D
:1002300000340008840AB0000008840AB1000008F5
:10024000840AB2000008840AB300A7014030840089
:10025000640027082C20A800A70A27082C20A90042
:10026000A70A27082C20AA00A70A27082C20AB00E1
:10027000A70A80012B08B3022A0803184429B202F6
:1002800003190310B2034529B202290803184D29A6
:10029000B10203190310B1034E29B1022808031853
:1002A0005629B00203190310B0035729B002031CEA
:1002B0005B29800A3A292B08B3072A08031C652901
:1002C000B207B20A031903146629B2072908031CEE
:1002D0006E29B107B10A031903146F29B107280861
:1002E000031C7729B007B00A031903147829B00753
:1002F000840A20302702031D28294030840080080A
:10030000031D9229840A8008031D9229840A80080B
:10031000031D8F29840A8008031D8F29840A511820
:10032000C4179329C11700088320840A00088A2073
:10033000840A00089120840A00089820840A000892
:100340009F280030831685008312850100308316B4
:10035000860083128601CE01CF011330C80014300D
:10036000832014308A2014309120143098201430C7
:100370009F20273068206130AD00A830AE00D42027
:10038000D201D401383084000030CA2055308400B6
:100390002030C020A6208316003085000030860063
:1003A0008312640020308316810083120630AD0072
:1003B0008230AE0025306820D4203030AD00D430FB
:1003C000AE00D10AD20A3208C039031D1D2AB21A62
:1003D000192A321A152AB219112A32190E2AB218FC
:1003E0000E2A32180E2A3308363C031C0E2A330814
:1003F000053C031C062AFC296D20D20AD20AD20A27
:10040000C330AD005030AE000030212A6D20D20A3A
:100410006130AD00A830AE000130212A6D200230DD
:10042000212A203068200330212A2130682004301E
:10043000212A223068200530212A23306820063006
:10044000212AD000D420551C522A5418A620330843
:100450005302AF00AF1F2E2AAF09AF0A2F080A3C84
:100460000318372A5410D2013308D300522A5418E3
:10047000432A52083C3C03184C2A0D30D200541435
:100480003308D3004E2A52080E3C03184E2AD201DC
:100490003308D300D201522A541C522A77207720E5
:1004A0007720982AD00803195C2A0310B30DB20DE7
:1004B000B10DB00DD00B552A30083104320433048D
:1004C00003199B2AB01BA62A3008B4003108B500D6
:1004D0003208B6003308B7003B08B3073A08031CDC
:1004E000762AB207B20A03190314772AB207390829
:1004F000031C7F2AB107B10A03190314802AB1072C
:100500003808031C882AB007B00A03190314892A83
:10051000B007B01F972AB009B109B209B309B30FE8
:10052000972AB20F972AB10F972AB00F972A252141
:10053000851E3A2BCB291330832013308A201330A9
:1005400091200030982013309F20982A1330832068
:1005500013308A20133091200E30982013309F20C2
:10056000CB291330AD008830AE00D428183083205A
:1005700019308A20123091201A30982013309F2091
:10058000B12A551CCD2A153083201B308A200A3011
:100590009120223098200E30BF2A2130832017303E
:1005A0008A20153091201B3098202230BF2A0A3033
:1005B00083200D308A200D3091201330BD2A1B304E
:1005C000832019308A200B3091201330BD2A1C3033
:1005D00083200E308A20163091201730BD2A1A3021
:1005E00083200A308A200B309120203098200E3052
:1005F0009F20B12A0430042B0830042B0C30042B2C
:100600001030042B1430042BAF00343084002F083A
:10061000CA20343084001921B12AC0290130D506FE
:10062000553084002030AD20B12A343084000030B1
:10063000AD20840A0130AD20840A0230AD20840A46
:100640000330AD20C029B409B509B609B709B70F01
:100650002F2BB60F2F2BB50F2F2BB40F2F2B152BA6
:10066000B401B501B601B701152B0630BC00482B0B
:100670000230362BBC011530832016308A2017300B
:1006800091201030982013309F20B122851E452BD9
:10069000D10A4D20851A482B0A30BD00851A592BE6
:1006A000B122BD0B4E2BA620B1224D20851E532B0F
:1006B0005B283C08053C0319612B031C632BBC0A17
:1006C000482BBC01482B3C080A3C03196B2B031C2C
:1006D0006E2BBC0A482B0630BC00482BBC01482BB3
:1006E000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F1A
:1006F000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F0A
:10070000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FF9
:10071000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FE9
:10072000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FD9
:10073000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FC9
:10074000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB9
:10075000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FA9
:10076000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F99
:10077000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F89
:10078000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F79
:10079000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F69
:1007A000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F59
:1007B000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F49
:1007C000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F39
:1007D000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F29
:1007E000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F19
:1007F000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F09
:10080000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FF8
:10081000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FE8
:10082000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FD8
:10083000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FC8
:10084000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB8
:10085000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FA8
:10086000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F98
:10087000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F88
:10088000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F78
:10089000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F68
:1008A000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F58
:1008B000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F48
:1008C000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F38
:1008D000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F28
:1008E000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F18
:1008F000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F08
:10090000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FF7
:10091000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FE7
:10092000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FD7
:10093000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FC7
:10094000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB7
:10095000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FA7
:10096000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F97
:10097000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F87
:10098000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F77
:10099000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F67
:1009A000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F57
:1009B000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F47
:1009C000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F37
:1009D000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F27
:1009E000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F17
:1009F000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F07
:100A0000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FF6
:100A1000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FE6
:100A2000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FD6
:100A3000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FC6
:100A4000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB6
:100A5000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FA6
:100A6000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F96
:100A7000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F86
:100A8000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F76
:100A9000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F66
:100AA000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F56
:100AB000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F46
:100AC000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F36
:100AD000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F26
:100AE000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F16
:100AF000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F06
:100B0000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FF5
:100B1000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FE5
:100B2000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FD5
:100B3000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FC5
:100B4000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB5
:100B5000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FA5
:100B6000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F95
:100B7000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F85
:100B8000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F75
:100B9000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F65
:100BA000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F55
:100BB000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F45
:100BC000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F35
:100BD000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F25
:100BE000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F15
:100BF000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F05
:100C0000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FF4
:100C1000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FE4
:100C2000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FD4
:100C3000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FC4
:100C4000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB4
:100C5000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FA4
:100C6000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F94
:100C7000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F84
:100C8000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F74
:100C9000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F64
:100CA000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F54
:100CB000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F44
:100CC000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F34
:100CD000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F24
:100CE000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F14
:100CF000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F04
:100D0000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FF3
:100D1000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FE3
:100D2000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FD3
:100D3000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FC3
:100D4000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB3
:100D5000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FA3
:100D6000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F93
:100D7000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F83
:100D8000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F73
:100D9000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F63
:100DA000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F53
:100DB000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F43
:100DC000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F33
:100DD000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F23
:100DE000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F13
:100DF000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F03
:100E0000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FF2
:100E1000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FE2
:100E2000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FD2
:100E3000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FC2
:100E4000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB2
:100E5000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FA2
:100E6000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F92
:100E7000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F82
:100E8000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F72
:100E9000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F62
:100EA000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F52
:100EB000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F42
:100EC000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F32
:100ED000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F22
:100EE000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F12
:100EF000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F02
:100F0000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FF1
:100F1000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FE1
:100F2000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FD1
:100F3000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FC1
:100F4000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB1
:100F5000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FA1
:100F6000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F91
:100F7000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F81
:100F8000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F71
:100F9000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F61
:100FA000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F51
:100FB000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F41
:100FC000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F31
:100FD000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F21
:100FE000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F11
:100FF000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F01
:10400000AA2A020003000400FF3FFF3F6810063F9A
:10401000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB0
:10420000FC007F007700FE0000000600F10058006F
:1042100000003D0005001800000040000000000004
:1042200000004300A600D3000000A3004400E0000B
:10423000FF00FF00FF00FF00FF00FF00FF00FF0086
:104240000000FF00FF00FF00FF00FF00FF00FF0075
:10425000FF00FF00FF00FF00FF00FF00FF00FF0066
:10426000FF00FF00FF00FF00FF00FF00FF00FF0056
:10427000FF00FF00FF00FF00FF00FF00FF00FF0046
:10428000FF00FF00FF00FF00FF00FF00FF00FF0036
:10429000FF00FF00FF00FF00FF00FF00FF00FF0026
:1042A000FF00FF00FF00FF00FF00FF00FF00FF0016
:1042B000FF00FF00FF00FF00FF00FF00FF00FF0006
:1042C000FF00FF00FF00FF00FF00FF00FF00FF00F6
:1042D000FF00FF00FF00FF00FF00FF00FF00FF00E6
:1042E000FF00FF00FF00FF00FF00FF00FF00FF00D6
:1042F000FF00FF00FF00FF00FF00FF00FF00FF00C6
:00000001FF
利用しているPICの型番は、PIC16F628Aなので14ビットの
命令コードを持っています。
16ビット(2バイト)がリトルエンディアンの書式で
並んでいるので、上位下位が逆。16ビットで表示する
ように変換しておきます。
16ビット(16進数4けた)に変換できたなら、命令コードと
ニモニックの対応をデータシートから抜出し。
対応表から30種と少しの命令があることがわかりました。
対応表を参照しながら、AWKスクリプトを記述。
function h2b(x)
{
# default
result = "0000"
#
if ( x == "1" ) { result = "0001" }
if ( x == "2" ) { result = "0010" }
if ( x == "3" ) { result = "0011" }
if ( x == "4" ) { result = "0100" }
if ( x == "5" ) { result = "0101" }
if ( x == "6" ) { result = "0110" }
if ( x == "7" ) { result = "0111" }
if ( x == "8" ) { result = "1000" }
if ( x == "9" ) { result = "1001" }
if ( x == "A" ) { result = "1010" }
if ( x == "B" ) { result = "1011" }
if ( x == "C" ) { result = "1100" }
if ( x == "D" ) { result = "1101" }
if ( x == "E" ) { result = "1110" }
if ( x == "F" ) { result = "1111" }
return result
}
function b2h(x)
{
# default
result = "0"
#
if ( x == "0001" ) { result = "1" }
if ( x == "0010" ) { result = "2" }
if ( x == "0011" ) { result = "3" }
if ( x == "0100" ) { result = "4" }
if ( x == "0101" ) { result = "5" }
if ( x == "0110" ) { result = "6" }
if ( x == "0111" ) { result = "7" }
if ( x == "1000" ) { result = "8" }
if ( x == "1001" ) { result = "9" }
if ( x == "1010" ) { result = "A" }
if ( x == "1011" ) { result = "B" }
if ( x == "1100" ) { result = "C" }
if ( x == "1101" ) { result = "D" }
if ( x == "1110" ) { result = "E" }
if ( x == "1111" ) { result = "F" }
return result
}
{
# copy code
xcode = toupper($2)
# separate
d0 = h2b(substr(xcode,1,1))
d1 = h2b(substr(xcode,2,1))
d2 = h2b(substr(xcode,3,1))
d3 = h2b(substr(xcode,4,1))
#
xcode = d0 d1 d2 d3
opcode = d0 d1
operand = d2 d3
printf("%s => %s ",$0,$1)
# judge
if ( xcode == "0000000000000000" ) { printf("NOP") }
if ( xcode == "0000000001100100" ) { printf("CLRWDT") }
if ( xcode == "0000000000001001" ) { printf("RETFIE") }
if ( xcode == "0000000000001000" ) { printf("RETURN") }
if ( xcode == "0000000001100011" ) { printf("SLEEP") }
if ( opcode == "00000111" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("ADDWF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00000101" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("ANDWF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00000001" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
if ( substr(d2,0,1) == "1" ) {
printf("CLRF\t\t%s",xadr)
} else {
printf("CLRW")
}
}
if ( opcode == "00001001" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("COMF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00000011" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("DECF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00001011" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("DECFSZ\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00001010" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("INCF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00001111" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("INCFSZ\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00000100" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("IORWF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00001000" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("MOVF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00000000" && substr(d2,0,1) == "1" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("MOVWF\t\t%s",xadr)
}
if ( opcode == "00001101" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("RLF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00001100" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("RRF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00000010" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("SUBWF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00001110" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("SWAPF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00000110" ) {
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("XORWF\t\t%s,",xadr)
if ( substr(d2,0,1) == "1" ) {
printf("F")
} else {
printf("W")
}
}
if ( opcode == "00010000" ||
opcode == "00010001" ||
opcode == "00010010" ||
opcode == "00010011" ) {
badr = b2h("0" substr(d1,3,2) substr(d2,1,1))
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("BCF\t\t%s,%s",xadr,substr(badr,1,1))
}
if ( opcode == "00010100" ||
opcode == "00010101" ||
opcode == "00010110" ||
opcode == "00010111" ) {
badr = b2h("0" substr(d1,3,2) substr(d2,1,1))
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("BSF\t\t%s,%s",xadr,substr(badr,1,1))
}
if ( opcode == "00011000" ||
opcode == "00011001" ||
opcode == "00011010" ||
opcode == "00011011" ) {
badr = b2h("0" substr(d1,3,2) substr(d2,1,1))
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("BTFSC\t\t%s,%s",xadr,substr(badr,1,1))
}
if ( opcode == "00011100" ||
opcode == "00011101" ||
opcode == "00011110" ||
opcode == "00011111" ) {
badr = b2h("0" substr(d1,3,2) substr(d2,1,1))
adrh = "0" substr(d2,2,3)
adrl = d3
xadr = b2h(adrh) b2h(adrl)
printf("BTFSS\t\t%s,%s",xadr,substr(badr,1,1))
}
if ( opcode == "00111110" ) {
xadr = b2h(d2) b2h(d3)
printf("ADDLW\t\t%s",xadr)
}
if ( opcode == "00111001" ) {
xadr = b2h(d2) b2h(d3)
printf("ANDLW\t\t%s",xadr)
}
if ( d0 == "0010" ) {
xadr = b2h("0" substr(d1,2,3)) b2h(d2) b2h(d3)
if ( substr(d1,0,1) == "1" ) {
printf("GOTO\t\t")
} else {
printf("CALL\t\t")
}
printf("$%s",xadr)
}
if ( opcode == "00111000" ) {
xadr = b2h(d2) b2h(d3)
printf("IORLW\t\t%s",xadr)
}
if ( opcode == "00110000" ) {
xadr = b2h(d2) b2h(d3)
printf("MOVLW\t\t%s",xadr)
}
if ( opcode == "00110100" ) {
xadr = b2h(d2) b2h(d3)
printf("RETLW\t\t%s",xadr)
}
if ( opcode == "00111100" ) {
xadr = b2h(d2) b2h(d3)
printf("SUBLW\t\t%s",xadr)
}
if ( opcode == "00111010" ) {
xadr = b2h(d2) b2h(d3)
printf("XORLW\t\t%s",xadr)
}
# new line
printf("\n")
}
このAWKスクリプトを実行して、逆アセンブルすると、次の
ようになりました。
0000 29A1 => 0000 GOTO $1A1
0001 0782 => 0001 ADDWF 02,F
0002 34DD => 0002 RETLW DD
0003 3484 => 0003 RETLW 84
0004 34E9 => 0004 RETLW E9
0005 34E5 => 0005 RETLW E5
0006 34B4 => 0006 RETLW B4
0007 3475 => 0007 RETLW 75
0008 347D => 0008 RETLW 7D
0009 34C4 => 0009 RETLW C4
000A 34FD => 000A RETLW FD
000B 34F5 => 000B RETLW F5
000C 34FC => 000C RETLW FC
000D 343D => 000D RETLW 3D
000E 3429 => 000E RETLW 29
000F 34AD => 000F RETLW AD
0010 3479 => 0010 RETLW 79
0011 3478 => 0011 RETLW 78
0012 345D => 0012 RETLW 5D
0013 34BC => 0013 RETLW BC
0014 3408 => 0014 RETLW 08
0015 3400 => 0015 RETLW 00
0016 34FF => 0016 RETLW FF
0017 34F8 => 0017 RETLW F8
0018 3428 => 0018 RETLW 28
0019 342D => 0019 RETLW 2D
001A 34F4 => 001A RETLW F4
001B 340D => 001B RETLW 0D
001C 3439 => 001C RETLW 39
001D 3475 => 001D RETLW 75
001E 34E9 => 001E RETLW E9
001F 3418 => 001F RETLW 18
0020 3485 => 0020 RETLW 85
0021 3439 => 0021 RETLW 39
0022 3419 => 0022 RETLW 19
0023 34DC => 0023 RETLW DC
0024 341D => 0024 RETLW 1D
0025 3421 => 0025 RETLW 21
0026 0782 => 0026 ADDWF 02,F
0027 34F7 => 0027 RETLW F7
0028 34FB => 0028 RETLW FB
0029 34FE => 0029 RETLW FE
002A 34FD => 002A RETLW FD
002B 34FF => 002B RETLW FF
002C 0782 => 002C ADDWF 02,F
002D 3400 => 002D RETLW 00
002E 3498 => 002E RETLW 98
002F 3496 => 002F RETLW 96
0030 3480 => 0030 RETLW 80
0031 3400 => 0031 RETLW 00
0032 340F => 0032 RETLW 0F
0033 3442 => 0033 RETLW 42
0034 3440 => 0034 RETLW 40
0035 3400 => 0035 RETLW 00
0036 3401 => 0036 RETLW 01
0037 3486 => 0037 RETLW 86
0038 34A0 => 0038 RETLW A0
0039 3400 => 0039 RETLW 00
003A 3400 => 003A RETLW 00
003B 3427 => 003B RETLW 27
003C 3410 => 003C RETLW 10
003D 3400 => 003D RETLW 00
003E 3400 => 003E RETLW 00
003F 3403 => 003F RETLW 03
0040 34E8 => 0040 RETLW E8
0041 3400 => 0041 RETLW 00
0042 3400 => 0042 RETLW 00
0043 3400 => 0043 RETLW 00
0044 3464 => 0044 RETLW 64
0045 3400 => 0045 RETLW 00
0046 3400 => 0046 RETLW 00
0047 3400 => 0047 RETLW 00
0048 340A => 0048 RETLW 0A
0049 3400 => 0049 RETLW 00
004A 3400 => 004A RETLW 00
004B 3400 => 004B RETLW 00
004C 3401 => 004C RETLW 01
004D 083C => 004D MOVF 3C,W
004E 0782 => 004E ADDWF 02,F
004F 2AB6 => 004F GOTO $2B6
0050 2AC1 => 0050 GOTO $2C1
0051 2AD7 => 0051 GOTO $2D7
0052 2ADF => 0052 GOTO $2DF
0053 2AE7 => 0053 GOTO $2E7
0054 2AEF => 0054 GOTO $2EF
0055 2AFA => 0055 GOTO $2FA
0056 2AFC => 0056 GOTO $2FC
0057 2AFE => 0057 GOTO $2FE
0058 2B00 => 0058 GOTO $300
0059 2B02 => 0059 GOTO $302
005A 2AB6 => 005A GOTO $2B6
005B 083C => 005B MOVF 3C,W
005C 0782 => 005C ADDWF 02,F
005D 2B0D => 005D GOTO $30D
005E 2B0E => 005E GOTO $30E
005F 2B15 => 005F GOTO $315
0060 2B23 => 0060 GOTO $323
0061 2B30 => 0061 GOTO $330
0062 2B35 => 0062 GOTO $335
0063 2B38 => 0063 GOTO $338
0064 2B38 => 0064 GOTO $338
0065 2B38 => 0065 GOTO $338
0066 2B38 => 0066 GOTO $338
0067 2B0D => 0067 GOTO $30D
0068 0064 => 0068 CLRWDT
0069 1683 => 0069 BSF 03,5
006A 0081 => 006A MOVWF 01
006B 1283 => 006B BCF 03,5
006C 3400 => 006C RETLW 00
006D 0064 => 006D CLRWDT
006E 0181 => 006E CLRF 01
006F 1683 => 006F BSF 03,5
0070 3027 => 0070 MOVLW 27
0071 0081 => 0071 MOVWF 01
0072 0064 => 0072 CLRWDT
0073 302F => 0073 MOVLW 2F
0074 0081 => 0074 MOVWF 01
0075 1283 => 0075 BCF 03,5
0076 3400 => 0076 RETLW 00
0077 3000 => 0077 MOVLW 00
0078 0086 => 0078 MOVWF 06
0079 018B => 0079 CLRF 0B
007A 0064 => 007A CLRWDT
007B 0181 => 007B CLRF 01
007C 1683 => 007C BSF 03,5
007D 302B => 007D MOVLW 2B
007E 0081 => 007E MOVWF 01
007F 1283 => 007F BCF 03,5
0080 0063 => 0080 SLEEP
0081 0000 => 0081 NOP
0082 0008 => 0082 RETURN
0083 00C9 => 0083 MOVWF 49
0084 397F => 0084 ANDLW 7F
0085 2001 => 0085 CALL $001
0086 1BC9 => 0086 BTFSC 49,7
0087 3802 => 0087 IORLW 02
0088 00C9 => 0088 MOVWF 49
0089 3400 => 0089 RETLW 00
008A 00CA => 008A MOVWF 4A
008B 397F => 008B ANDLW 7F
008C 2001 => 008C CALL $001
008D 1BCA => 008D BTFSC 4A,7
008E 3802 => 008E IORLW 02
008F 00CA => 008F MOVWF 4A
0090 3400 => 0090 RETLW 00
0091 00CB => 0091 MOVWF 4B
0092 397F => 0092 ANDLW 7F
0093 2001 => 0093 CALL $001
0094 1BCB => 0094 BTFSC 4B,7
0095 3802 => 0095 IORLW 02
0096 00CB => 0096 MOVWF 4B
0097 3400 => 0097 RETLW 00
0098 00CC => 0098 MOVWF 4C
0099 397F => 0099 ANDLW 7F
009A 2001 => 009A CALL $001
009B 1BCC => 009B BTFSC 4C,7
009C 3802 => 009C IORLW 02
009D 00CC => 009D MOVWF 4C
009E 3400 => 009E RETLW 00
009F 00CD => 009F MOVWF 4D
00A0 397F => 00A0 ANDLW 7F
00A1 2001 => 00A1 CALL $001
00A2 1BCD => 00A2 BTFSC 4D,7
00A3 3802 => 00A3 IORLW 02
00A4 00CD => 00A4 MOVWF 4D
00A5 3400 => 00A5 RETLW 00
00A6 3000 => 00A6 MOVLW 00
00A7 00C9 => 00A7 MOVWF 49
00A8 00CA => 00A8 MOVWF 4A
00A9 00CB => 00A9 MOVWF 4B
00AA 00CC => 00AA MOVWF 4C
00AB 00CD => 00AB MOVWF 4D
00AC 3400 => 00AC RETLW 00
00AD 138B => 00AD BCF 0B,7
00AE 1683 => 00AE BSF 03,5
00AF 009B => 00AF MOVWF 1B
00B0 1283 => 00B0 BCF 03,5
00B1 0800 => 00B1 MOVF 00,W
00B2 1683 => 00B2 BSF 03,5
00B3 009A => 00B3 MOVWF 1A
00B4 151C => 00B4 BSF 1C,2
00B5 138B => 00B5 BCF 0B,7
00B6 3055 => 00B6 MOVLW 55
00B7 009D => 00B7 MOVWF 1D
00B8 30AA => 00B8 MOVLW AA
00B9 009D => 00B9 MOVWF 1D
00BA 149C => 00BA BSF 1C,1
00BB 189C => 00BB BTFSC 1C,1
00BC 28BB => 00BC GOTO $0BB
00BD 111C => 00BD BCF 1C,2
00BE 1283 => 00BE BCF 03,5
00BF 3400 => 00BF RETLW 00
00C0 00AF => 00C0 MOVWF 2F
00C1 138B => 00C1 BCF 0B,7
00C2 1683 => 00C2 BSF 03,5
00C3 009B => 00C3 MOVWF 1B
00C4 141C => 00C4 BSF 1C,0
00C5 081A => 00C5 MOVF 1A,W
00C6 1283 => 00C6 BCF 03,5
00C7 0080 => 00C7 MOVWF 00
00C8 082F => 00C8 MOVF 2F,W
00C9 0008 => 00C9 RETURN
00CA 20C0 => 00CA CALL $0C0
00CB 3E01 => 00CB ADDLW 01
00CC 0A84 => 00CC INCF 04,F
00CD 20C0 => 00CD CALL $0C0
00CE 3E01 => 00CE ADDLW 01
00CF 0A84 => 00CF INCF 04,F
00D0 20C0 => 00D0 CALL $0C0
00D1 3E01 => 00D1 ADDLW 01
00D2 0A84 => 00D2 INCF 04,F
00D3 28C0 => 00D3 GOTO $0C0
00D4 01B0 => 00D4 CLRF 30
00D5 01B1 => 00D5 CLRF 31
00D6 01B2 => 00D6 CLRF 32
00D7 01B3 => 00D7 CLRF 33
00D8 01AC => 00D8 CLRF 2C
00D9 0181 => 00D9 CLRF 01
00DA 0000 => 00DA NOP
00DB 0000 => 00DB NOP
00DC 084E => 00DC MOVF 4E,W
00DD 2026 => 00DD CALL $026
00DE 00AF => 00DE MOVWF 2F
00DF 3049 => 00DF MOVLW 49
00E0 074E => 00E0 ADDWF 4E,W
00E1 0084 => 00E1 MOVWF 04
00E2 0800 => 00E2 MOVF 00,W
00E3 0086 => 00E3 MOVWF 06
00E4 082F => 00E4 MOVF 2F,W
00E5 0085 => 00E5 MOVWF 05
00E6 0ACF => 00E6 INCF 4F,F
00E7 1B4F => 00E7 BTFSC 4F,6
00E8 0ACE => 00E8 INCF 4E,F
00E9 134F => 00E9 BCF 4F,6
00EA 084E => 00EA MOVF 4E,W
00EB 3C04 => 00EB SUBLW 04
00EC 1C03 => 00EC BTFSS 03,0
00ED 01CE => 00ED CLRF 4E
00EE 0801 => 00EE MOVF 01,W
00EF 00B3 => 00EF MOVWF 33
00F0 3001 => 00F0 MOVLW 01
00F1 1FAC => 00F1 BTFSS 2C,7
00F2 0103 => 00F2 CLRW
00F3 1BB3 => 00F3 BTFSC 33,7
00F4 0103 => 00F4 CLRW
00F5 07B2 => 00F5 ADDWF 32,F
00F6 1803 => 00F6 BTFSC 03,0
00F7 0AB1 => 00F7 INCF 31,F
00F8 1BB1 => 00F8 BTFSC 31,7
00F9 2918 => 00F9 GOTO $118
00FA 0833 => 00FA MOVF 33,W
00FB 00AC => 00FB MOVWF 2C
00FC 08AE => 00FC MOVF 2E,F
00FD 1903 => 00FD BTFSC 03,2
00FE 03AD => 00FE DECF 2D,F
00FF 03AE => 00FF DECF 2E,F
0100 0064 => 0100 CLRWDT
0101 300C => 0101 MOVLW 0C
0102 3EFF => 0102 ADDLW FF
0103 1D03 => 0103 BTFSS 03,2
0104 2902 => 0104 GOTO $102
0105 0000 => 0105 NOP
0106 0000 => 0106 NOP
0107 0000 => 0107 NOP
0108 0000 => 0108 NOP
0109 0000 => 0109 NOP
010A 082D => 010A MOVF 2D,W
010B 042E => 010B IORWF 2E,W
010C 1D03 => 010C BTFSS 03,2
010D 28DC => 010D GOTO $0DC
010E 0801 => 010E MOVF 01,W
010F 00B3 => 010F MOVWF 33
0110 3001 => 0110 MOVLW 01
0111 1FAC => 0111 BTFSS 2C,7
0112 0103 => 0112 CLRW
0113 1BB3 => 0113 BTFSC 33,7
0114 0103 => 0114 CLRW
0115 07B2 => 0115 ADDWF 32,F
0116 1803 => 0116 BTFSC 03,0
0117 0AB1 => 0117 INCF 31,F
0118 3400 => 0118 RETLW 00
0119 0800 => 0119 MOVF 00,W
011A 0A84 => 011A INCF 04,F
011B 00B0 => 011B MOVWF 30
011C 0800 => 011C MOVF 00,W
011D 0A84 => 011D INCF 04,F
011E 00B1 => 011E MOVWF 31
011F 0800 => 011F MOVF 00,W
0120 0A84 => 0120 INCF 04,F
0121 00B2 => 0121 MOVWF 32
0122 0800 => 0122 MOVF 00,W
0123 0A84 => 0123 INCF 04,F
0124 00B3 => 0124 MOVWF 33
0125 01A7 => 0125 CLRF 27
0126 3040 => 0126 MOVLW 40
0127 0084 => 0127 MOVWF 04
0128 0064 => 0128 CLRWDT
0129 0827 => 0129 MOVF 27,W
012A 202C => 012A CALL $02C
012B 00A8 => 012B MOVWF 28
012C 0AA7 => 012C INCF 27,F
012D 0827 => 012D MOVF 27,W
012E 202C => 012E CALL $02C
012F 00A9 => 012F MOVWF 29
0130 0AA7 => 0130 INCF 27,F
0131 0827 => 0131 MOVF 27,W
0132 202C => 0132 CALL $02C
0133 00AA => 0133 MOVWF 2A
0134 0AA7 => 0134 INCF 27,F
0135 0827 => 0135 MOVF 27,W
0136 202C => 0136 CALL $02C
0137 00AB => 0137 MOVWF 2B
0138 0AA7 => 0138 INCF 27,F
0139 0180 => 0139 CLRF 00
013A 082B => 013A MOVF 2B,W
013C 082A => 013C MOVF 2A,W
013D 1803 => 013D BTFSC 03,0
013E 2944 => 013E GOTO $144
0140 1903 => 0140 BTFSC 03,2
0141 1003 => 0141 BCF 03,0
0142 03B2 => 0142 DECF 32,F
0143 2945 => 0143 GOTO $145
0145 0829 => 0145 MOVF 29,W
0146 1803 => 0146 BTFSC 03,0
0147 294D => 0147 GOTO $14D
0149 1903 => 0149 BTFSC 03,2
014A 1003 => 014A BCF 03,0
014B 03B1 => 014B DECF 31,F
014C 294E => 014C GOTO $14E
014E 0828 => 014E MOVF 28,W
014F 1803 => 014F BTFSC 03,0
0150 2956 => 0150 GOTO $156
0152 1903 => 0152 BTFSC 03,2
0153 1003 => 0153 BCF 03,0
0154 03B0 => 0154 DECF 30,F
0155 2957 => 0155 GOTO $157
0157 1C03 => 0157 BTFSS 03,0
0158 295B => 0158 GOTO $15B
0159 0A80 => 0159 INCF 00,F
015A 293A => 015A GOTO $13A
015B 082B => 015B MOVF 2B,W
015C 07B3 => 015C ADDWF 33,F
015D 082A => 015D MOVF 2A,W
015E 1C03 => 015E BTFSS 03,0
015F 2965 => 015F GOTO $165
0160 07B2 => 0160 ADDWF 32,F
0161 0AB2 => 0161 INCF 32,F
0162 1903 => 0162 BTFSC 03,2
0163 1403 => 0163 BSF 03,0
0164 2966 => 0164 GOTO $166
0165 07B2 => 0165 ADDWF 32,F
0166 0829 => 0166 MOVF 29,W
0167 1C03 => 0167 BTFSS 03,0
0168 296E => 0168 GOTO $16E
0169 07B1 => 0169 ADDWF 31,F
016A 0AB1 => 016A INCF 31,F
016B 1903 => 016B BTFSC 03,2
016C 1403 => 016C BSF 03,0
016D 296F => 016D GOTO $16F
016E 07B1 => 016E ADDWF 31,F
016F 0828 => 016F MOVF 28,W
0170 1C03 => 0170 BTFSS 03,0
0171 2977 => 0171 GOTO $177
0172 07B0 => 0172 ADDWF 30,F
0173 0AB0 => 0173 INCF 30,F
0174 1903 => 0174 BTFSC 03,2
0175 1403 => 0175 BSF 03,0
0176 2978 => 0176 GOTO $178
0177 07B0 => 0177 ADDWF 30,F
0178 0A84 => 0178 INCF 04,F
0179 3020 => 0179 MOVLW 20
017B 1D03 => 017B BTFSS 03,2
017C 2928 => 017C GOTO $128
017D 3040 => 017D MOVLW 40
017E 0084 => 017E MOVWF 04
017F 0880 => 017F MOVF 00,F
0180 1D03 => 0180 BTFSS 03,2
0181 2992 => 0181 GOTO $192
0182 0A84 => 0182 INCF 04,F
0183 0880 => 0183 MOVF 00,F
0184 1D03 => 0184 BTFSS 03,2
0185 2992 => 0185 GOTO $192
0186 0A84 => 0186 INCF 04,F
0187 0880 => 0187 MOVF 00,F
0188 1D03 => 0188 BTFSS 03,2
0189 298F => 0189 GOTO $18F
018A 0A84 => 018A INCF 04,F
018B 0880 => 018B MOVF 00,F
018C 1D03 => 018C BTFSS 03,2
018D 298F => 018D GOTO $18F
018E 0A84 => 018E INCF 04,F
018F 1851 => 018F BTFSC 51,0
0190 17C4 => 0190 BSF 44,7
0191 2993 => 0191 GOTO $193
0192 17C1 => 0192 BSF 41,7
0193 0800 => 0193 MOVF 00,W
0194 2083 => 0194 CALL $083
0195 0A84 => 0195 INCF 04,F
0196 0800 => 0196 MOVF 00,W
0197 208A => 0197 CALL $08A
0198 0A84 => 0198 INCF 04,F
0199 0800 => 0199 MOVF 00,W
019A 2091 => 019A CALL $091
019B 0A84 => 019B INCF 04,F
019C 0800 => 019C MOVF 00,W
019D 2098 => 019D CALL $098
019E 0A84 => 019E INCF 04,F
019F 0800 => 019F MOVF 00,W
01A0 289F => 01A0 GOTO $09F
01A1 3000 => 01A1 MOVLW 00
01A2 1683 => 01A2 BSF 03,5
01A3 0085 => 01A3 MOVWF 05
01A4 1283 => 01A4 BCF 03,5
01A5 0185 => 01A5 CLRF 05
01A6 3000 => 01A6 MOVLW 00
01A7 1683 => 01A7 BSF 03,5
01A8 0086 => 01A8 MOVWF 06
01A9 1283 => 01A9 BCF 03,5
01AA 0186 => 01AA CLRF 06
01AB 01CE => 01AB CLRF 4E
01AC 01CF => 01AC CLRF 4F
01AD 3013 => 01AD MOVLW 13
01AE 00C8 => 01AE MOVWF 48
01AF 3014 => 01AF MOVLW 14
01B0 2083 => 01B0 CALL $083
01B1 3014 => 01B1 MOVLW 14
01B2 208A => 01B2 CALL $08A
01B3 3014 => 01B3 MOVLW 14
01B4 2091 => 01B4 CALL $091
01B5 3014 => 01B5 MOVLW 14
01B6 2098 => 01B6 CALL $098
01B7 3014 => 01B7 MOVLW 14
01B8 209F => 01B8 CALL $09F
01B9 3027 => 01B9 MOVLW 27
01BA 2068 => 01BA CALL $068
01BB 3061 => 01BB MOVLW 61
01BC 00AD => 01BC MOVWF 2D
01BD 30A8 => 01BD MOVLW A8
01BE 00AE => 01BE MOVWF 2E
01BF 20D4 => 01BF CALL $0D4
01C0 01D2 => 01C0 CLRF 52
01C1 01D4 => 01C1 CLRF 54
01C2 3038 => 01C2 MOVLW 38
01C3 0084 => 01C3 MOVWF 04
01C4 3000 => 01C4 MOVLW 00
01C5 20CA => 01C5 CALL $0CA
01C6 3055 => 01C6 MOVLW 55
01C7 0084 => 01C7 MOVWF 04
01C8 3020 => 01C8 MOVLW 20
01C9 20C0 => 01C9 CALL $0C0
01CA 20A6 => 01CA CALL $0A6
01CB 1683 => 01CB BSF 03,5
01CC 3000 => 01CC MOVLW 00
01CD 0085 => 01CD MOVWF 05
01CE 3000 => 01CE MOVLW 00
01CF 0086 => 01CF MOVWF 06
01D0 1283 => 01D0 BCF 03,5
01D1 0064 => 01D1 CLRWDT
01D2 3020 => 01D2 MOVLW 20
01D3 1683 => 01D3 BSF 03,5
01D4 0081 => 01D4 MOVWF 01
01D5 1283 => 01D5 BCF 03,5
01D6 3006 => 01D6 MOVLW 06
01D7 00AD => 01D7 MOVWF 2D
01D8 3082 => 01D8 MOVLW 82
01D9 00AE => 01D9 MOVWF 2E
01DA 3025 => 01DA MOVLW 25
01DB 2068 => 01DB CALL $068
01DC 20D4 => 01DC CALL $0D4
01DD 3030 => 01DD MOVLW 30
01DE 00AD => 01DE MOVWF 2D
01DF 30D4 => 01DF MOVLW D4
01E0 00AE => 01E0 MOVWF 2E
01E1 0AD1 => 01E1 INCF 51,F
01E2 0AD2 => 01E2 INCF 52,F
01E3 0832 => 01E3 MOVF 32,W
01E4 39C0 => 01E4 ANDLW C0
01E5 1D03 => 01E5 BTFSS 03,2
01E6 2A1D => 01E6 GOTO $21D
01E7 1AB2 => 01E7 BTFSC 32,5
01E8 2A19 => 01E8 GOTO $219
01E9 1A32 => 01E9 BTFSC 32,4
01EA 2A15 => 01EA GOTO $215
01EB 19B2 => 01EB BTFSC 32,3
01EC 2A11 => 01EC GOTO $211
01ED 1932 => 01ED BTFSC 32,2
01EE 2A0E => 01EE GOTO $20E
01EF 18B2 => 01EF BTFSC 32,1
01F0 2A0E => 01F0 GOTO $20E
01F1 1832 => 01F1 BTFSC 32,0
01F2 2A0E => 01F2 GOTO $20E
01F3 0833 => 01F3 MOVF 33,W
01F4 3C36 => 01F4 SUBLW 36
01F5 1C03 => 01F5 BTFSS 03,0
01F6 2A0E => 01F6 GOTO $20E
01F7 0833 => 01F7 MOVF 33,W
01F8 3C05 => 01F8 SUBLW 05
01F9 1C03 => 01F9 BTFSS 03,0
01FA 2A06 => 01FA GOTO $206
01FB 29FC => 01FB GOTO $1FC
01FC 206D => 01FC CALL $06D
01FD 0AD2 => 01FD INCF 52,F
01FE 0AD2 => 01FE INCF 52,F
01FF 0AD2 => 01FF INCF 52,F
0200 30C3 => 0200 MOVLW C3
0201 00AD => 0201 MOVWF 2D
0202 3050 => 0202 MOVLW 50
0203 00AE => 0203 MOVWF 2E
0204 3000 => 0204 MOVLW 00
0205 2A21 => 0205 GOTO $221
0206 206D => 0206 CALL $06D
0207 0AD2 => 0207 INCF 52,F
0208 3061 => 0208 MOVLW 61
0209 00AD => 0209 MOVWF 2D
020A 30A8 => 020A MOVLW A8
020B 00AE => 020B MOVWF 2E
020C 3001 => 020C MOVLW 01
020D 2A21 => 020D GOTO $221
020E 206D => 020E CALL $06D
020F 3002 => 020F MOVLW 02
0210 2A21 => 0210 GOTO $221
0211 3020 => 0211 MOVLW 20
0212 2068 => 0212 CALL $068
0213 3003 => 0213 MOVLW 03
0214 2A21 => 0214 GOTO $221
0215 3021 => 0215 MOVLW 21
0216 2068 => 0216 CALL $068
0217 3004 => 0217 MOVLW 04
0218 2A21 => 0218 GOTO $221
0219 3022 => 0219 MOVLW 22
021A 2068 => 021A CALL $068
021B 3005 => 021B MOVLW 05
021C 2A21 => 021C GOTO $221
021D 3023 => 021D MOVLW 23
021E 2068 => 021E CALL $068
021F 3006 => 021F MOVLW 06
0220 2A21 => 0220 GOTO $221
0221 00D0 => 0221 MOVWF 50
0222 20D4 => 0222 CALL $0D4
0223 1C55 => 0223 BTFSS 55,0
0224 2A52 => 0224 GOTO $252
0225 1854 => 0225 BTFSC 54,0
0226 20A6 => 0226 CALL $0A6
0227 0833 => 0227 MOVF 33,W
0229 00AF => 0229 MOVWF 2F
022A 1FAF => 022A BTFSS 2F,7
022B 2A2E => 022B GOTO $22E
022C 09AF => 022C COMF 2F,F
022D 0AAF => 022D INCF 2F,F
022E 082F => 022E MOVF 2F,W
022F 3C0A => 022F SUBLW 0A
0230 1803 => 0230 BTFSC 03,0
0231 2A37 => 0231 GOTO $237
0232 1054 => 0232 BCF 54,0
0233 01D2 => 0233 CLRF 52
0234 0833 => 0234 MOVF 33,W
0235 00D3 => 0235 MOVWF 53
0236 2A52 => 0236 GOTO $252
0237 1854 => 0237 BTFSC 54,0
0238 2A43 => 0238 GOTO $243
0239 0852 => 0239 MOVF 52,W
023A 3C3C => 023A SUBLW 3C
023B 1803 => 023B BTFSC 03,0
023C 2A4C => 023C GOTO $24C
023D 300D => 023D MOVLW 0D
023E 00D2 => 023E MOVWF 52
023F 1454 => 023F BSF 54,0
0240 0833 => 0240 MOVF 33,W
0241 00D3 => 0241 MOVWF 53
0242 2A4E => 0242 GOTO $24E
0243 0852 => 0243 MOVF 52,W
0244 3C0E => 0244 SUBLW 0E
0245 1803 => 0245 BTFSC 03,0
0246 2A4E => 0246 GOTO $24E
0247 01D2 => 0247 CLRF 52
0248 0833 => 0248 MOVF 33,W
0249 00D3 => 0249 MOVWF 53
024A 01D2 => 024A CLRF 52
024B 2A52 => 024B GOTO $252
024C 1C54 => 024C BTFSS 54,0
024D 2A52 => 024D GOTO $252
024E 2077 => 024E CALL $077
024F 2077 => 024F CALL $077
0250 2077 => 0250 CALL $077
0251 2A98 => 0251 GOTO $298
0252 08D0 => 0252 MOVF 50,F
0253 1903 => 0253 BTFSC 03,2
0254 2A5C => 0254 GOTO $25C
0255 1003 => 0255 BCF 03,0
0256 0DB3 => 0256 RLF 33,F
0257 0DB2 => 0257 RLF 32,F
0258 0DB1 => 0258 RLF 31,F
0259 0DB0 => 0259 RLF 30,F
025A 0BD0 => 025A DECFSZ 50,F
025B 2A55 => 025B GOTO $255
025C 0830 => 025C MOVF 30,W
025D 0431 => 025D IORWF 31,W
025E 0432 => 025E IORWF 32,W
025F 0433 => 025F IORWF 33,W
0260 1903 => 0260 BTFSC 03,2
0261 2A9B => 0261 GOTO $29B
0262 1BB0 => 0262 BTFSC 30,7
0263 2AA6 => 0263 GOTO $2A6
0264 0830 => 0264 MOVF 30,W
0265 00B4 => 0265 MOVWF 34
0266 0831 => 0266 MOVF 31,W
0267 00B5 => 0267 MOVWF 35
0268 0832 => 0268 MOVF 32,W
0269 00B6 => 0269 MOVWF 36
026A 0833 => 026A MOVF 33,W
026B 00B7 => 026B MOVWF 37
026C 083B => 026C MOVF 3B,W
026D 07B3 => 026D ADDWF 33,F
026E 083A => 026E MOVF 3A,W
026F 1C03 => 026F BTFSS 03,0
0270 2A76 => 0270 GOTO $276
0271 07B2 => 0271 ADDWF 32,F
0272 0AB2 => 0272 INCF 32,F
0273 1903 => 0273 BTFSC 03,2
0274 1403 => 0274 BSF 03,0
0275 2A77 => 0275 GOTO $277
0276 07B2 => 0276 ADDWF 32,F
0277 0839 => 0277 MOVF 39,W
0278 1C03 => 0278 BTFSS 03,0
0279 2A7F => 0279 GOTO $27F
027A 07B1 => 027A ADDWF 31,F
027B 0AB1 => 027B INCF 31,F
027C 1903 => 027C BTFSC 03,2
027D 1403 => 027D BSF 03,0
027E 2A80 => 027E GOTO $280
027F 07B1 => 027F ADDWF 31,F
0280 0838 => 0280 MOVF 38,W
0281 1C03 => 0281 BTFSS 03,0
0282 2A88 => 0282 GOTO $288
0283 07B0 => 0283 ADDWF 30,F
0284 0AB0 => 0284 INCF 30,F
0285 1903 => 0285 BTFSC 03,2
0286 1403 => 0286 BSF 03,0
0287 2A89 => 0287 GOTO $289
0288 07B0 => 0288 ADDWF 30,F
0289 1FB0 => 0289 BTFSS 30,7
028A 2A97 => 028A GOTO $297
028B 09B0 => 028B COMF 30,F
028C 09B1 => 028C COMF 31,F
028D 09B2 => 028D COMF 32,F
028E 09B3 => 028E COMF 33,F
028F 0FB3 => 028F INCFSZ 33,F
0290 2A97 => 0290 GOTO $297
0291 0FB2 => 0291 INCFSZ 32,F
0292 2A97 => 0292 GOTO $297
0293 0FB1 => 0293 INCFSZ 31,F
0294 2A97 => 0294 GOTO $297
0295 0FB0 => 0295 INCFSZ 30,F
0296 2A97 => 0296 GOTO $297
0297 2125 => 0297 CALL $125
0298 1E85 => 0298 BTFSS 05,5
0299 2B3A => 0299 GOTO $33A
029A 29CB => 029A GOTO $1CB
029B 3013 => 029B MOVLW 13
029C 2083 => 029C CALL $083
029D 3013 => 029D MOVLW 13
029E 208A => 029E CALL $08A
029F 3013 => 029F MOVLW 13
02A0 2091 => 02A0 CALL $091
02A1 3000 => 02A1 MOVLW 00
02A2 2098 => 02A2 CALL $098
02A3 3013 => 02A3 MOVLW 13
02A4 209F => 02A4 CALL $09F
02A5 2A98 => 02A5 GOTO $298
02A6 3013 => 02A6 MOVLW 13
02A7 2083 => 02A7 CALL $083
02A8 3013 => 02A8 MOVLW 13
02A9 208A => 02A9 CALL $08A
02AA 3013 => 02AA MOVLW 13
02AB 2091 => 02AB CALL $091
02AC 300E => 02AC MOVLW 0E
02AD 2098 => 02AD CALL $098
02AE 3013 => 02AE MOVLW 13
02AF 209F => 02AF CALL $09F
02B0 29CB => 02B0 GOTO $1CB
02B1 3013 => 02B1 MOVLW 13
02B2 00AD => 02B2 MOVWF 2D
02B3 3088 => 02B3 MOVLW 88
02B4 00AE => 02B4 MOVWF 2E
02B5 28D4 => 02B5 GOTO $0D4
02B6 3018 => 02B6 MOVLW 18
02B7 2083 => 02B7 CALL $083
02B8 3019 => 02B8 MOVLW 19
02B9 208A => 02B9 CALL $08A
02BA 3012 => 02BA MOVLW 12
02BB 2091 => 02BB CALL $091
02BC 301A => 02BC MOVLW 1A
02BD 2098 => 02BD CALL $098
02BE 3013 => 02BE MOVLW 13
02BF 209F => 02BF CALL $09F
02C0 2AB1 => 02C0 GOTO $2B1
02C1 1C55 => 02C1 BTFSS 55,0
02C2 2ACD => 02C2 GOTO $2CD
02C3 3015 => 02C3 MOVLW 15
02C4 2083 => 02C4 CALL $083
02C5 301B => 02C5 MOVLW 1B
02C6 208A => 02C6 CALL $08A
02C7 300A => 02C7 MOVLW 0A
02C8 2091 => 02C8 CALL $091
02C9 3022 => 02C9 MOVLW 22
02CA 2098 => 02CA CALL $098
02CB 300E => 02CB MOVLW 0E
02CC 2ABF => 02CC GOTO $2BF
02CD 3021 => 02CD MOVLW 21
02CE 2083 => 02CE CALL $083
02CF 3017 => 02CF MOVLW 17
02D0 208A => 02D0 CALL $08A
02D1 3015 => 02D1 MOVLW 15
02D2 2091 => 02D2 CALL $091
02D3 301B => 02D3 MOVLW 1B
02D4 2098 => 02D4 CALL $098
02D5 3022 => 02D5 MOVLW 22
02D6 2ABF => 02D6 GOTO $2BF
02D7 300A => 02D7 MOVLW 0A
02D8 2083 => 02D8 CALL $083
02D9 300D => 02D9 MOVLW 0D
02DA 208A => 02DA CALL $08A
02DB 300D => 02DB MOVLW 0D
02DC 2091 => 02DC CALL $091
02DD 3013 => 02DD MOVLW 13
02DE 2ABD => 02DE GOTO $2BD
02DF 301B => 02DF MOVLW 1B
02E0 2083 => 02E0 CALL $083
02E1 3019 => 02E1 MOVLW 19
02E2 208A => 02E2 CALL $08A
02E3 300B => 02E3 MOVLW 0B
02E4 2091 => 02E4 CALL $091
02E5 3013 => 02E5 MOVLW 13
02E6 2ABD => 02E6 GOTO $2BD
02E7 301C => 02E7 MOVLW 1C
02E8 2083 => 02E8 CALL $083
02E9 300E => 02E9 MOVLW 0E
02EA 208A => 02EA CALL $08A
02EB 3016 => 02EB MOVLW 16
02EC 2091 => 02EC CALL $091
02ED 3017 => 02ED MOVLW 17
02EE 2ABD => 02EE GOTO $2BD
02EF 301A => 02EF MOVLW 1A
02F0 2083 => 02F0 CALL $083
02F1 300A => 02F1 MOVLW 0A
02F2 208A => 02F2 CALL $08A
02F3 300B => 02F3 MOVLW 0B
02F4 2091 => 02F4 CALL $091
02F5 3020 => 02F5 MOVLW 20
02F6 2098 => 02F6 CALL $098
02F7 300E => 02F7 MOVLW 0E
02F8 209F => 02F8 CALL $09F
02F9 2AB1 => 02F9 GOTO $2B1
02FA 3004 => 02FA MOVLW 04
02FB 2B04 => 02FB GOTO $304
02FC 3008 => 02FC MOVLW 08
02FD 2B04 => 02FD GOTO $304
02FE 300C => 02FE MOVLW 0C
02FF 2B04 => 02FF GOTO $304
0300 3010 => 0300 MOVLW 10
0301 2B04 => 0301 GOTO $304
0302 3014 => 0302 MOVLW 14
0303 2B04 => 0303 GOTO $304
0304 00AF => 0304 MOVWF 2F
0305 3034 => 0305 MOVLW 34
0306 0084 => 0306 MOVWF 04
0307 082F => 0307 MOVF 2F,W
0308 20CA => 0308 CALL $0CA
0309 3034 => 0309 MOVLW 34
030A 0084 => 030A MOVWF 04
030B 2119 => 030B CALL $119
030C 2AB1 => 030C GOTO $2B1
030D 29C0 => 030D GOTO $1C0
030E 3001 => 030E MOVLW 01
030F 06D5 => 030F XORWF 55,F
0310 3055 => 0310 MOVLW 55
0311 0084 => 0311 MOVWF 04
0312 3020 => 0312 MOVLW 20
0313 20AD => 0313 CALL $0AD
0314 2AB1 => 0314 GOTO $2B1
0315 3034 => 0315 MOVLW 34
0316 0084 => 0316 MOVWF 04
0317 3000 => 0317 MOVLW 00
0318 20AD => 0318 CALL $0AD
0319 0A84 => 0319 INCF 04,F
031A 3001 => 031A MOVLW 01
031B 20AD => 031B CALL $0AD
031C 0A84 => 031C INCF 04,F
031D 3002 => 031D MOVLW 02
031E 20AD => 031E CALL $0AD
031F 0A84 => 031F INCF 04,F
0320 3003 => 0320 MOVLW 03
0321 20AD => 0321 CALL $0AD
0322 29C0 => 0322 GOTO $1C0
0323 09B4 => 0323 COMF 34,F
0324 09B5 => 0324 COMF 35,F
0325 09B6 => 0325 COMF 36,F
0326 09B7 => 0326 COMF 37,F
0327 0FB7 => 0327 INCFSZ 37,F
0328 2B2F => 0328 GOTO $32F
0329 0FB6 => 0329 INCFSZ 36,F
032A 2B2F => 032A GOTO $32F
032B 0FB5 => 032B INCFSZ 35,F
032C 2B2F => 032C GOTO $32F
032D 0FB4 => 032D INCFSZ 34,F
032E 2B2F => 032E GOTO $32F
032F 2B15 => 032F GOTO $315
0330 01B4 => 0330 CLRF 34
0331 01B5 => 0331 CLRF 35
0332 01B6 => 0332 CLRF 36
0333 01B7 => 0333 CLRF 37
0334 2B15 => 0334 GOTO $315
0335 3006 => 0335 MOVLW 06
0336 00BC => 0336 MOVWF 3C
0337 2B48 => 0337 GOTO $348
0338 3002 => 0338 MOVLW 02
0339 2B36 => 0339 GOTO $336
033A 01BC => 033A CLRF 3C
033B 3015 => 033B MOVLW 15
033C 2083 => 033C CALL $083
033D 3016 => 033D MOVLW 16
033E 208A => 033E CALL $08A
033F 3017 => 033F MOVLW 17
0340 2091 => 0340 CALL $091
0341 3010 => 0341 MOVLW 10
0342 2098 => 0342 CALL $098
0343 3013 => 0343 MOVLW 13
0344 209F => 0344 CALL $09F
0345 22B1 => 0345 CALL $2B1
0346 1E85 => 0346 BTFSS 05,5
0347 2B45 => 0347 GOTO $345
0348 0AD1 => 0348 INCF 51,F
0349 204D => 0349 CALL $04D
034A 1A85 => 034A BTFSC 05,5
034B 2B48 => 034B GOTO $348
034C 300A => 034C MOVLW 0A
034D 00BD => 034D MOVWF 3D
034E 1A85 => 034E BTFSC 05,5
034F 2B59 => 034F GOTO $359
0350 22B1 => 0350 CALL $2B1
0351 0BBD => 0351 DECFSZ 3D,F
0352 2B4E => 0352 GOTO $34E
0353 20A6 => 0353 CALL $0A6
0354 22B1 => 0354 CALL $2B1
0355 204D => 0355 CALL $04D
0356 1E85 => 0356 BTFSS 05,5
0357 2B53 => 0357 GOTO $353
0358 285B => 0358 GOTO $05B
0359 083C => 0359 MOVF 3C,W
035A 3C05 => 035A SUBLW 05
035B 1903 => 035B BTFSC 03,2
035C 2B61 => 035C GOTO $361
035D 1C03 => 035D BTFSS 03,0
035E 2B63 => 035E GOTO $363
035F 0ABC => 035F INCF 3C,F
0360 2B48 => 0360 GOTO $348
0361 01BC => 0361 CLRF 3C
0362 2B48 => 0362 GOTO $348
0363 083C => 0363 MOVF 3C,W
0364 3C0A => 0364 SUBLW 0A
0365 1903 => 0365 BTFSC 03,2
0366 2B6B => 0366 GOTO $36B
0367 1C03 => 0367 BTFSS 03,0
0368 2B6E => 0368 GOTO $36E
0369 0ABC => 0369 INCF 3C,F
036A 2B48 => 036A GOTO $348
036B 3006 => 036B MOVLW 06
036C 00BC => 036C MOVWF 3C
036D 2B48 => 036D GOTO $348
036E 01BC => 036E CLRF 3C
036F 2B48 => 036F GOTO $348
16ビット中の14ビットの構成は4種類だけとデータシートに
謳われています。
上の変換では、SFR(Special Function Register)のアドレスや
ビット位置の情報が欠落しています。
SFRの内容は、データシートに記載されています。
情報欠落は、他のスクリプトで対応することにして
PICの逆アセンブルは完成です。
目次
前
次