-
16
Окт -
Конкурс!
- 25 комментариев
Ниже приведён код написанный мной в далёком 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 комментариев
¬
#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.
¬
#114 18 октября 2008 at 18:24
Так и не понял о чем Вы говорите :) Скомпилировать конечно удалось. Вывалилось на экран небольшое количество символов @ . P и встало, даже не завершившись... видимо из стека попыталось на экран вылезти что-то такое, что нельзя отобразить :).
Что там в коде, я так и не понял... А именно для чего используется разница «А» и «:», а не просто число 7?
Для чего нужно от значения 57005 кучу раз отнимать 10 (которая подставляется, когда нужна) и все остальные хитрые операции с запоминанием количества операций «sub» между ДЕАД и 10... ну вобщем больше вопросов.
При компиляции в MODEL SMALL вообще не запускается.
Признаюсь, я дилетант :), но было прикольно вспомнить университетский курс. Надеюсь на поясняющий комментарий в конце конкурса.
¬
#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$ :)
¬
#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
Если это спам, то бесполезный. Прямых ссылок я не оставляю.
¬
#138 24 октября 2008 at 0:00
Долго разгадывали )) Думал, щас... найду проггера, с ним поделюсь ))))
¬ Валентин
#140 24 октября 2008 at 12:39
@GoldenScrew:
Главное не победа.
На счёт прогера легко. Будут ещё задачки интересные. Но думаю, что приз не достанется ни кому.