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

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

  Все выпуски  

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


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


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


Выпуск #3.

Добрый день, уважаемые подписчики! Вот немножко уже освоился с рассылкой. Кстати, Вы тоже можете присылать свои задачки. Рассмотрим все вместе. И еще хочу обратить внимание подписчиков на правила, которые содержатся во втором выпуске.

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

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

2. Фишка со сдвигом.

3. Задача #3.

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

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

Нужно было изменить цвет всех символов на экране на зеленый. Сначала код прислал Broken Sword в 13 байт, а затем и Maverick упростил программу Broken Sword'a до 12 байт, хотя не знал ее исходного текста. Помог ему один документ, присланный Broken Sword'ом. Поэтому делим победу пополам. И еще приятно, что подписчики стали уделять внимание правилам, и стали писать комментарии к своим программам.

;Task #2(2)
;Способ компиляции:
;tasm 2.asm
;tlink /t 2.obj
;Автор: Maverick@Broken Sword
;Размер: 12 байт
model      tiny
.code                
org         100h
start:
          xchg ax,cx                         ;Подготовим CX для счетчика
          mov ch,0B8h
          mov es,cx                          ;В ES сегмент видеостраницы         
          mov  al,02                         ;Меняем аттрибуты первого символа   
one:                                        
          inc di                             ;инкремент
          stosb                              ;Меняем
loop one          
ret
end start

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

Фишка со сдвигом.

Возможно эта фишка Вам знакома, но кто не знает хочу поделиться. Для нециклических битовых сдвиговых операций в ассемблере используются две команды shl и shr (кажется еще какие-то есть, но все можно свести к этим двум). Допустим AX = 200h и нам нужно совершить сдвиг на 5 битовых позиций. Обычно используют такой код:

.model tiny
.code
org 100h
start:
mov     ax, 200h
shl     ax, 5
ret
end start

Откомпилируем его. Смотрим: размер программы - 14 байт. "Откуда?!" - спросите Вы. Объясняю: в ассемблерах используется процессор .8086 по умолчанию, а такой процессор не может оперировать со сдвигом сразу на пять позиций - вдруг выйдет за пределы регистра? Но процессор .186 уже может. Он судит об удачном выполнении общей команды shl ax,5, и не разбивает ее на 5 команд shl ax,1. Т.е. вот такой код, занимающий всего 7 байт, нам подойдет:

.model tiny
.code

.186
org 100h
start:
mov     ax, 200h
shl     ax, 5
ret
end start

Теперь давайте откомпилируем и заглянем в отладчик. Что мы видим? Команда shl ax, 5 записалась в три байта: C1 E0 05. А что, если попробовать такие же коды использовать под процессор .8086? Попробуем:

.model tiny
.code

org 100h
start:
mov     ax, 200h
DB      0C1h, 0E0h, 05h
ret
end start

Оказывается, все замечательно выходит. Ну в принципе мы все равно используем команду 186 процессора, но как бы из 8086. Теперь разберемся с кодом команды shl ax, N. Судя по всему C1 E0 - это код самой команды, а третий байт - количество бит на которое нужно сместить ax. Стоит только заметить, что N должно быть меньше 32, и получается, что процессор обращается только к трем младшим битам старшего байта.

Вы также можете присылать свои фишки.

Задача #3.

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

Дано:

AX - любое двухзначное десятичное число.

Задание:

Вывести на экран это число (любимая задача экспертов :-).

Можно пользоваться прерыванием int 29h.

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

Голосование

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
Отписаться
Убрать рекламу

В избранное