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

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

  Все выпуски  

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


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


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


Выпуск #24.

Добрый день, уважаемые подписчики! Прошу прощение за столь долгий перерыв - не хватает времени, но сейчас выпуски должны пойти постабильнее. Просьба ко всем: все помнят, что я открываю сайт, целиком и полностью посвященный программистам и программированию. Если каждый напишет по одной статье, очерку, совету, то у сайта будет хорошая база (несколько новых статей я уже написал). В общем жду. И самое главное - придумать название! Внимание: сайт будет в зоне .RU. И еще идея у меня - т.к. сайт будет на Perl-скриптах, то будет возможна интерактивность на довольно высоком уровне. Так вот, что если я буду вывешивать учловие на главной странице сайта, а Вы, если Вам что не понятно, спрашиваете меня прямо с главной странице. Таким образом в рассылку будет попадать условие задачи, продуманное до мелочей!

 

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

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

2. Задача #24.

 

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

Дисквалификация.

Edward Samokvalov - так и не удалось считать строку.

Odin - не выполняется главное условие - не меняются кавычки.

 

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

  Участник

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

1. G3

31 байт

2. Ayl

36 байт

 

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

Считать строку и изменить кавычки на пару знаков "больше" или "меньше".

 

Решения.

Решение by G3:

;Task #23 by G3, 31 байт
;tasm /m task.asm
;tlink /x /3 /t task.obj
 .model tiny
 .386
 .code
org 100h

Start:
  mov di,offset Stroka ;di = адрес строки
MainLoop:
  mov bl,'>'
  cmp al,' '
  jne L1  ;если al=' ', то bl='<' иначе bl='>'
  mov bl,'<'
L1:
  mov ah,8
  int 21h  ;ввод символа в al
  cmp al,'"'
  jne L2
  xchg ax,bx  ;если al='"', то al=bl
  stosb   ;сохранение al в памяти
  int 29h  ;вывод al на экран
L2:
  stosb   ;сохранение al в памяти
  int 29h  ;вывод al на экран
  cmp al,13
  jne MainLoop  ;если нажат Enter, то выход
  ret
Stroka  db ?
end Start
 Решение by Ayl:
; Assembler Tasks COMPO #23
; tasm task23.asm
; tlink /x /t task23.obj
; task23.com
; by Ayl
; size: 36 bytes
;

 .Model TINY
 .286

kbQuote EQU '"'      ; кавычки
kbEnter EQU 0dh      ; код клавиши Enter

 .Code
 .StartUp
  lea  di, stroka    ; DI = стpока

r:
  xor  ax, ax        ; получить клавишу
  int 16h

  cmp  al, kbEnter   ; если Enter - выйти
  je Exit

  cmp  al, kbQuote   ; если не кавычки - вывести
  jne Print

Quotes:
  mov  al, '<'       ; откpывающиеся кавычки
  or   bl, bl        ; пpедыдущий символ - пpобел?
  jz OutQuote        ; да - выводим
  mov  al, '>'       ; нет - выводим закpывающуюся кавычку

OutQuote:
  int  29h           ; выводим на экpан
  stosb              ; и в стpоку

Print:
  int 29h            ; выводим на экpан
  stosb              ; и в стpоку
  sub  al, 20h       ; флаг для опpеделения типа кавычек
  mov  bl, al        ; сохpаняем в pегистpе BL
  jmp short r        ; пеpеходим к вводу нового символа

Exit:
  ret                ; выход

stroka EQU $

end

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

 

Задача #24.

 

Задание:

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

Где-то в тексте программы напишите:

N EQU 5

(Учтите, что я по своему усмотрению могу менять значение этой константы в промежутке [2;9] - т.е. от 2 до 9 включительно).

Ваша задача вывести на экран через пробел различные подстановки цифр от 1 до N. Например для N=2, подстановки будут:

1 2

2 1

Количество подстановок подсчитывается по формуле n!.

Удачи!

 

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

 

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

На главной странице сайта http://www.igoryksoft.narod.ru/ будут даны размеры программ лидеров, как только таковые появятся. И так будет с каждой задачей. Узнав, эту информацию каждый может прислать более оптимизированное решение.

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

 

(с) IgorykSoft Все права защищены! 
URL: http://www.igoryksoft.narod.ru/  E-Mail: Igoryk@FromRu.Com


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

В избранное