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

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


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

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

Выпуск N 065

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

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


Вопрос №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 ;

Ответ

Здравствуйте, Дмитрий!
Определяешь переменную
LenFile dd ?
А в программе
mov ah, 42h
mov al, 02h
mov bx, HANDLE1
mov cx, 00h
mov dx, 00h
int 21h
mov word ptr LenFile,ax ;
mov word ptr LenFile+2,dx




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

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

Вопрос №548

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

Ответ

Здравствуйте, Painbringer!
Да....
у тебя 42\40 байт
компилить надо с опцией /m2 или больше, т.к. при однопроходном компиле появляется лишний nop :(
А я немного переделал твою прогу
И у меня получилось 41 с jcxz exit и 39 без!

Приложение:


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

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

Вопрос №552

Товарищи эксперты!!! (особенно Dron,Sensey,Orlando,Painbringer И все кто любит шевелить мозгами...). Помните, там молодой человек просил оптимизировать ему прогу? ;). Усядтесь пожалуйста поудобнее, и желательно держитесь за че нить тяжелое. Я честно говоря уже запутался, кто на сколько байт первый написал, по-моему лучший результат 41 б, если мне не изменяет память? так вот.... вы держитесь??? 36 байт!!!!!, ЭТО НЕ ОПТИМИЗИРОВАННЫЙ ВАРИАНТ (вчера сидел час, ничего путного не смог замутить, а токо шо за 10 минут само выдалось.) завтра она будет у меня 34....... !!!!!!!!!
ВСЕ ГЕНИАЛЬНОЕ - ПРОСТО!!!
p.s. кто там любитель компилировать тремя проходами, plz, попытайтесь, ато у меня не получается ;( ........ ;)
p.p.s. уважаемый эксперт Orlando! С флагами у нас какой-то странный диалог получился... ;)
p.p.p.p.p.p.p.s. я круче Билла Гейтса! Ура!

Подпись: Наполеон

Ответ

Здравствуйте, Broken Sword and other!
Чуть улучшил твою прогу и 32 получил, ну кто следующий своё слово скажет!
Кстати, как на счёт провести тестирование на скорость!

Приложение:


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

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

Вопрос №552

Товарищи эксперты!!! (особенно Dron,Sensey,Orlando,Painbringer И все кто любит шевелить мозгами...). Помните, там молодой человек просил оптимизировать ему прогу? ;). Усядтесь пожалуйста поудобнее, и желательно держитесь за че нить тяжелое. Я честно говоря уже запутался, кто на сколько байт первый написал, по-моему лучший результат 41 б, если мне не изменяет память? так вот.... вы держитесь??? 36 байт!!!!!, ЭТО НЕ ОПТИМИЗИРОВАННЫЙ ВАРИАНТ (вчера сидел час, ничего путного не смог замутить, а токо шо за 10 минут само выдалось.) завтра она будет у меня 34....... !!!!!!!!!
ВСЕ ГЕНИАЛЬНОЕ - ПРОСТО!!!
p.s. кто там любитель компилировать тремя проходами, plz, попытайтесь, ато у меня не получается ;( ........ ;)
p.p.s. уважаемый эксперт Orlando! С флагами у нас какой-то странный диалог получился... ;)
p.p.p.p.p.p.p.s. я круче Билла Гейтса! Ура!

Подпись: Наполеон

Ответ

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

Не получится :(
У тебя после первого прохода SI и DI будут указывать на
первый байт после строки :(

Так что тут баг!
Ты не учёл, что LODSB и STOSB изменяют SI и DI !!!


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

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

Вопрос №552

Товарищи эксперты!!! (особенно Dron,Sensey,Orlando,Painbringer И все кто любит шевелить мозгами...). Помните, там молодой человек просил оптимизировать ему прогу? ;). Усядтесь пожалуйста поудобнее, и желательно держитесь за че нить тяжелое. Я честно говоря уже запутался, кто на сколько байт первый написал, по-моему лучший результат 41 б, если мне не изменяет память? так вот.... вы держитесь??? 36 байт!!!!!, ЭТО НЕ ОПТИМИЗИРОВАННЫЙ ВАРИАНТ (вчера сидел час, ничего путного не смог замутить, а токо шо за 10 минут само выдалось.) завтра она будет у меня 34....... !!!!!!!!!
ВСЕ ГЕНИАЛЬНОЕ - ПРОСТО!!!
p.s. кто там любитель компилировать тремя проходами, plz, попытайтесь, ато у меня не получается ;( ........ ;)
p.p.s. уважаемый эксперт Orlando! С флагами у нас какой-то странный диалог получился... ;)
p.p.p.p.p.p.p.s. я круче Билла Гейтса! Ура!

Подпись: Наполеон

Ответ

