воскресенье, 31 июля 2011 г.

Конкурс от журнала ПРОграммист. Изучаем кодЪ.

Теперь пытаюсь разобраться что в коде, попутно изучая ассемблер М68К

movem.l d2-d3/a2,-(sp) ; сохраняет значение регистров в памяти
clr.w $773C(a4) ;очищает память по адресу FFf73C (773C + a4)
clr.w $773E(a4) ;очищает память по адресу FFf73E
clr.w $7740(a4) ;очищает память по адресу FFf740
clr.w $7742(a4) ;очищает память по адресу FFf742
lea $7754(a4),a2 ;a2 = указатель на пароль
move.w #$B,d2 ;d2 = длина пароля
move.w a0,d3 ;d3 = номер текущего символа пароля

loc_8E14:
clr.w d0 ;D0 = 0
move.b (a2,d3.w),d0 ;из некоторой таблицы
lea unk_93E0,a0 ;выбирается число
move.b (a0,d0.w),d0 ;индексом выступает символ пароля
moveq #5,d1 ;d1 = 5
bsr.w sub_938E ;вызов подпрограммы

subq.w #1,d1 ;d1 = d1 - 1

loc_9390: ;

lsr.w #1,d0 ;символ сдвигается вправо, младший бит попадает в регистр переноса

roxr $773C(a4) ; и движется по памяти

roxr $773E(a4) ; в 8-ми байтах

roxr $7740(a4) ;

roxr $7742(a4) ;

dbf d1,loc_9390 ;повторить 4 раза

clr.w d1 ;очистить d1

rts ;вернуться из подпрограммы

subq.b #1,d3 ;d3 = d3 - 1
dbf d2,loc_8E14 ;повторить 12 раз

bsr.w sub_90DE

eori.l #$B2 9A 56 B2,$773C(a4) ; сложение по модулю 2 с какими-то

eori.l #$B2 EB B2 00,$7740(a4) ; маской

cmpi.w #$DBB7,$773C(a4)
bne.s loc_8E90

Комментариев нет:

Отправить комментарий