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

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

  Все выпуски  

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


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

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


Выпуск #40.

Добрый день! Скоро, а именно 6 августа, моему сайту исполняется 1 год. Поэтому сегодня будет графическое COMPO. 

Немного новостей: форум действительно работает; создан сезонный рейтинг. Немного о последнем. Если Вы запустите на выполнение скрипт рейтинга, то он проверит пуста ли таблица с сезонным рейтингом, если пуста, то будет выведен общий рейтинг (такое может случиться, например, при решении первой задачи в новом сезоне), иначе будет выведен сезонный рейтинг. Общий рейтинг тоже сохранился. К нему можно получить доступ через сезонный рейтинг, либо по ссылке.

 

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

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

2. Задача #40.

 

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

 

Таблица рекордов:

  Участник

Размер решения

1  G3 70

Условие задачи.

 Подсветка синтаксиса.

 

Решения.

Решение by G3: 

;Task39 by G3 (tgm80@mail.ru), 70 bytes
;tasm /m entry.asm, tlink /t entry.obj
  .model tiny
  .code
  .486
  org 100h
start:
  dec ch   ;cx=0FFFFh - размер файла
  mov dx,offset buf  ;dx - адрес буфера
  mov ah,3Fh
  int 21h   ;читать из файла в буфер
  mov si,dx   ;si - адрес буфера
  xchg ax,cx   ;cx - число считанных байт
MainLoop:
  lodsb    ;читать символ из буфера
  pusha
  cmp al,' '
  jb L30   ;пропустить управляющие символы
  mov cx,19   ;cx - размер таблицы спецсимволов
  mov bl,7   ;7 - белый
  sub al,'0'
  sub al,9
  ja L10   ;пропустить если не цифра
  mov bl,2   ;2 - зеленый
L10:
  mov di,offset symb
  repnz scasb   ;поиск символа в таблице спецсимволов
  jnz L20
  mov bl,1   ;1 - синий
L20:
  mov cl,1
  xchg ax,bp   ;ax=09xxh
  int 10h   ;вывод символа с заданным атрибутом без 
      ;перемещения курсора
L30:
  popa
  int 29h   ;вывод символа с перемещением курсора  
  loop MainLoop
  ret
symb:  db '~'-'9', '#'-'9', '&'-'9', '('-'9', ')'-'9', '-'-'9', '='-'9' 
   db '+'-'9', '\'-'9', '|'-'9', '/'-'9', '*'-'9', ':'-'9' 
   db '['-'9', ']'-'9', '{'-'9', '}'-'9', '<'-'9', '>'-'9'
buf:  db ?
  end start

Задача #40.

 

Задание:

Ваша программа должна установить графическое разрешение экрана 320х200 (режим 13h), нарисовать картинку, дождаться нажатия любой клавиши и завершить свое выполнение, вернув экрану текстовое разрешение (режим 03h).

 

Рисунок должен занять весь экран - 64000 точек.

Алгоритм рисования. Программа обрабатывает все точки экрана c координатами X (от 0 до 320) и Y (от 0 до 200) и меняет их цвет. Цвет точки с координатами (X;Y) вычисляется по формуле (X^2 - Y^2) div 2. На Basic этот алгоритм мог быть реализован так: 

For X = 0 To 320
    For Y = 0 To 200
     PSet (X, Y), ((X * X - Y * Y) \ 2)
    Next
Next

! Так как режим 13h поддерживает только 256 цветов, то реальный цвет точки будет равен младшему байту регистра или переменной, которую Вы использовали для вычислений.

! Нельзя модифицировать предложенный алгоритм (нельзя например, размножать часть картинки по экрану и пр.)

! Программа не работает с командной строкой, поэтому можно считать AX=BX=0.

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

! Размер моего решения - 48 байт.

 

Отправить решение до 15.08.2004

 

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

На главной странице "Задач" [http://codeclimber.com/cgi-bin/asmtasks.cgi] будут даны размеры программ лидеров, как только таковые появятся, а также все официальные дополнения к условию задачи. И так будет с каждой задачей. Узнав, эту информацию каждый может прислать более оптимизированное решение.

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

 

(с) CodeClimber - Все права защищены! 
URL: http://codeclimber.com  E-Mail: compo@codeclimber.com


http://subscribe.ru/
http://subscribe.ru/feedback/
Адрес подписки
Отписаться

В избранное