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

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

  Все выпуски  

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


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


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


Выпуск #6.

Добрый день, уважаемые подписчики! 

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

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

2. Задача #6.

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

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

5. Голосование.

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

Было прислано довольно много решений, но не все были правильными: одни ставили метки в конце программы. И все же многие подписчики, приславшие свои решения не делали задание, которое указано после слов "Желательно сделать...". Ну что ж это не противоречит правилам. Итак эдакий хит-парад правильных решений, но ни одно нельзя вставлять в Com-программу - не во всех будет работать:

1. Maverick - 10 байт.

2. Ilya D. - 11 байт.

3. Broken Sword - 12 байт.

А теперь, собственно решения:

by Maverick:

;Task #5
;Способ компиляции: 
;tasm 5.asm
;tlink /t 5.obj
;Автор: Maverick
;Размер: 10 байт
.model tiny
.286
.code
org 100h
start:
push offset $ ;Получаем смещение
pop bx
sub bx,0f6h ;Вычисляем размер нашего кода
int 20h
end start

Эту программу можно сократить до 7 байт: 

mov    BX, offset $-0FBh

int       20h

Теперь решение by Ilya D. Он был первым человеком, который сообразил, как можно занести код команды int 20h в bx:

        .model tiny
        .code
        org 100h
begin:
        mov ax, word ptr [BX]
count:
        inc bx
        cmp ax, word ptr [bx+0FEh]
        jnz short count
        int 20h
        end begin

И решение Broken Sword'а - оно имеет возможность правильно высчитывать размер файла будучи вставлено в Com-программу, но при наличии соответствующего смещения команд:

; Assembler Tasks COMPO #5
; tasm entry.asm
; tlink /x /3 /t entry.obj
; entry.com
; by Broken Sword [HI-TECH]
; size: 12 bytes

.model tiny
.code
.386
org 100h
@@start: 
xchg AX,SI
xchg AX,DI
lodsw 

nop
repnz scasw

mov BX,DI
xor BH,BH


int 20h
end @@start

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

Задача #6.

У меня получилась программа на 27 байт. Кто меньше?

Задание:

В конце вашего решения (после ret) поставьте следующий код, он будет входить в размер всей программы:

Stroka DB 'kazak'

Str_Len DB $-Stroka

 

Теперь задание. Определить является ли содержимое переменной Stroka палиндромом. Проверять регистры букв не нужно. Если заменить слово 'kazak' на другое, программа должна правильно определить и его.

Выход:

Если Stroka - палиндром, то AX=0FFFFh, если нет, то AX=0.

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

Предложение

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

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

Дискуссия

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

Голосование

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

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

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

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

Ответы присылайте по ссылке: mailto:igoryk@yandex.ru?Subject=Голосование

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

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

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

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


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

В избранное