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

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

  Все выпуски  

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


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


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


Выпуск #19.

Добрый день, уважаемые подписчики! Большое Вам спасибо за поздравления. Я решил поменять шрифт отображения решений - так лучше соблюдается табуляция. В связи с временной неработоспособностью моей старой почты, сообщения высылайте на igoryk@fromru.com.

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

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

2. Задача #19.

3. Команда для COMPO.

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

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

  Участник

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

1. Shur

12 байт

2. G3

12 байт

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

Запустить программу путь к которой указан в командной строке.

Решения.

Решение by Shur:

;by Shur
;12 bytes
;tasm, tlink /t
.model tiny
.code

org     100h
start:
shr     si,1
mov     bh,10h
mov     ah,4ah
int     21h     ;free memory
int     2eh     ;exec cmdline
int     20h     ;ret

end     start

 

Комментарий: Как просто и гениально! А я расписался на 63 байта: сделал проверку на неправильный ввод, сделал освобождение памяти, заполнение структуры, еще там кое-чего, а оказывается все можно сделать так просто.

Идея кода: Здесь в принципе все понятно: выделяется память для запуска файла (по-другому нельзя - того требует DOS), затем осуществляется запуск файла с помощью int 2eh (кстати ее описание приведено ниже), и программа завершается. Строка shr si, 1 нужна для того, чтобы в si оказалось смещение командной строки (при старте SI=100h; 100h/2=80h).

 

Решение by G3:

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

Start:
mov    ah,4Ah
mov    bl,80h
int    21h     ;освобождение памяти

mov    si,bx
int    2eh     ;запуск приложения

int    20h     ;выход
end    Start

 

Комментарий: Идея кода у G3 такая же как и у Shur, но метод вычисления смещения командной строки другой: G3 выделяет 80h байт памяти (BL=80h), а затем использует BX=80h для перемещения в SI.

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

Задача #19.

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

Задание:

Считать с клавиатуры 8 символов, как пароль (т.е. любой введенный символ должен отображаться как "*") в переменную Pass, одновременно кодируя этот пароль. Затем вывести кодированный пароль на экран рядом со "звездочками".

Кодировка заключается в удвоении ASCII-кода введенного символа. Если, например, введен символ с кодом 40, то в переменную Pass записывается символ с кодом 80.

Вывод на экран нужно осуществлять не с новой строки, а рядом с введенными "звездочками". Пример:

********qwertyui

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

Команда для COMPO.

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

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

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

На главной странице сайта 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
Отписаться
Убрать рекламу

В избранное