Здравствуйте, Broken Sword!
Здравствуйте, остальные эксперты!
Компиляция несколькими проходами здесь не нужна, а 36 байт у тя получилось потому как нет очистки экрана, что добавляет 5 байт :(
Кстати, мой предыдущий ответ Painbringer'у - там тоже нет очистки экрана, поэтому тот вариант еще хуже 39+5=44b :((
------
Поэтому пока результат таков (с очисткой экрана)
У Дрона 41 байт, у меня с его проги в 42 получилось 41, у Орландо,
у тебя тоже...
Может у кого-то еще, извините если пропустил-писем много...


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

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

Вопрос №553

Уважаемый эксперт Орландо! mov cx,30 - это не универсально, если так и дальше пойти, то можна прогу в 3 строки написать, предварительно создав daylight kbsdfwe{ daylight. Так что это не канает.
Уважаемый эксперт Nik! попробуйте скомпилить и запустить

Ответ

Уважаемый эксперт, Broken Sword!
Да, я сознаю свою ошибку, т.к. использовал неуниверсальный способ!
Но сначала я думал, что equ занимает лишнее место, но это не так, а потом просто не стал менять на ваш "ПРАВИЛЬНЫЙ" вариант!
Так что я только немного оптимизировал "ВАШУ" прогу (до 32 без оч.экр.)- ведь в этом и заключается сейчас наша задача!
.model tiny
.code
org 100h
start: mov si,offset string
mov di,offset str_end
mov cx,str_l*3
@@1: lodsb
int 29h
|============|
| cmp al,0Fh |
| jb @@2 |
|============|
xor al,0Fh
@@2: stosb
loop @@1
ret
string db 'daylight',0Dh,0Ah
str_end:
str_l equ $-string
end start

Так что ИЗВИНИТЕ ПОЖАЛУЙСТА, если что не так!!!

С уважением Orlando!


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

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

Вопрос №556

Здраствуйте, уважаемые эксперты!

Подскажите, где можно скачать программу
COGEN II v1.0 - WIN 32 РATCH-SOURCE GENERATOR(c) 1999 by THE EGOISTE.

Заранее благодарен.

Ответ

Здравствуйте, Сергей!
http://nikitalv.newmail.ru/hack/rus/cr_tools_patch.htm
тут то шо тебе нада и есть, 459 Кб, именно v 1.0 и именно того самого Эгоиста.


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

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

Вопрос №556

Здраствуйте, уважаемые эксперты!

Подскажите, где можно скачать программу
COGEN II v1.0 - WIN 32 РATCH-SOURCE GENERATOR(c) 1999 by THE EGOISTE.

Заранее благодарен.

Ответ

Здравствуйте, Сергей!
http://nikitalv.newmail.ru/hack/rus/cr_tools_patch.htm
тут то шо тебе нада и есть, 459 Кб, именно 1.0 и именно от Эгоиста.


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

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

Вопрос №556

Здраствуйте, уважаемые эксперты!

Подскажите, где можно скачать программу
COGEN II v1.0 - WIN 32 РATCH-SOURCE GENERATOR(c) 1999 by THE EGOISTE.

Заранее благодарен.

Ответ

Здравствуйте, Сергей!
Например вот здесь: http://www.dore.ru/files/patchers/index.shtml


Отправил эксперт: Andy Bitoff (http://bitoff.pisem.net - HomePage)
Эксперт отправил ответов (всего): 16

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

Вопрос №562

Чем можно смотреть pdf

Ответ

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

Adobe Acrobat Reader


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

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

Вопрос №562

Чем можно смотреть pdf

Ответ

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

Есть такая программа Adobe Acrobat Reader. Вот ей и смотрите...


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

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

Вопрос №562

Чем можно смотреть pdf

Ответ

Adobe Acrobat Reader (5.20 Мб)


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

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

Вопрос №563

Здравствуйте Эксперты.
Объясните пожалуйста почему комп вешается на строке mov ss,ax
(у меня проц Celeron-550(100*5.5), мать 440ZX)
Зараннее благодарен.

Ответ

Здравствуйте, Sirius!
Хоть ret используешь, хоть int 20h, всё равно эти функции предполагают, что в стеке есть адрес возврата в DOS, так что если нужно переместить стек делай так:
model tiny
.code
org 100h
begin:
mov word ptr [pusx1],ss
mov word ptr [pusx1][1],bp

mov ax,0B900h
mov ss,ax

push ax
pop ax

mov ss,word ptr [pusx1]
mov bp,word ptr [pusx1][1]

int 20h
pusx1 dw 10 dup(?)
end begin
Теперь проблем не будет, т.к. при возврате int 20h получит нужный адрес!


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

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

Вопрос №563

Здравствуйте Эксперты.
Объясните пожалуйста почему комп вешается на строке mov ss,ax
(у меня проц Celeron-550(100*5.5), мать 440ZX)
Зараннее благодарен.

Ответ

Не запуская твою прогу могу сказать одно: ОНА НЕ ДОЛЖНА ВИСНУТЬ!!! (ни на mov ss,ax ни на какой другой команде, ты запретил прерывания, изменил ss, все впоряде...)!!! Запускаю.... и что ты думаешь? Все именно так и получилось! Поэтому В ПРОГРАММЕ ОШИБКИ НЕТ!!! Может у тебя проц непереваривает cli. Попробуй обрати внимание на этот флаг в дебаггере, чему он станет равен после этой команды. Если остался 1, то так и есть, если же он стал 0, но комп все равно виснет на mov ss,ax - то...... ты веришь в привидения? я тоже.
p.s. единственное, что и у меня вазвало некоторое подозрение, в бораландовском турбо дебаггере, после выполнения команды mov ss,ax, что бы не стояло после этой команды, ip почемуто сразу "перебрасывается" ЧЕРЕЗ одну следующую команду не останавливаясь, причем та команда, через которую произвелся перелет на самом деле выполняется... вот это уж точно мистика какаято... я бы не счел это ненормальным если бы в afdpro не было бы все как нада... может другие эксперты объяснят этот "феномен"...


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

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

Вопрос №563

Здравствуйте Эксперты.
Объясните пожалуйста почему комп вешается на строке mov ss,ax
(у меня проц Celeron-550(100*5.5), мать 440ZX)
Зараннее благодарен.

Ответ

Здравствуйте, Sirius!
В ответе на 563 вопрос я допустил ошибку(все же глючно в час ночи на вопросы отвечать):)
в модели памяти tiny код, данные и стек должны располагаться в одном сегменте!Но используя другую модель присвоение mov ss,ax не вызовет ошибки!Но сохранять SS и BP всё равно надо!


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

Экспертная группа: Общие вопросы по программированию на Ассемблере под 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

В избранное