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

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

  Все выпуски  

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


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


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


Выпуск #4.

Добрый день, уважаемые подписчики! Этот выпуск читают уже 63 человека (если не больше). Мне это очень приятно.

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

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

2. Вопрос-Ответ.

3. Задача #4.

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

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

Задача заключалось, в том, что надо было вывести на экран десятичное число. Мне были присланы следующие решения:

1. AYL - 16 байт

2. Broken Sword - 16 байт

3. Maverick - 16 байт

4. Ilia D. - 16 байт

5. Edward - 28 байт

Было и еще несколько решений, но не все были правильными. Здесь я приведу три наиболее коротких кода (именно столько разных вариантов решения было прислано):

;by AYL

;size: 16 bytes

Model TINY
.286

.Code
.StartUp
  mov  ax, X      ;X -
десятичное число
  aam
  or   ax, 3030h
  xchg ah, al
  int 29h
  xchg ah, al
  int 29h
  ret
end

Это было решение AYL'а. Единственный недостаток - отсутствие комментариев. Теперь код Broken Sword'а:

; tasm entry.asm
; tlink /x /3 /t entry.obj
; entry.com
; by Broken Sword [HI-TECH]
; size: 16 bytes

                  .model      tiny
                  .386
                  .code                 
                  org         100h
@@start:
                  mov         AL,29h            ;
BIN/DEC number
                  push        AX                ;
save it
                  shr         AL,4              ; high digit
@@M:              or          AL,30h            ; ASCII-conversion
                  int         29h               ; out
                  pop         AX                ; restore num
                  inc         DI                ; on start: DI=FFFEh
                  jnz         @@M              
                  int         20h               ;
finish
                  end         @@start

Как Вы думаете почему программа заканчивается на int 20h, а ret вызывает сбой? Если знаете, то пишите на почту. В следующем выпуске опубликую ответ: я уже догадался почему, а Вы? И, наконец, решение Maverick'a, ксати Ilia D. прислал точь-в-точь такое же решение: 

;Способ компиляции:
;tasm 3.asm
;tlink /t 3.obj
;Автор: Maverick
;Размер: 16 байт
.model      tiny
.code                
org         100h
start:
mov al,79             ;
Число для вывода
mov cl,10             ;Система счисления
div cl                ;Делим на 10
call one              ;Вызов вывода al
xchg ah,al            ;Обменяем
one:
add al,'0'            ;
Преобразуем al
int 29h               ;Выведем
ret                   ;Ret сработает 2 раза, для выхода из подпрограммы и выхода
end start

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

Вопрос-Ответ.

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

Q: Недавно подписался, поэтому не успел написать что-нибудь ... :) Но вот мне не понятно, зачем в решении задачи 2 у Mavericka c Broken Swordом первая строка "xchg ax,cx"? Ведь без этого получается 11 байт ... <...>

A: Дело в том, что при загрузке COM-программы AX=0FFh (хотя отладчик показывает, что AX=0), а командой xchg значение AX помещается в CX - это короче команды mov CX, AX. И без этой команды происходит обратный вывод числа на экран.

Задача #4.

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

Дано:

AX - позиция окна сверху

BX - позиция окна слева

CX - ширина окна

DX - высота окна

Значения этих регистров могут быть любыми. 

Задание:

Начертить окно соблюдая данные в регистрах. Окно - это закрашенная область на экране, делать линии по границам окна не нужно. Так же следует очистить экран перед прорисовкой окна.

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

Голосование

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

В избранное