?? main.bas
字號:
NonASM = NonASM + SOp + ","
Op = BD(Addr + 2).D
BD(Addr + 2).F = True
SOp = RelAddrFunc(Op) '計算rel,得到addr$
NonASM = NonASM + SOp
CP.Label = MyTab
' NonASM = "CJNE R" + n$ + ",#" + a$ + "," + Addr$
Case 192
CP.Addr = CP.Addr + 1
Op = BD(Addr + 1).D
BD(Addr + 1).F = True
SOp = MyHex(Op)
NonASM = CP.Label + "PUSH " + SOp
CP.Label = MyTab
Case 194
CP.Addr = CP.Addr + 1
Op = BD(Addr + 1).D
BD(Addr + 1).F = True
SOp = MyHex(Op)
NonASM = CP.Label + "CLR " + SOp
CP.Label = MyTab
Case 195
NonASM = CP.Label + "CLR C"
CP.Label = MyTab
Case 196
NonASM = CP.Label + "SWAP A"
CP.Label = MyTab
Case 197
CP.Addr = CP.Addr + 1
Op = BD(Addr + 1).D
BD(Addr + 1).F = True
SOp = MyHex(Op)
NonASM = CP.Label + "XCH A," + SOp
CP.Label = MyTab
Case 198
NonASM = CP.Label + "XCH A,@R0"
CP.Label = MyTab
Case 199
NonASM = CP.Label + "XCH A,@R1"
CP.Label = MyTab
Case 200 To 207
Op = Dt Mod 16
SOp = Hex(Op Mod 8)
NonASM = CP.Label + "XCH A,R" + SOp
CP.Label = MyTab
Case 208
CP.Addr = CP.Addr + 1
Op = BD(Addr + 1).D
BD(Addr + 1).F = True
SOp = MyHex(Op)
NonASM = CP.Label + "POP " + SOp
CP.Label = MyTab
Case 210
CP.Addr = CP.Addr + 1
Op = BD(Addr + 1).D
BD(Addr + 1).F = True
SOp = MyHex(Op)
NonASM = CP.Label + "SETB " + SOp
CP.Label = MyTab
Case 211
NonASM = CP.Label + "SETB C"
CP.Label = MyTab
Case 212
NonASM = CP.Label + "DA A"
CP.Label = MyTab
Case 213
CP.Addr = CP.Addr + 2
Op = BD(Addr + 1).D
BD(Addr + 1).F = True
SOp = MyHex(Op)
NonASM = CP.Label + "DJNZ " + SOp + ","
Op = BD(Addr + 2).D
BD(Addr + 2).F = True
SOp = RelAddrFunc(Op) '計算rel,得到addr$
NonASM = NonASM + SOp
CP.Label = MyTab
Case 214
NonASM = CP.Label + "XCHD A,@R0"
CP.Label = MyTab
Case 215
NonASM = CP.Label + "XCHD A,@R1"
CP.Label = MyTab
Case 216 To 223
Op = Dt Mod 16
SOp = Hex(Op Mod 8)
NonASM = CP.Label + "DJNZ R" + SOp + ","
CP.Addr = CP.Addr + 1
Op = BD(Addr + 1).D
BD(Addr + 1).F = True
SOp = RelAddrFunc(Op)
NonASM = NonASM + SOp
CP.Label = MyTab
Case 224
NonASM = CP.Label + "MOVX A,@DPTR"
CP.Label = MyTab
Case 226
NonASM = CP.Label + "MOVX A,@R0"
CP.Label = MyTab
Case 227
NonASM = CP.Label + "MOVX A,@R1"
CP.Label = MyTab
Case 228
NonASM = CP.Label + "CLR A"
CP.Label = MyTab
Case 229
CP.Addr = CP.Addr + 1
Op = BD(Addr + 1).D
BD(Addr + 1).F = True
SOp = MyHex(Op)
NonASM = CP.Label + "MOV A," + SOp
CP.Label = MyTab
Case 230
NonASM = CP.Label + "MOV A,@R0"
CP.Label = MyTab
Case 231
NonASM = CP.Label + "MOV A,@R1"
CP.Label = MyTab
Case 232 To 239
Op = Dt Mod 16
SOp = Hex(Op Mod 8)
NonASM = CP.Label + "MOV A,R" + SOp
CP.Label = MyTab
Case 240
NonASM = CP.Label + "MOVX @DPTR,A"
CP.Label = MyTab
Case 242
NonASM = CP.Label + "MOVX @R0,A"
CP.Label = MyTab
Case 243
NonASM = CP.Label + "MOVX @R1,A"
CP.Label = MyTab
Case 244
NonASM = CP.Label + "CPL A"
CP.Label = MyTab
Case 245
CP.Addr = CP.Addr + 1
Op = BD(Addr + 1).D
BD(Addr + 1).F = True
SOp = MyHex(Op)
NonASM = CP.Label + "MOV " + SOp + ",A"
CP.Label = MyTab
Case 246
NonASM = CP.Label + "MOV @R0,A"
CP.Label = MyTab
Case 247
NonASM = CP.Label + "MOV @R1,A"
CP.Label = MyTab
Case 248 To 255
Op = Dt Mod 16
SOp = Hex(Op Mod 8)
NonASM = CP.Label + "MOV R" + SOp + ",A"
CP.Label = MyTab
Case Else
NonASM = ";反匯編程序錯誤! 代碼=" + Hex(Dt) + "H?"
End Select
End Function
Public Function MyHex(ByVal D As Long) As String
MyHex = Hex(D)
UCase (MyHex)
If (Len(MyHex) Mod 2 = 1) Then MyHex = "0" + MyHex
If (Mid(MyHex, Len(MyHex))) <> "H" Then MyHex = MyHex + "H"
If (Asc(MyHex) >= Asc("A")) Then MyHex = "0" + MyHex
End Function
Public Function RelAddrFunc(ByVal D As Integer) As String
Dim T As Integer
Dim R As String
If D >= 128 Then
T = CP.Addr - 256 + D
R = Hex(T)
Else
T = CP.Addr + D
R = Hex(T)
End If
If Len(R) < 4 Then R = "0" + R
If Len(R) < 4 Then R = "0" + R
If Len(R) < 4 Then R = "0" + R
R = "L" + R
RelAddrFunc = R
'Save Port In
PUSH RelAddrFunc + ":", T
End Function
Public Sub PUSHD(ByVal Label As String, ByVal Addr As Long, ByVal Length As Long, ByVal DBW As Boolean)
DataIn(DP).Label = Label
DataIn(DP).Addr = Addr
DataIn(DP).Length = Length
DataIn(DP).DType = DBW
DP = DP + 1
End Sub
Public Sub PUSH(ByVal Label As String, ByVal Addr As Long)
'判斷重復進堆棧否?
Dim i As Long
Dim tb As Boolean
tb = True
For i = 0 To SP
If PortIn(i).Addr = Addr Then tb = False
Next i
If tb Then
PortIn(SP).Label = Label
PortIn(SP).Addr = Addr
SP = SP + 1
End If
End Sub
Public Sub POP()
CP = PortIn(SO)
SO = SO + 1
End Sub
Public Function NonDBDW(ByVal Addr As Long, ByVal Length As Long) As Boolean
Dim i, T As Long
NonDBDW = True
If BD(Addr).F Then Exit Function
If Length <= 1 Then
If CDB.DType = True Then
ASM(Addr) = CDB.Label + "DB " + MyHex(BD(Addr).D)
BD(Addr).F = True
Else
i = BD(Addr).D
i = i * 256 + BD(Addr + 1).D
ASM(Addr) = CDB.Label + "DW " + MyHex(i)
BD(Addr).F = True
BD(Addr + 1).F = True
End If
Exit Function
End If
For i = 0 To Length - 1
If CDB.DType = True Then
ASM(Addr + i) = CDB.Label + "DB " + MyHex(BD(Addr + i).D)
CDB.Label = MyTab
BD(Addr + i).F = True
Else
T = BD(Addr + 2 * i).D
T = T * 256
T = T + BD(Addr + 2 * i + 1).D
ASM(Addr + 2 * i) = CDB.Label + "DW " + MyHex(T)
CDB.Label = MyTab
BD(Addr + 2 * i).F = True
BD(Addr + 2 * i + 1).F = True
End If
Next i
End Function
Public Function StartNASM() As Boolean
Dim i, j As Long
Dim B As Boolean
For i = 0 To 65535
BD(i).F = False
Next i
'Init PortIn
SO = 0
SP = 0
'DU = 0
'DP = 0
For i = 0 To 5000
PortIn(i).Addr = -1
Next i
B = False
For i = 0 To 65535
If BD(i).D <> &HFF Then
B = True
Exit For
End If
Next i
If Not B Then
StartNASM = False
Exit Function
End If
On Error GoTo TransFail
For i = 0 To IP - 1
CP = ProIn(i)
Do While CP.Addr >= 0
j = CP.Addr
If CP.Addr >= 0 Then ASM(j) = NonASM(j)
Loop
Next i
Do While SP >= SO
i = CP.Addr
If i >= 0 Then ASM(i) = NonASM(i)
Do While CP.Addr >= 0
i = CP.Addr
If CP.Addr >= 0 Then ASM(i) = NonASM(i)
Loop
POP
Loop
For i = 0 To DP - 1
CDB = DataIn(i)
j = CDB.Addr
NonDBDW j, CDB.Length
Next i
'MsgBox "反編譯成功”"
StartNASM = True
Exit Function
TransFail:
MsgBox "反編譯失敗!"
StartNASM = False
End Function
Public Function RegMe() As Boolean
Dim Fso As New FileSystemObject
Dim hFile As TextStream
Dim T As Long
On Error GoTo GoON
Set hFile = Fso.OpenTextFile(App.Path + "\NoASM.DLL", ForReading)
Reg_code = Val(hFile.ReadLine)
CDKey = hFile.ReadLine
T = Val(hFile.ReadLine)
Num = Val(hFile.ReadLine)
hFile.Close
If (T > 10) Then
RegMe = True
Exit Function
End If
RegMe = CodeCompCDKey(Reg_code, CDKey)
If RegMe = False Then
If Num <= 0 Then
User_OK = False
Else
Num = Num - 1
Set hFile = Fso.OpenTextFile(App.Path + "\NoASM.DLL", ForWriting)
hFile.WriteLine Str(Reg_code)
hFile.WriteLine CDKey
hFile.WriteLine Str(T)
hFile.WriteLine Str(Num)
hFile.Close
End If
End If
Exit Function
GoON:
Reg_code = GetTickCount
Set hFile = Fso.CreateTextFile(App.Path + "\NoASM.DLL", True)
hFile.WriteLine (Str(Reg_code))
hFile.WriteLine (CDKey)
hFile.WriteLine ("0")
hFile.WriteLine ("1000")
hFile.Close
RegMe = False
End Function
Public Function CodeCompCDKey(ByVal Reg_code As Long, ByVal CDKey As String) As Boolean
If CDKey = CodeToCDKey(Reg_code) Then
CodeCompCDKey = True
Else
CodeCompCDKey = False
End If
End Function
Public Function CodeToCDKey(ByVal Reg_code As Long) As String
Dim S2 As String
Dim S1 As String
Dim i1, i As Integer
Dim IL As Integer
S1 = Trim(Str(Reg_code))
IL = Len(S1)
CodeToCDKey = ""
For i = IL - 1 To 1 Step -1
S2 = Mid(S1, i, 2)
i1 = Val(S2) Mod 62
CodeToCDKey = Mid(ASCode, i1 + 1, 1) + CodeToCDKey
Next i
End Function
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -