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

Ассемблер? Это просто! Учимся программировать (FAQ)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Ассемблер? Это просто! Учимся программировать (FAQ)
______________________________________

Выпуск N 064

Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"

Дата выхода: 2001-08-18


Вопрос №540

Broken Sword

Ответ

Уважаемый Broken Sword! ;)

Уважаемый эксперт Orlando! В ответе на вопрос 536 (команды sub и sbb) вы допустили роковую ;) ошибку! Флаг ZF НИКАК не зависит от знака числа, вы его вероятно спутали с CF...

Уважаемый эксперт Ayl! ;) Можете убирать теперь "4 лишних байта" ;). Ваш вариант - 61, мой новый - 52 (без очистки экрана 47...). Попробуйте теперь сделать меньше!
Уважаемые эксперты, на самом деле ТО ЧЕМ МЫ ТУТ ЗАНИМАЕМСЯ ИСКЛЮЧИТЕЛЬНО ПОЛЕЗНО ДЛЯ МОЗГОВ!!! Прошу присоединяться! ;)

Приложение:


Отправил эксперт: Broken Sword (www.revolution.co.uk - УЛТЩФБС ТЕЛМБНБ...)
Эксперт отправил ответов (всего): 60

Экспертная группа: пВЭЙЕ ЧПРТПУЩ РП РТПЗТБННЙТПЧБОЙА ОБ бУУЕНВМЕТЕ РПД DOS

Вопрос №540

Broken Sword

Ответ

Здравствуйте, Broken Sword!
.... И что мы должны на это ответить?....


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 16

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №541

Здравствуйте, Broken Sword!

Ну что вам сказать... две лишних команды ret, два лишних call... :)
Кстати ты на один или два байта ошибся...
юзай tasm /m3 так компактнее будет. :)

Вот мой вариант - 42 байта... больше не знаю что сократить... :)
Очистку экрана если только убрать... :) тогда -5 байт...

Ответ

Здравствуйте, Dron!

Ну что скажете? :)

Приложение:


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 59

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №542

Это не вопрос:), извините за флуд(или как это там называется :?), но
Уважаемый Broken Sword!
int 29h использует для вывода символа int 10h, поэтому никак не может быть быстрее...

Ответ

Здравствуйте, Sword...!

Кстати, Мне всетаки удалось сократить программу еще на 1 байт...
Итого 41 байт!!!

Маздаи майкрософтовцы... декларировано что int 21h на выходе ничего не возвращает, я полагал что и не портит... ан нет, портит курва! al точно портит!

Вот короче... кто превзойдет?

Приложение:


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 60

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №543

Привет всем, особенно Дрону и Broken Sword'y!
У как вам 41 байт ?

Ответ

Здравствуйте, Sensey!

Почти как мой последний, только твой без опции /m3 - больше (42 байта)
А моему - пофиг! :)

Приложение:


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 61

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №541

Здравствуйте, Broken Sword!

Ну что вам сказать... две лишних команды ret, два лишних call... :)
Кстати ты на один или два байта ошибся...
юзай tasm /m3 так компактнее будет. :)

Вот мой вариант - 42 байта... больше не знаю что сократить... :)
Очистку экрана если только убрать... :) тогда -5 байт...

Ответ

Здравствуйте, Dron!

Да, красиво получилось!
Но есть еще возможность оптимизировать на 1 байт (хотя подозреваю, что может и еще кто-нибудь лучше оптимизирует). Надо заменить цикл перекодирования на такой кусок:

recode:
mov si, dx ; В dx у нас offset string
l1:
xor byte ptr [si], 0Fh
inc si
cmp byte ptr [si], 0Ah -- мы же точно знаем нашу строку!!! Там будет перевод строки!
jnz l1


Отправил эксперт: Ayl
Эксперт отправил ответов (всего): 7

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №543

Привет всем, особенно Дрону и Broken Sword'y!
У как вам 41 байт ?

Ответ

Здравствуйте уважаемый, Sensey!
Не знаю Sensey как у тебя, но у меня твой вариант в 42 скомпилировался, а вот этот вариант точно 41 байт!
И тоже без всяких опций!
Кстате, тоже всем привет, особенно Painbringer'у!

Приложение:


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 18

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №537

Здравствуйте!
Так получилось что жизнь заставляет меня изучать асемблер под WIN32, подскажите как это лучше сделать, так-как Олег пока еще не начал курс под Windows (:

Ответ

Наоборот хорошо получилось, Юра, нечего от жизни отставать.
Изучать Win32 следует следующим образом:
1. Безо всяких сомнений сделать выбор в пользу Masm32, особенно если ты дружиш с Visual С++. Если не дружиш, то бросай все и начинай.
На сегодняшний день, in my humble opininion, тандем Visual C++ & Masm32 самый грозный.
2. В любом случае (чего бы жизнь там тебя не заставляла на Assembler'e под Win32) обучение будет включать досканальное изучение функций API и достижение хорошего понимания "недр" операционной системы, если ты знаком с Visual C++, то это тебя нисколько не шокирует. При использовании invoke вызовы API смотрятся совсем по высокоуровневому.
3. Документации в рунете (да и в Internet тоже) мягко говоря не густо, объясняется это тем, что в отличии от программирования под DOS, под Win32 Assembler прилично сдал в "незаминимости". Непосредственно к аппаратному уровню нельзя, сервис операционной системы "как у всех". Поэтому и применяют его сегодня как дополнение к С/С++.
Вобщем, если выполнил пункт №1, то прямая дорога тебе на сайт самого Iczelion'a http://win32asm.rxsp.com/download.html
Сначала задаунлодь Masm32, сервисные пакеты к нему и включаемый файл windows.inc (Пологаю библиотеки kernel32.lib, shell32.lib и т.д. у тебя имеются)
Задаунладивайся референсами по функциям API и перебирайся в раздел tutorials, которого тебе на ближайшее время будет достаточно. Будут вопросы - спрашивай.
Если уж сильно хочется чего-нибудь нашего, то полезай на www.Assembler.ru, сздаш тест на настоящего ассемблерщика, почитаеш статью "зачем он нужен, этот ассемблер?" и в раздел ссылок. Все что найдеш по Win32 - все твое.

P.S. Здесь же курс под Windows если через пару лет и начнется, то его вытеснит курс под операционную систему Dron'a :) :((((((((((((





Отправил эксперт: Alexander_K
Эксперт отправил ответов (всего): 21

Экспертная группа: Общие вопросы по программированию на Ассемблере под Win32

Вопрос №545

Приведенный ниже кусок проги был в 13 выпуске фака
он определяет размер файла. Но если размер 1,5 метра то
он будет записан в DX:AX КАк его потом в переменную запихнуть?

mov ah, 42h
mov al, 02h
mov bx, HANDLE1
mov cx, 00h
mov dx, 00h
int 21h
mov File_size,ax ;

Ответ

Уважаемый Дмитрий!
Вы ошиблись насчет того, куда возвращается размер файла (DX:AX), на самом деле длина возвращается в CX:DX, а в переменную ее очень просто записать хотя бы так:

mov word ptr file_size,dx
mov word ptr file_size+2,cx

filesize dd ?



Отправил эксперт: Broken Sword (www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 61

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №543

Привет всем, особенно Дрону и Broken Sword'y!
У как вам 41 байт ?

Ответ

Здравствуйте, Sensey!
....... мммммммммммммммдааааааа!!!!!!! 41 байт - это вы мощно задвинули нас всех, тут даже Билл Гейтс ничего не придумает короче.... ret-ы вы ловко однако же прибрали....;)
вообще нада почаще такими вещами страдать! Интересно ведь...

p.s. насчтет int 29h я в курсе, просто
mov al,код символа
int 29h
короче на 4 байта чем аналогичное ей
mov ah,0Eh
xor bh,bh
mov al,код символа
int 10h
и по-моему быстрее этой функции токо прямое отображ.



Отправил эксперт: Broken Sword (www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 62

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №544

Приведенный ниже кусок проги был в 13 выпуске фака
он определяет размер файла. Но если размер 1,5 метра то
он будет записан в DX:AX КАк его потом в переменную запихнуть?

mov ah, 42h
mov al, 02h
mov bx, HANDLE1
mov cx, 00h
mov dx, 00h
int 21h
mov File_size,ax ;

Ответ

Здравствуйте, Дмитрий!

А вот как:


mov word ptr file_size, ax ; Записываем младшее слово
mov word ptr file_size+2, dx ; Записываем старшее слово

< ... >

file_size dd ?


И все! Теперь можно делать что-нибудь вроде
mov eax,file_size или ещё чего :)


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 72

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №535

Моя прога xor-ит строкку и обратно.
Как это делать правильно???(я имею в виду кодировать/декодировать)

1)Как можно мою прогу оптимизировать?
Я имею в виду что-то типа применения slos lods
xchg и т.п.
2) может надо вместо
mov al,string[di] - mov al,offst string[di] ????
3)может быть lea[si] и увеличивать потом si
вместо mov al,offset string[di]
прога прилагается

Ответ

Здравствуйте, Дмитрий!
Вообщем я бы выкинул чистку экрана (нафиг она нужна!) и выводил бы на экран одним кодом (можно с процедурой, но я сделал без) и поставил бы lodsb и stosb. А еще вот у тебя какая-то переменная x была... Короче на:

Приложение:


Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 44

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №548

Уважаемый Sensey и все, все, все...
Конечно 41 байт хорошо, но мои 43 будут быстрее работать из-за отсутсвия всяких call/ret!
В принципе jcxz exit можно выкинуть, но при этом данные лишний раз отксорятся но будет тоже 41.

Ответ

Здравствуйте, Terrible Painbringer!

Собственно если оптимизировать по скорости, то вот код из 49 байт. Обработка идет не по байтам, а по двойным словам (тут надо учесть, чтобы размер текста был кратен 4, можно например пробелами добить!).

Приложение:


Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 45

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №549

Уважаемый Вопрос №524.
Тут Вы как-то спрашивали про что-то интерфесное под ассемблер.

Лет 5 назад, я написал для себя TVision на асме, но мне он так и не понадобился (перешел на Win'ы, а потом и на Forth под оные). Не завершил только редактор, и по мелочи объекты.

Если нужно, напиши мне на ejikra@newmail.ru. Кину исходники, примеры, документашку. Мне ОНОЕ пад_ДОС как-то боле не нужнО. Там диковаты объектики, но размер любой проги не превышает 40К!!! &)
На любые вопросы отвечу. Ностальгия... =|

Извините, не эксперт, поэтому в поле вопросов.

Ответ

Здравствуйте, Ejik!

Мне можешь кинуть ??
zpsoftware@pisem.net


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 73

Экспертная группа: Пользовательская работа c DOS

Вопрос №547

Приведенный ниже кусок проги был в 13 выпуске фака
фрагмент определяет размер файла. Но если размер 1,5 метра то
он будет записан в DX:AX КАк его потом в переменную запихнуть?

mov ah, 42h
mov al, 02h
mov bx, HANDLE1
mov cx, 00h
mov dx, 00h
int 21h
mov File_size,ax ;

Ответ

Здравствуйте, Дмитрий!
Можно так: mov word ptr [File_size], ax
mov word ptr [File_size+2], dx

Для этого File_size должен быть обьявлен как File_size dd ?. Данные записываем в обратном порядке как и положено по спецификации.

С уважением, Basfer.


Отправил эксперт: Basfer
Эксперт отправил ответов (всего): 13

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Подписаться на рассылки

Рассылки Subscribe.Ru
Ассемблер? Это просто! Учимся программировать
Ассемблер? Это просто! Учимся программировать (FAQ)

Форма подачи вопроса

ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!

Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!


Ваше имя *:

Ваш e-mail *:

Подгруппы:

Вопрос *:

Прилагаемая программа (если необходимо):


Регистрация в качестве эксперта

Архив выпусков


Ведущий рассылки,

Калашников Олег: Assembler@Kalashnikoff.ru
ICQ No.:
68951340
URL сайта подписчиков: http://www.Kalashnikoff.ru

______________

По вопросам сотрудничества, рекламы и спонсорства обращайтесь:

  1. Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
  2. Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
  3. Издание книги (спонсорство): Sponsor@Kalashnikoff.ru

Рассылка 'Ассемблер? Это просто! Учимся программировать (FAQ)' Рассылка 'Ассемблер? Это просто! Учимся программировать'


(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Рейтингуется SpyLog

В избранное