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

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

  Все выпуски  

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


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


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


Выпуск #28.

Добрый день, уважаемые подписчики! У нас сразу две хорошие новости. Первая - наконец-то открылся сайт - http://codeclimber.com. Кстати на нем находится обновленный рейтинг и архив решений. Вторая - один из участников нашей рассылки, а именно G3, занял первое место в Hugi.Compo #22. Поздравляем!

 

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

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

2. Задача #28.

 

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

 

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

  Участник

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

1. G3 114 байт

 

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

Сделать программу, рисующую псевдографические линии.

 

Решения.

Решение by G3:

;Task #27 by G3 (tgm80@mail.ru), 114 bytes
;tasm /m task.asm
;tlink /x /3 /t task.obj
 .model tiny
 .386
 .code

  org 100h
Start:
  push 0B800h
  pop es    ;сегмент видео страницы
  mov al,03h
  int 10h    ;очистить экран
  mov dh,25
  mov ah,02h
  int 10h    ;спрятать курсор

MainLoop:
  mov dl,1
  mov es:[si],dl   ;вывести рожицу вместо курсора

  mov ah,0
  int 16h    ;ожидать нажатия клавиши

  cmp al,1Bh
  je Exit    ;если ESC, то выйти
 
  sub ah,4Ch    ;преобразовать сканкод из ah
  test ah,dl    ;в смещение к следующей
  jne L01    ;позиции на экране (-160,-2,2,160)
  imul ax,20
L01:
  sar ax,7     
  mov di,si    ;di = текущая позиция
  add si,ax    ;si = следующая позиция

  mov byte ptr es:[si],0C5h  ;вывести крестик для упрощения вычислений 
  pusha
  mov cl,8
  mov si,offset dXY   
Loop2:
  lodsw     ;ax = смещение соседнего символа, si=si+2
  xchg ax,bp
  mov al,es:[di+bp]   ;al = соседний символ

  mov bp,15    
Loop3:
  test bp,cx    
  je L02    ;проверять только символы направленные на текущий
  cmp al,[bp+offset Table-1]
  jne L02    ;если символ найден в таблице,
  or bl,dl    ;то сохранить направление в bx
L02:
  dec bp
  jne Loop3

  shl dl,1    ;dl - направление текущего символа к соседнему
  shr cl,1    ;cl - направление соседнего символа к текущему
  jne Loop2

  mov al,[bx+offset Table-1]  ;выбрать нужный символ из таблицы
  stosb     ;и вывести его на экран
  popa
  
  jmp MainLoop


Table  db 0B3h,0C4h,0D9h,0C4h,0C0h,0C4h,0C1h,0B3h,0B3h,0BFh,0B4h,0DAh
Exit:  db 0C3h     ;в таблице оказался опкод команды ret
  db 0C2h,0C5h
dXY  dw -160,-2,2,160

end Start

Задача #28.

 

Задание:

В этот раз задачка будет полегче. Она немного напоминает задачу #3.


Сделайте в вашей программе объявление констант:

Sys  EQU XX ;Система счисления, где 1<XX<11
Value  EQU XX ;Число, где 0 =< XX =< 255
KolVo  EQU XX ;Количество выводимых цифр, где XX - любое число, например 3

Итак, Ваша программа должна записать по смещению CS:DI представление десятичного (именно десятичного) числа Value в системе счисления с основанием Sys. Программа должна корректно работать при всех значениях констант, описанных выше.

 

Размер моего решения: 17 байт

 

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

 

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

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

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

 

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


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

В избранное