Отправляет email-рассылки с помощью сервиса Sendsay

Задачи по ассемблеру

  Все выпуски  

Задачи по ассемблеру


Информационный Канал Subscribe.Ru


Задачи по ассемблеру.


Выпуск #7.

Добрый день, уважаемые подписчики! Как и обещал, я сделал архив задач. Он расположен по адресу: http://www.igoryksoft.narod.ru/asm/tasks/tasks.htm. Об ошибках, замечаниях, пожеланиях прошу писать на почту. Ошибка при переходе на страницу рейтинга участников вызвана тем, что баллы будут начисляться начиная с седьмой задачи.

Сегодня в выпуске:

1. Решение задачи #6.

2. Задача #7.

3. Предложение.

4. Дискуссия.

5. Итоги голосования.

Решение задачи #6.

Как обычно хит-парад всех решений:

G3 - 23 байта.

Undydrid - 23 байта.

Сергей - 23 байта.

Ayl - 27 байт.

 

Решение by G3:

;Task #6
;Способ компиляции: ml.exe task6.asm
;Размер: 23 байта
;Автор: G3

.model tiny 
.386
.code
org 100h 

Start:
mov si,offset Stroka       ;3 ;si = начало строки
mov di,offset Str_len-1 ;3 ;di = конец строки
MainLoop: 
cmpsb                               ;1 ;сравнить значения [si] и [di], inc si, inc di
jnz Exit                             ;2 ;если не равны, то выход

dec di                                ;1
dec di                                ;1

cmp di,si                           ;2 ;сравнить di и si
jg MainLoop                     ;2 ;если si>di, перейти на MainLoop

dec ax                               ;1 ;ax = 0FFFFh
Exit:
ret                                      ;1


Stroka db 'kazak'            ;5
Str_len db $-Stroka       ;1

end Start

 

Решение by Undydrid:

.model tiny
.code 
org 100h

start:
mov si, offset stroka
mov di, offset str_len ; конец строки + 1

trial:
dec di                             ;2 кратное уменьшение, т.к при cmpsb возрастают и di и si
cmpsb 
jne exit 
dec di
cmp di, si                      ;т.к. сравнение символов "навстречу" друг-другу
jnbe trial
not ax                            ;при старте eax=0000h
exit:
ret

stroka db 'kazak'
str_len db $-stroka

end start

 

Решение by Undydrid:

;Task #6
;Способ компиляции:
;tasm 6.asm
;tlink /t 6.obj
;Автор: Maverick
;Размер: 23байта
   .model tiny
   .286
   .code
   org 100h
start:
       lea si,stroka                ;Смещение первого символа
       lea di,str_len-1           ;Смещение последнего
       mov cl,str_len-stroka;Длина строки и цикл, для скорости можно добавить shr cl,1
go:                                        ;но проиграем в размере
       cmpsb                           ;Сравниваем 1 и 5(в нашем случае) потом         

                                              ;2-4,3-3,4-2,5-1.....при добавлении строки  shr cl,1
                                              ;сравниваем 1-5,2-4
       jne $+7                         ;На выход, если не равны........ВОПРОС!!! см. ниже
       dec di                            ;Настройка индексов
       dec di
       loop go
       dec ax                            ;Если Stroka палиндром, то AX=0FFFFh, иначе 0
exit:
ret                                      ;Game Over
Stroka DB 'kazak'            
Str_Len DB $-Stroka      ;Длина строки
end start

И Maverick задает вопрос: "Почему если я пишу jne exit при ассемблировании вставляется два nop и прога увеличивается на 2 байта, а при jne $+7 все нормально, что это за <...>?" Ответ в следующем выпуске.

У кого есть более короткое решение присылайте указав в теме номер задачи.

Задача #7.

У меня получилась программа на 11 байт. Кто меньше? Эта задача на логическое мышление.

На входе:

AX=любое число

BX=любое число

Причем AX + BX<=0FFFFh

Выход:

AX=AX + BX; Т.е AX=старое значение AX+BX.

