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

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

  Все выпуски  

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


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


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


Выпуск #22.

Добрый день, уважаемые подписчики! Я работаю над созданием нового сайта, поэтому рассылка несколько задержалась. Вот уже почти все сделал, но не могу придумать звучащего названия... Какие будут предложения?

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

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

2. Задача #23.

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

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

  Участник

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

1.

G3

31 байт

3.

Alexey_1

44 байт

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

Поиск одной строки в другой.

Решения.

Решение by G3:

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

Start:
  mov ah,3Fh
  mov dx,ax ;dx = 3F00h (адрес str1)
  int 21h ;ввод str1
  xchg ax,bp ;bp = длина str1
  xchg ax,dx ;ax = 3F00h, dx = 09xx (адрес str2)
  int 21h ;ввод str2
  dec ax
  sub bp,ax ;bp = длина str1 - длина str2 + 1
  dec ax ;ax = длина str2 - 2 (без CR и LF )
MainLoop:
  mov si,dx  ;si = адрес str2
  lea di,[bp+3EFFh] ;di = адрес текущего символа str1
  mov cx,ax  ;cx = длина str2 - 2 (без CR и LF )
  repe cmpsb
  jz Exit  ;выход, если строки совпали
  dec bp
  jnz MainLoop  ;если bp=0, то строка не найдена
Exit:
  xchg ax,bp ;al = номер символа str1
;  add al,30h
;  int 29h ;вывод al для проверки
  ret
end Start

 

Решение by Alexey_1:

;tasm /m2 task22.asm
;tlink /t task22
;44 байта (44=22+22)
;by Alex

CSEG segment
assume cs:CSEG, ds:CSEG, ss:CSEG, es:CSEG
org 100h
 .386
main:
mov ah,0ah
mov dx,offset bufer
int 21h
mov si,dx
lodsb
lodsb

add dl,al;кол-во символов 1-й строки
inc dx
int 21h

inc dx
mov bx,dx
mov cl,[bx];кол-во символов во второй строке
inc dx
mov di,dx

dec si
xor al,al
pusha; сохраняю si,di

cicl:
popa
inc si
pusha
cmp si,di;если конец цепочки, то выход
je quit

repe cmpsb
jnz cicl

m2:
popa
lodsb

quit:
int 20h;          выход
bufer db 255,256 dup(?)
CSEG ends
end main

 

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

Задача #23.

Задание:

Считать строку в переменную Stroka, заменяя " (кавычки) на << или >>.  Если перед кавычкой пробел, то на экране должно будет появиться <<. Во всех других случаях >>.

Пример:

Если на клавиатуре набрали: Цитата в цитате: <<цитата в <<цитате>>>>

То на экране должно появиться: Цитата в цитате: <<цитата в <<цитате>>

! Если введено что-то типа Что-то ", то на экран выводится Что-то <<

! << и >> - это два подряд идущих символа  "меньше" и "больше" соответственно.

? Если пользователь программы будет редактировать вводимую строку, то Ваша "кавычка" редактируется как два символа, т.е. заботиться о правильной редакции Вам не надо.

Отправить решение до 08.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
Отписаться
Убрать рекламу

В избранное