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

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

  Все выпуски  

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


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

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


Выпуск #39.

Здравствуйте! Вот еще один выпуск рассылки. Кто еще не зарегистрировался, прошу сюда. Регистрация нужна не только тем, кто собирается посылать решения к задачам, но и тем, кто желает высказаться в форуме. Кстати насчет форума. У кого есть время отправьте туда несколько сообщений - спросите чего-нибудь, пожелайте или создайте тест-тему, а то после модернизации движка под разные броузеры могли появиться неполадки... Если будут проблемы - пишите.

Теперь пожелание тем, кто отправляет решения. Решения оптимизированные от решений обыкновенных отличаются особой сложностью своего построения. Поэтому убедительная просьба - комментируйте свои решения. Основную идею кода лучше закомментировать (написать после ";") и расположить в начале решения. Также комментарии лучше расположить после каждой "непонятной" команды, т.е. команды требующие объяснения, а именно в каком контексте она употреблена и т.п. Тем самым Вы повысите ценность Ваших решений. 

 

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

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

2. Задача #39.

 

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

 

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

  Участник

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

1 G3 31 байт
2 Shur 31 байт
3 Alexius 43 байта

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

Вывести текст по спирали по часовой стрелке.

 

Решения.

Решение by G3:

;Task38 by G3 (tgm80@mail.ru), 31 bytes
;tasm /m entry.asm, tlink /t entry.obj
start:
                mov     cl,121          ;cx = 121 - размер буфера
                mov     dx,cx           ;dx = 121 - адрес буфера
                mov     ah,3fh
                int     21h
                xchg    ax,si           ;si = 121 - адрес буфера
                mov     cl,21
MainLoop:
                push    cx
PrintLine:
                add     si,bx           ;bx = 0, 10, -2, -12
                lodsb
                int     29h
                dec     cx
                jcxz    L10
                loop    PrintLine
                xor     bx,di           ;bx = bx xor -2
L10:
                xor     bl,10
                pop     cx
                loop    MainLoop
                ret    

Решение by Shur:

;by Shur
;31 bytes
;fasmw

 mov ah,3fh
 mov dx,0b01h
 int 21h

 mov si,0b0bh
 mov bh,dh

_go:
 mov cl,dh

_out:
 add bl,dl
 mov al,[bx]
 int 29h
 loop _out

 neg dl
 xchg si,dx
 dec dh
 jnz _go

 ret

Решение by Alexius:

;tasm /m2 task38.asm
;tlink /t task38
;by Alexius

CSEG segment
assume cs:CSEG, ds:CSEG, ss:CSEG, es:CSEG
 .586

org 100h
main:
mov ah,3fh
int 21h;                read file

mov si,dx
dec si
mov bl,11

mov dx,bx;              dx=11
inc di;                 di=-1

call read_neg
dec bx

cicl:
call read_neg
call read
dec bx
jnz cicl


quit:
ret
read_neg proc
neg dx
neg di

read proc
xchg dx,di;             dx=1,11,-1,-11...
mov cx,bx
qq:
add si,dx
mov al,[si]
int 29h
loop qq
ret
read endp

read_neg endp

cseg ends
end main

Задача #39.

 

Задание:

Подсветка синтаксиса.
В STDIN из файла перенаправьте любой файл (например, Вашу программу).
Ваша задача состоит в том, чтобы "подсветить" числа и знаки препинания этого файла по следующим правилам и вывести весь текст на экран с "подсвеченными" символами:

Числа: 0-9 зеленый цвет - атрибут символа - 000000010b
Знаки препинания: ~#&()-=+\|/*:[]{}<> - синий цвет - 00000001b

! Файл должен быть выведен на экран целиком.
! Подсвечиваться должны только те символы, о которых написано выше, т.е. другие знаки препинания подсвечивать не нужно.

 

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

 

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

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

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

 

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


http://subscribe.ru/
E-mail: ask@subscribe.ru
Адрес подписки
Отписаться

В избранное