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

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

  Все выпуски  

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


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


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


Выпуск #35.

Добрый день, уважаемые читатели! Это последний выпуск рассылки. Последний в этом году! Поэтому задачи сегодня не будет - будет Голосование. Всех поздравляю с наступающим новым годом. Пусть он будет лучше, чем старый. Всего Вам светлого.

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

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

2. Голосование.

 

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

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

  Участник

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

1. Beeblebrox 59 байт
2. Greenya 87 байт

 

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

Вывести на экран уникальную строку из файла.

Несколько слов...

Решение by Beeblebrox засчитано - он использует оператор xor для каждой строки.

Решение by Greenya не засчитано. Причины отмечены в исходнике красным шрифтом. Зачем я публикую незасчитанные решения? А потому, что и я могу ошибиться в выборе победителя - а так все перед подписчиками, т.е. мой выбор, если он неверен может оспорить автор незасчитанного решения. С другой стороны должен же я указать причины почему я не засчитал решение.

Решения.

Решение by Beeblebrox:

; task #34 solution by Beeblebrox / TMA
; 59 bytes
; tasm /m9 entry.asm
; tlink /t/x entry.obj
 .model tiny
 .286
 .code
                org     100h
start:
                mov     dx,offset filename
                mov     ah,3Dh
                int     21h
                xchg    ax,bx           ; ax=0, bx=handle
                mov     di,bp
                rep     stosb           ; 255 zeros at 09xxh
                inc     cx              ; 1 byte to read
new_line:       mov     di,bp
read_next:      mov     ah,3Fh
                int     21h
                mov     al,filename     ; byte read
                cmp     al,0Ah
                je      eol
                cmp     al,'#'
                jne     next_char
                cmp     di,bp
                je      print_buf
next_char:      xor     [di],al
                inc     di
                jmp     read_next
eol:            xor     byte ptr [di],'$'
                jmp     new_line
print_buf:      xchg    ax,bp           ; ah=9
                mov     dx,ax
                int     21h
                retn
filename        db      'data.txt',0

                end     start

Решение by Greenya:

  ;---------------------------------
  ; TASK34.ASM 
  ; tasm task34.asm
  ; tlink task34.obj /t
  ; compiled&linked size = 87 bytes
  ;---------------------------------
  ; by Greenya
 
           ideal
           smart
           p8086
           model tiny
 
  LITTFNM  equ   '#',0       ;filename "#" Название файла должно быть data.txt
  MAXBUFF  equ   255         ;maximum is 255  
  LINEFLG0 equ   0Dh         ;end of data flag
  LINEFLG  equ   0Ah         ;end of line flag
  OVERFLG  equ   23h         ;end of file flag
 
  segment  main byte
  assume   cs:main, ds:main           
 
           org   100h
     start:;;;;;;enter ax=bx=cx=dx=di=si=0, Неверные значения регистров
                ;      es=ds=ss=cs=?
                ;      df=0
 
;;;;;;;;;;;;;;;;;zeroz mainbuff
           mov   cl,MAXBUFF ;Ну это не ошибка, но зная, 
                  что при старте CL=0FFh, строку можно опустить
           mov   di,offset mainbuf
           rep stosb
 
;;;;;;;;;;;;;;;;;fopen for reading
           mov   ah,3Dh            ;ax=3D00h
           mov   dx,offset fname   ;dx=fname
           int   21h
           mov   bx,ax             ;bx=file descriptor
 
;;;;;;;;;;;;;;;;;fread
     newline:
           mov   cl,1
           mov   si,offset buf-1   ;si=0
     newchar:
           inc   si        
           mov   dx,si             ;dx=buf+si
           mov   ah,3Fh
           int   21h
           cmp   [byte si],OVERFLG ;EOF?
           jz    endoffile
           cmp   [byte si],LINEFLG ;EOL?
           jnz   newchar           
 
           mov   cx,si
           sub   cx,offset buf     ;cx=strlen(buf)
     nextchar:
           mov   si,cx
           mov   ah,[byte buf+si-1]
           xor   ah,[byte mainbuf+si]
           mov   [byte mainbuf+si],ah             
           loop  nextchar
 
           jmp   short newline
                  
;;;;;;;;;;;;;;;;;fclose
     endoffile:
           mov   ah,3Eh
           int   21h 
 
;;;;;;;;;;;;;;;;;puts
           mov   dx,offset mainbuf+1     
           mov   di,dx
           mov   cl,MAXBUFF
           mov   al,LINEFLG0 
           repnz scasb
           mov   [byte di],'$'
       
           mov   ah,9
           int   21h    
 
           ret
 
  fname    db    LITTFNM
  buf      db    MAXBUFF dup(?)
  mainbuf  db    MAXBUFF dup(?)
 
  ends
  end start

Голосование.

Прошу принять участие в этом голосовании максимальное количество человек.

После нажатия кнопки "Отправить" будет создано письмо в мэйлере, который стоит у Вас по умолчанию. Затем Вам нужно будет его отправить мне. Если у Вас какие-то трудности с отправкой, напишите письмо с темой "Голосование" и ответьте на вопросы.

 

1. Как Вас зовут (имя или ник)?

2. Какие задачи Вы хотели бы видеть в рассылке?

Олимпиадные На поиск алгоритма Создание прототипов функций ЯВУ
Задачи на вычисления Задачи для ОС Windows Студенческие
Задачи для других ЯП Задачи на работу с оборудованием Школьные

Другие:

3. Сколько времени нужно давать на решение задачи?

1-2 дня 5-6 дней 9-10 дней Больше
3-4 дня 7-8 дней 11-12 дней

4. Как Вы отнесетесь к тому, что на сайте будет создана регистрация, и отправлять решения можно будет только зарегистрированным пользователям со специальной формы (это облегчит создание рассылки и формирование архива и рейтинга)?

Давно пора! Это лишнее Все равно

5. Общие пожелания и рекомендации.

                   

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

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

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

 

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


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

В избранное