Ниже приведён код написанный мной в далёком 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.

There are 25 комментариев

  • граватар
    Досье?

    ¬ Shemetov
    #107 17 октября 2008 at 18:02

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

  • граватар
    Досье?

    ¬ Валентин
    #108 17 октября 2008 at 19:01

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

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

  • граватар
    Досье?

    ¬ kren
    #110 18 октября 2008 at 11:24

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

  • граватар
    Досье?

    ¬ Валентин
    #112 18 октября 2008 at 14:50

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

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

  • граватар
    Досье?

    ¬ kren
    #113 18 октября 2008 at 18:03

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

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

  • граватар
    Досье?

    ¬ Shemetov
    #114 18 октября 2008 at 18:24

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

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

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

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

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

  • граватар
    Досье?

    ¬ Shemetov
    #115 18 октября 2008 at 18:25

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

  • граватар
    Досье?

    ¬ kren
    #116 18 октября 2008 at 18:42

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

  • граватар
    Досье?

    ¬ Валентин
    #117 18 октября 2008 at 19:07

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

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

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

  • граватар
    Досье?

    ¬ Валентин
    #118 18 октября 2008 at 19:13

    2kren

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

    2Shemetov

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

  • граватар
    Досье?

    ¬ kren
    #119 18 октября 2008 at 23:39

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

  • граватар
    Досье?

    ¬ Валентин
    #120 19 октября 2008 at 0:02

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

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

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

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

  • граватар
    Досье?

    ¬ kren
    #121 19 октября 2008 at 0:45

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

  • граватар
    Досье?

    ¬ Валентин
    #122 19 октября 2008 at 1:21

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

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

  • граватар
    Досье?

    ¬ Валентин
    #123 19 октября 2008 at 1:36

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

  • граватар
    Досье?

    ¬ kren
    #124 19 октября 2008 at 1:37

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

  • граватар
    Досье?

    ¬ Валентин
    #125 19 октября 2008 at 1:46

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

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

    cmp ax,’:’

    jb a5

    add ax,’A'-’:’

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

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

    2kren

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

  • граватар
    Досье?

    ¬ Валентин
    #126 19 октября 2008 at 3:04

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

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

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

  • граватар
    Досье?

    ¬ Валентин
    #127 19 октября 2008 at 3:23

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

  • граватар
    Досье?

    ¬ Shemetov
    #128 19 октября 2008 at 13:25

    2Валентин:

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

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

  • граватар
    Досье?

    ¬ kren
    #129 19 октября 2008 at 13:31

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

  • граватар
    Досье?

    ¬ Валентин
    #130 19 октября 2008 at 16:01

    2Shemetov

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

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

    «model small

    codeseg

    org 100h

    begin:»

    и в конце:

    «end begin»

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

    Tasm cifra.asm

    Tlink /t cifra.obj

  • граватар
    Досье?

    ¬ Валентин
    #133 21 октября 2008 at 0:37

    2nokia

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

  • граватар
    Досье?

    ¬ GoldenScrew
    #138 24 октября 2008 at 0:00

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

  • граватар
    Досье?

    ¬ Валентин
    #140 24 октября 2008 at 12:39

    @GoldenScrew:

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

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

Имя (*)

Почта (*)

Сайт



Оставить комментарий или два

Рубрики

Архивы