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

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

  Все выпуски  

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


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


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


Выпуск #14.

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

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

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

2. Задача #14.

3. Предложение.

4. Дискуссия: новая тема.

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

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

 1?. Broken Sword - 6 байт.

2. Alexey Volkov - 7 байт.

3. Beeblebrx - 7 байт.

4. G3 - 7 байт.

5. Ayl - 8 байт.

6. Odin - 8 байт.

7. Eugene - 8 байт.

8. Torax - 8 байт.

9. Elf - 8 байт.

10. Alexey_1 - 8 байт.

11. Galkin Oleg - 8 байт.

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

Изменить все регистры общего назначения (кроме одного на выбор) на 0FFFFh.

Решения.

Решение by Broken Sword:

; Assembler Tasks COMPO #13
; tasm /m taskN.asm
; tlink /x /3 /t taskN.obj
; taskN.com
; by Broken Sword [HI-TECH]
; brokensword@mail.ru
; size: 6 bytes

; comments:
; mov SP,1Dh instruction may cause damage in some debuggers

.model tiny
.code
.386
org 100h 
@@start: 
mov SP,1Dh ; SP = File Handle Table + 5
popa              ; SI=DI=BX=CX=DX=FFFF
                       ; AL=FF, AH=low_env_seg
int 20h
end @@start

 

Комментарий: Как только я вывесил на сайте размер решения Broken Swordа. Многие читатели присылали мне свои решения и приписывали: "А действительно размер программы 6 байт?", "А корректно осуществляется выход в DOS?". Не знаю как будет завершаться программа у Вас, но у меня иногда выход осуществляется нормально и иногда все регистры (кроме sp) равны 0FFFFh. Поэтому в таблице рекордов пришлось поставить знак вопроса. Не всегда эта программа выполняет условие задачи. Идея программы оригинальна: указатель вершины стека изменяется на 1Dh. А здесь хранятся байты со значениями 0FFh (нет, здесь вообще-то хранятся описатели файла, но нас интересует тот факт, что здесь хранятся именно байты). Затем командой popa происходит заполнение регистров. Broken Sword не зря заметил, что команда mov sp, 1Dh может вызвать сбои в работе отладчика. На мой взгляд, сбой и выход в следствие фатальной ошибки могло вызвать "нулирование" описателей файлов.

 

Решение by Alexey Volkov, Beeblebrx, G3:

.model tiny
.386
.code
org 100h
Start:
dec            ax
MainLoop:
push          ax
loop           MainLoop
popa
int             20h
end           Start

 

Комментарий: Не подумайте, что это командное решение, просто он было одинаково у всех приславших. Идея проста: командой dec ax, помещаем в AX 0FFFFh, а затем заносим в стек это значение 0FFh раз (при старте CX=0FFh). И в конце концом считывается в регистры.

 

Решение by Ayl, Odin, Eugene, Torax, Elf, Alexey_1, Galkin Oleg:

;размер 8 байт
;примечание:
;popa выбирает регистры из стека в порядке ax cx dx bx sp bp si di
org   100h
mov cl,8              ;делаем цикл на 8 регистров
p:      push 0ffffh ;заносим в стек
loop  p
popa                     ;выбираем из стека в регистры
ret

Без комментариев. 

 

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

Задача #14.

Размер моего решения: 24 байта.

Задание:

Считать с клавиатуры символы и узнать является ли введенная строка двоичным числом. Если число не является двоичным, то DL=0FFh, иначе DL=0.

Пример: DL=0

1010

0100

DL=0FFh

010b

string

 

Единственное условие: нужно ввести строку полностью, и не прерывать ввод если введен символ с ASCII-кодом, не равным коду "0" и "1". Завершить ввод нажатием Enter. Строка может быть любой длины.

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

Предложение.

Может быть вы слышали, что на сайте hugi.de/compo даются задачи (естественно труднее, чем в данной рассылке). Решить одному человеку данную задачу будет непросто, а иногда даже невозможно. Maverick предлагает создать команду (небольшую - человек 5-10) и решать задачи все вместе.

А вообще кто хочет попасть в команду, напишите письмо по адресу: igoryk@yandex.ru. Только прошу учесть, что в этой команде мы только решаем COMPO. И еще прошу писать предложения о том, как это все лучше организовать.

Дискуссия.

Что Вы думаете о законах по поводу защиты авторских прав программистов?

Мнения сюда: igoryk@yandex.ru 

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

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

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

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


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

В избранное