-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMSAVT.ASM
154 lines (136 loc) · 2.4 KB
/
MSAVT.ASM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
;MSAVT.ASM: ¥§¨¤¥âë© (¤¥)è¨äà â®à á ¯¥à¥®á®¬ ª®¤ ¢ PSP
;१¨¤¥â: 288 ¡ ©â (MSDOS 7.1), 272 ¡ ©â (TOSHIBA DOS 5.0)
;¡¥§ ¯¥à¥®á § ¨¬ « 416 :)
;‚¥è ¥âáï ¯à¥àë¢ ¨¥ 21h
;AX=0DEAFh - ¤¥ª®¤¨à®¢ âì
;AX=0BEEFh - ª®¤¨à®¢ âì
;AX=0FACEh - ஢¥àª ãáâ ®¢ªã. ‚®§¢à é ¥â 2002, ¥á«¨ ãáâ ®¢«¥
;ˆá¯®«ì§ã¥âáï ¤®à ¡®â ë© «£®à¨â¬ è¨ä஢ ¨ï ‹ìî¨á Ší஫« , ¯®á«¥ í⮣®
;áç¨â ¥âáï ª®â஫ì ï á㬬 ¨ १ã«ìâ â XOR¨âáï ª®â஫쮩 á㬬®©.
;(„¥)ª®¤¨àã¥â ¡«®ª ¬¨ ¯® CX ¡ ©â.
.model tiny
.code
org 2ch
envseg dw ?
org 100h
start:
jmp init
new_int21h proc far
;ax=0DEAFh - decode
;ax=0BEEFh - encode
;si - @buffer
;dx - @keyword
;di-@2nd buffer;
;bx-length_of_keyword
pushf
cmp ax,0DEAFh
je @@decode
cmp ax,0BEEFh
je @@encode
cmp ax,0FACEh
je @@ident
jmp short @@99
@@decode:
push cx
push bp
dec bx
push bx
mov bp,sp
xor ax,ax
mov cx,4
@@d05: mov bx,cx
dec bx
add bx,dx
add al,byte ptr [bx]
loop @@d05
push ax
xor bx,bx
mov cx,[bp+4]
@@d10: lodsb
xor al,byte ptr [bp-2]
push bx
add bx,dx
mov ah,byte ptr [bx]
sub al,ah
inc ax
stosb
pop bx
inc bx ;<<<
cmp bx,word ptr [bp]
jbe @@d15
xor bx,bx
@@d15: loop @@d10
jmp short @@98
@@encode:
push cx
push bp
dec bx
push bx
mov bp,sp
xor ax,ax
mov cx,4
@@05: mov bx,cx
dec bx
add bx,dx
add al,byte ptr [bx]
loop @@05
push ax
xor bx,bx
mov cx,[bp+4]
@@10: lodsb
push bx
add bx,dx
mov ah,byte ptr [bx]
add al,ah
dec al
xor al,byte ptr [bp-2]
stosb
pop bx
inc bx ;<<<
cmp bx,word ptr [bp]
jbe @@15
xor bx,bx
@@15: loop @@10
@@98: pop ax
pop bx
pop bp
pop cx
@@ident:
popf
mov ax,2002h
iret
@@99: popf
db 0EAh ; JMP FAR ( ç «® ª®¤ ª®¬ ¤ë ¤ «ì¥£® ¯¥à¥å®¤
old_int21h dd 0 ; áî¤ ¯à®æ¥¤ãà ¨¨æ¨ «¨§ 樨 § ¯¨è¥â ¤à¥á
; ¯à¥¤ë¤ã饣® ®¡à ¡®â稪 INT 21h
new_int21h endp
;-----------------------------------------------
t_length = $-new_int21h
init:
mov ax,0FACEh
int 21h
cmp ax,2002h
je not_install
push es
mov ax,3521h
int 21h
mov word ptr old_int21h,bx
mov word ptr old_int21h+2,es
pop es
cld
mov si,offset new_int21h
mov di,80h
mov cx,t_length
rep movsb
mov ax,2521h
mov dx,80h
int 21h
mov ah,49h
mov es,word ptr envseg
int 21h
mov dx,80h+t_length ; ¥à¢ë© ¡ ©â ¯®á«¥ ª®æ १¨¤¥â
int 27h
not_install:
ret
db 256 dup ('MSAV')
end start