BX=AX

Пользоваться командами add (и подобными ей) и xchg нельзя!

Отправить решение

Предложение

Может быть вы слышали, что на сайте hugi.de/compo даются задачи (естественно труднее, чем в данной рассылке). Решить одному человеку данную задачу будет непросто, а иногда даже невозможно. Maverick предлагает создать команду (небольшую - человек 5-10) и решать задачи все вместе. Что Вы можете сказать по этому поводу?

Предложения высылайте сюда: mailto:igoryk@yandex.ru?Subject=Команда для COMPO 

Уже несколько предложений было получено:

1. "Это в принципе хорошая идея. Вот только универ ... но в данный момент время иногда есть. Я, правда, еще не разу не видел задачи на hugi.de, только на acm.uva.es (не на ассемблере, конечно :)". Volkov Alexey.

2. "Конечно создавайте!!!

Проще всего замутить на yahoogroups. Сделать одного модератором, подписку только
с его разрешения (кажется закрытая называется).

- алгоритмы
- программы
- мозговой шторм aka ОПТИМИЗАЦИЯ

Удачи.

... может меня в ученики возьмут :)
". Elf.

Вот. А вообще кто хочет попасть в команду, напишите письмо по адресу: igoryk@yandex.ru. Только прошу учесть, что в этой команде мы только решаем COMPO. И еще прошу писать предложения о том, как это все лучше организовать.

Дискуссия

Любите ли Вы спорить? Может у Вас есть какая-то тема для дискуссии? Не стесняйтесь присылайте. Поспорим все вместе.

Maverick предложил тему: "Нужен ли вирмэйкиниг обществу?". Все мнения будут опубликованы в следующем выпуске. Мнения лучше посылать сюда:

 mailto:igoryk@yandex.ru?Subject=Дискуссия: Нужен ли вирмэйкиниг обществу? 

Итоги голосования.

1. Что не хватает рассылке?

Пока всего хватает.

 

Вроде-бы все на месте, вот только, когда будут задачи посложнее, то можно будет сделать что-нибудь на подобие "вознаграждения" (если это можно так назвать), например, так: за каждую задачу - 2 балла, если решение самое эффективное, 1 балл, если не самое... А что с баллами делать? Можно, например, давать возможность ... на рекламу ... хотя ее и так хватает.

 

Общего свода правил (типа general.txt на hugi), ато непонятно что можно а что нельзя

 

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

Мой комментарий: Ну баллы будут теперь для каждой задачи. А правила я разместил на http://www.igoryksoft.narod.ru/asm/tasks/rules.htm И настоятельно прошу с ними ознакомиться всем!

2. Что лишнее?

Единогласное мнение: НИЧЕГО ЛИШНЕГО.

3. Как Вы отнесетесь к тому, что в ближайших выпусках появятся задачи типа CrackMe?

За, только начинать надо с простеньких. Чтоб в процессе и обучаться. Потом детально разбирать, чтоб те кто не понял, поняли.

Я не против. Но это стоит делать, если это будут CrackMe с "изюминкой", т. к. совсем простые можно пачками с различных сайтов накачать.

Никак.

[Хорошо] Если после будут рассказывать как и при помощи чего взламывали.

 4. Какая тема для решения задач Вам ближе всего?

Вирусная.

 

Чем шире спектр задач, которые программист может решить, тем лучше.

 

Пока что на самый маленький код.

 

Тема, типа перевод римских цифр в арабские и наоборот, вычисление даты пасхи и т.п. темы. Т.е. темы, которые объединяют и что-то познавательное и алгоритмы.

В заключение...

На главной странице сайта www.igoryksoft.narod.ru будут даны размеры программ лидеров, как только таковые появятся. И так будет с каждой задачей. Узнав, эту информацию каждый может прислать более оптимизированное решение.

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

(с) IgorykSoft Все права защищены! 
URL: www.IgorykSoft.Narod.Ru  E-Mail: Igoryk@Yandex.Ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное