Рабочие будни

Архивы

Конкурс!

Ниже приведён код написанный мной в далёком 1997 году.

Кто первый расскажет для чего он нужен, получит от меня 10WMZ. Я думаю это нормально получить 10WMZ за 5ть минут размышлений?

Конкурс продлится 7 дней. Свои варианты отписывайте в комментарии.

Отсчёт пошел.

mov ax,0deadh

mov dx,10 //подсказка, это число меняется в зависимости от того, что нам надо

xor cx,cx

a1: xor bx,bx

a2: cmp ax,dx

jb a3

inc bx

sub ax,dx

jmp a2

a3: add ax,'0'

cmp ax,':'

jb a5

add ax,'A'-':'

a5: push ax

inc cx

xchg ax,bx

or ax,ax

jne a1

a4: pop dx

mov ah,02h

int 21h

loop a4

retn

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

25 комментариев to “Конкурс!”

  1. Shemetov Says:

    Хоть бы подсказку ... ? :)

  2. Валентин Says:

    Ну не смешно :)

    А откомпилировать и проверить? Компилируется без ошибок :)

  3. kren Says:

    Блин, на на Pas'е или каком-нибудь С подобном языке я бы запросто за 5 минут, а тут придется подумать :-).

  4. Валентин Says:

    Я думаю, что Вы справитесь. Предыдущий трюк Вам удалось раскусить. :)

    Это кстати не просто функция, а очень полезная функция. Скажем так, само совершенство. Когда разберётесь, то поймёте, о чем я говорю.

  5. kren Says:

    Почему-то у меня при запуске вылетало с ошибкой. А по идее программка должна выводить результат? Судя по коду должна. Но отладчик наше все :-). Если я правильно понял, то это разбиение числа на цифорки. Поправьте меня, если не так.

    P.S. Спасибо, заставили меня вспомнить ассемблер, а то совсем уже расслабился со всякими Delphi и VS.

  6. Shemetov Says:

    Так и не понял о чем Вы говорите :) Скомпилировать конечно удалось. Вывалилось на экран небольшое количество символов @ . P и встало, даже не завершившись... видимо из стека попыталось на экран вылезти что-то такое, что нельзя отобразить :).

    Что там в коде, я так и не понял... А именно для чего используется разница «А» и «:», а не просто число 7?

    Для чего нужно от значения 57005 кучу раз отнимать 10 (которая подставляется, когда нужна) и все остальные хитрые операции с запоминанием количества операций «sub» между ДЕАД и 10... ну вобщем больше вопросов.

    При компиляции в MODEL SMALL вообще не запускается.

    Признаюсь, я дилетант :), но было прикольно вспомнить университетский курс. Надеюсь на поясняющий комментарий в конце конкурса.

  7. Shemetov Says:

    да, кстати похоже на разбиение, только не работает оно почемуто

  8. kren Says:

    Подставь вместо 10 100 и буде по 2 числа разбиение, или подставь вместо 57005 другое число и попробуй. Отладчик тебе в помощь

  9. Валентин Says:

    текст перед компиляцией уберите :

    "//подсказка, это число меняется в зависимости от того, что нам надо "

    я думаю кто на асме пишет тот понимает, что это ремарк не от асма :)

  10. Валентин Says:

    2kren

    Да это разбиение числа на циферки. Но самое интересно вы не увидели. Ответ близок :)

    2Shemetov

    Эта разница учитывается при компиляции. В откомпилированном коде будет одно число. Это просто удобно при написании, что бы не заглядывать в кодовую таблицу и не высчитывать самому.

  11. kren Says:

    И как это я сразу не увидел, насколько я понял, на выходе, мы получаем не просто эти числа, а именно коды этих чисел без каких бы то ни было дополнительных преобразований. Я прав, или тут кроется что-то еще более гениальное? :-)

  12. Валентин Says:

    Как всё сложно :)

    Подсказка: Замените 10 на 2

    Какой результат увидите на выходе? Я даже в CALC могу посмотреть ответ 1101111010101101

    Если и это не поможет понять суть, то поставьте 8 заместо 10 :)

  13. kren Says:

    Точно, а я совсем в другую сторону шел. Я подумал, что 10 меняется на нужное число типа 10, 100, 1000 ну и т.д. И еще подумал что странновато называть такую функцию «само совершенство». Теперь понятно что к чему, теперь она может претендовать на место «само совершенство». А автор вы?

  14. Валентин Says:

    Автор я. Год написания указан был :)

    Так кто мне всё таки изложит, что она из себя представляет? 10$ ждут своего героя!

  15. Валентин Says:

    Попрошу отписываться шустрее. Потому как уже и по комментариям понятно, что этот код делает. А то залётный незнающий ассемблера получит главный приз.

  16. kren Says:

    После такого к-ва подсказок вам еще не жалко отдать 10$ ;-). А это ф-ция преобразования чисел в разные системы счисления. Надеюсь на этот раз поравок не будет? ;-)

  17. Валентин Says:

    Ура! Победитель найден :)

    Да на самом деле это функция вывода числа в любой системе счисления. Её можно было бы сократить если бы не 16и ричная система. Только ради неё там было добавлено:

    cmp ax,’:’

    jb a5

    add ax,’A'-’:’

    введите 16 заместо 10 и получите hex вывод

    Более идеальной и простой функции я думаю не существует, которая могла бы вывести число в любой системе счисления...

    2kren

    напишите мне на vаlеntin@gritsinger.com (набирайте руками, копирование не прокатит) с ящика который указывали в комментариях, свой wmz кошелёк или сообщите другие координаты для перечисления денег :)

  18. Валентин Says:

    Спасибо Ренат, что приняли участие.

    Было очень интересно :)

    Подкинул вам 10$.

  19. Валентин Says:

    Стоит продолжать разгон мозга? Есть ещё задача на 20$ :)

  20. Shemetov Says:

    2Валентин:

    Если можно, могли бы вы выслать мне работающий вариант этой программы, интересно посмотреть все таки на рабочий вариант (c исходным кодом ;)

    Следующий конкурс тоже с исходным кодом на асм?

  21. kren Says:

    Я с удовольствием поучаствую, вот тоолько заглянуть получится тоолько на выходных, но так то и лучше, не мне же одному все призы забирать =)))

  22. Валентин Says:

    2Shemetov

    Это был приведён рабочий вариант.

    впишите в начале:

    «model small

    codeseg

    org 100h

    begin:»

    и в конце:

    «end begin»

    ---------------

    Tasm cifra.asm

    Tlink /t cifra.obj

  23. Валентин Says:

    2nokia

    Если это спам, то бесполезный. Прямых ссылок я не оставляю.

  24. GoldenScrew Says:

    Долго разгадывали )) Думал, щас... найду проггера, с ним поделюсь ))))

  25. Валентин Says:

    @GoldenScrew:

    Главное не победа.

    На счёт прогера легко. Будут ещё задачки интересные. Но думаю, что приз не достанется ни кому.

Leave a Reply