В общем дана программа на Ассемблере, угадайте, что она делает, желательно всё сформулировать наиболее точно.
Все предположения писать в эту тему.
QUOTE
data segment
about DB '<SECRET>))','$'
kolvo DB 13,10,'how many symbol in word?> ','$'
slovo DB 13,10,'input word> ','$'
otvetok DB 13,10,'<SECRET>','$'
otvetne DB 13,10,'<SECRET>','$'
sl DW 64 dup(?)
ob DW 4 dup('j','e','n','a')
data ends
S segment STACK
DB 256 DUP(?)
s ends
text segment 'code'
assume CS:text, DS:data
begin: mov AX, data
mov DS, AX
mov DI, SP
mov DX, OFFSET about
mov AH, 09h
int 21h
restart:
mov DX, OFFSET kolvo
mov AH, 09h
int 21h
mov AL, 00
mov AH, 1
int 21h
mov AH, 30h
jmp down
plus1:
inc AH
down:
cmp AL, AH
ja plus1
mov BH,38h
cmp AH, BH
JA restart
mov AL, 30h
sub AH,AL
XCHG AH,AL
cbw
mov CX,AX
xor AX, AX
xor BX,BX
mov DX, OFFSET slovo
mov AH, 09h
int 21h
xor SI,SI
push CX
new_latter:
mov AL, 00
mov AH, 1
int 21h
mov AH,00
mov sl[SI], AX
add SI,0002h
loop new_latter
mov SI, 0000h
mov BX, sl[SI]
xor DX, DX
xor BX, BX
xor AX, AX
xor SI, SI
pop CX
push CX
mov SI, 0000h
mov DX, ob[SI]
b1:
mov BX, sl[SI]
add SI, 0002
cmp DX, BX
JE b2
;JNE b1
loop b1
cmp CX,0000h
JE exit
b2: or AX, 1000b
pop CX
push CX
mov SI,0002h
mov DX,ob[SI]
XOR SI,SI
povtorP:
mov BX, sl[SI]
add SI, 0002h
cmp DX, BX
JE b3
loop povtorP
cmp CX, 0000h
JE exit
b3: or AX, 0100b
pop CX
push CX
mov SI,0004h
mov DX,ob[SI]
XOR SI,SI
povtorP2:
mov BX, sl[SI]
add SI, 0002h
cmp DX, BX
JE b4
loop povtorP2
cmp CX, 0000h
JE exit
b4: or AX, 0010b
pop CX
push CX
mov SI,0006h
mov DX,ob[SI]
XOR SI,SI
povtorP3:
mov BX, sl[SI]
add SI, 0002h
cmp DX, BX
JE b5
loop povtorP3
cmp CX, 0000h
JE exit
b5: or AX, 0001b
cmp AX, 000Fh
JNE EXIT
mov DX, OFFSET otvetok
mov AH, 09h
int 21h
jmp ok
exit:
mov DX, OFFSET otvetne
mov AH, 09h
int 21h
ok:
mov AX, 4c00h
int 21h
text ends
end begin
about DB '<SECRET>))','$'
kolvo DB 13,10,'how many symbol in word?> ','$'
slovo DB 13,10,'input word> ','$'
otvetok DB 13,10,'<SECRET>','$'
otvetne DB 13,10,'<SECRET>','$'
sl DW 64 dup(?)
ob DW 4 dup('j','e','n','a')
data ends
S segment STACK
DB 256 DUP(?)
s ends
text segment 'code'
assume CS:text, DS:data
begin: mov AX, data
mov DS, AX
mov DI, SP
mov DX, OFFSET about
mov AH, 09h
int 21h
restart:
mov DX, OFFSET kolvo
mov AH, 09h
int 21h
mov AL, 00
mov AH, 1
int 21h
mov AH, 30h
jmp down
plus1:
inc AH
down:
cmp AL, AH
ja plus1
mov BH,38h
cmp AH, BH
JA restart
mov AL, 30h
sub AH,AL
XCHG AH,AL
cbw
mov CX,AX
xor AX, AX
xor BX,BX
mov DX, OFFSET slovo
mov AH, 09h
int 21h
xor SI,SI
push CX
new_latter:
mov AL, 00
mov AH, 1
int 21h
mov AH,00
mov sl[SI], AX
add SI,0002h
loop new_latter
mov SI, 0000h
mov BX, sl[SI]
xor DX, DX
xor BX, BX
xor AX, AX
xor SI, SI
pop CX
push CX
mov SI, 0000h
mov DX, ob[SI]
b1:
mov BX, sl[SI]
add SI, 0002
cmp DX, BX
JE b2
;JNE b1
loop b1
cmp CX,0000h
JE exit
b2: or AX, 1000b
pop CX
push CX
mov SI,0002h
mov DX,ob[SI]
XOR SI,SI
povtorP:
mov BX, sl[SI]
add SI, 0002h
cmp DX, BX
JE b3
loop povtorP
cmp CX, 0000h
JE exit
b3: or AX, 0100b
pop CX
push CX
mov SI,0004h
mov DX,ob[SI]
XOR SI,SI
povtorP2:
mov BX, sl[SI]
add SI, 0002h
cmp DX, BX
JE b4
loop povtorP2
cmp CX, 0000h
JE exit
b4: or AX, 0010b
pop CX
push CX
mov SI,0006h
mov DX,ob[SI]
XOR SI,SI
povtorP3:
mov BX, sl[SI]
add SI, 0002h
cmp DX, BX
JE b5
loop povtorP3
cmp CX, 0000h
JE exit
b5: or AX, 0001b
cmp AX, 000Fh
JNE EXIT
mov DX, OFFSET otvetok
mov AH, 09h
int 21h
jmp ok
exit:
mov DX, OFFSET otvetne
mov AH, 09h
int 21h
ok:
mov AX, 4c00h
int 21h
text ends
end begin