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

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

  Все выпуски  

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


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


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


Выпуск #26.

Добрый день, уважаемые подписчики! Вот вам на рассмотрение еще один выпуск рассылки.

 

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

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

2. Задача #25.

 

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

 

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

Edward Samokhvalov - программа так и не запустилась.

 

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

  Участник

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

1. Shur 20 байт
2. G3 20 байт
3. Broken Sword 22 байта
4. Alex 26 байт
5. Ayl

27 байт

 

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

Расставить символы на экране  в обратном порядке.

 

Решения.

Решение by Shur:

;by Shur
;20 bytes
;tasm, tlink /t

 .model tiny
 .code
 .186
org 100h

start:
push 0b800h
pop ds
mov si,80*25*2/2
lea di,[si]
_loop:
     lodsw
     dec di
     dec di
     xchg ax,[di]
     mov [si-2],ax
     jnz _loop
     ret
end start

Решение by G3:

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


Start:
  push 0b800h
  pop ds
  xchg ax,si
  mov bx,80*25*2-4
MainLoop:
  lodsw
  xchg ax,[si+bx]
  mov [si-2],ax
  sub bx,4
  jnc MainLoop
  ret
end Start

Решение by Broken Sword:

; Assembler tasks compo #25
; fasm 025.asm 025.com
; by Broken Sword [HI-TECH]
; brokensword@mail.ru
; size:  22 bytes
                org            100h
                push           0B800h
                pop            ES             ; ES->seg video
                push           ES
                pop            DS             ; DS->seg video
                mov            SI,3998        ; video last word
                xchg           DI,AX          ; DI=0
_next:
                mov            AX,word [DI]   ; North-West byte
                xchg           AX,word [SI]   ; South-East byte
                stosw
                dec            SI
                dec            SI
                cmp            SI,DI
                ja             _next
                ret

Решение by Alex:

;tasm /m2 task25.asm
;tlink /t task25
;26 bytes
;by Alex

CSEG segment
assume cs:CSEG, ds:CSEG, ss:CSEG, es:CSEG
org 100h
 .386

main:
;Перед работой нужно выставить режим 80x25
;mov ax,3
;int 10h
;ret
push 0b800h
pop ds


xchg ax,si;si=0

mov di,3998;(25x80-1)*2
mov cx,999;25x80:2-1
cicl:
push [di]
push [si]
pop [di]
pop [si]


lodsw;<=>add si,2
sub di,2


loop cicl

ret
cseg ends
end main

Решение by Ayl:

; Assembler Tasks COMPO #25
; tasm task25.asm
; tlink /x /t task25.obj
; task25.com
; by Ayl
; size: 27 bytes
;

 .Model TINY
 .286

 .Code
 .Startup
  xchg ax, si          ; SI = 0
  mov  di, si          ; DI = 0
  mov  ah, 0b8h        ; AX = B800 - сегмент видеопамяти
  mov  ds, ax
  mov  es, ax

;  ; установка pежима и заполнение экpана (можно выбpосить)
;  mov  ax, 3
;  int 10h

;  xor  ax, ax
;  push di
;  mov  cx, 2000
;@@Loop:
;  stosw
;  add  ax, 101h
;  loop @@Loop
;  pop  di

  ; замена
  mov  bx, 24*80*2+79*2   ; адpес конца видеопамяти

@@Repeat:
  lodsw                   ; получить знакоместо из DS:[SI]
  xchg [bx], ax           ; обменять с DS:[BX]
  dec  bx                 ; пеpейти к пpедыдущему знакоместу
  dec  bx
  stosw                   ; сохpанить знакоместо в ES:[DI]
  cmp  si, bx             ; пpовеpить, что обменяли достаточно (SI > BX)
  jb @@Repeat             ; если нет - повтоpить

  ; Ожидание нажатия клавиши, чтоб pезультат увидеть (тоже можно убpать)
  xor  ax, ax
  int 16h

@@Exit:
  ret                     ; выйти из пpогpаммы

end

 

Задача #26.

 

Задание:

Сразу хочу сказать, что задание сложное. Придумал его Baldr. Ну вот собственно и условие:

 

Написать COM-программу для ОС DOS (MS-compatible) на языке assembler (x86), которая будет выполнять следующие действия и обладать следующими свойствами:
1. Принимать из командной строки набор символов (до 100 символов после имени
программы). Символы - любые из отрезка [20h, 0FEh].
2. Создавать в своем каталоге exe-файл ОС DOS (MS-compatible), который будет при
каждом запуске выводить на экран (в любом месте, но в видимой части экрана) введенные в п.1 символы. Выводить какие-либо другие символы не разрешается. После отработки
эта exe-программа ждет нажатия любой клавиши пользователя, после чего корректно
выходит в систему.
3. Иметь минимальный размер (для COM-программы).
4. Допускается некорректная работа программы в режиме эмуляции DOS в Windows, но
не допускается некорректная работа в режиме DOS (который, например, F8 - Command Prompt Only в W9x).
5. Обе программы должны завершаться, корректно возвращая управление операционной
системе и не "портить" системного окружения ОС: таблица прерываний, переменные окружения, загруженные резиденты и прочее - должны оставаться после отработки
программ в том же состоянии, как и до нее (системное время и буфер клавиатуры
могут меняться самой ОС :)) ).


Основным критерием служат п. 1-3. Остальные пункты являются очень желательными, но при возможности достичь выдающегося результата при их обходе, пункты 4 или 5 можно пропустить...
Под exe-файлом ОС DOS понимается исполняемый файл для DOS, имеющий стандартный
MZ-заголовок, не обязательно правильный, но обеспечивающий п.5 условия.
Любое условие, не указанное в задании разработчик вправе трактовать по-своему.

 

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

В избранное