Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Ассемблер? Это просто! Учимся программировать (FAQ)
Ассемблер? Это просто! Учимся программировать (FAQ)
Выпуск N 066 |
Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"
Дата выхода: 2001-08-21
Вопрос №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 [File_size + 2], dx
Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 62
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №565
Здравствуйте, уважаемые эксперты
Вот пытался написать резидент, что бы он работал как замедлитель, а клавиши от F1 до F10 регулировали скорость, но прога почемуто не работает. Помогите понять почему. И ещЈ как в Turbo Debugere транслировать код резидентной процедуры?
Заранее благодарен
Ответ
Уважаемый Vital! Пока единственное, что сразу бросается в глаза: в обработчике int 1Ch (который, как вы знаете, вызывается 18 раз в секунду) в начале вы командой cli запрещаете обработку всех прерываний, а потом и еще и цикл на n-ное количество долей секунды продлевает запрет, а как вы думаете, успеете нажать и отпустить кнопку меньше, чем за 1/18 с ??? Вообще, может быть отсюда и все остальные проблемы, но ща мы ее оптимизируем по размеру ;) Уважаемые эксперты, прошу занять боевые позиции и т.п......
А так в вашей проге куча лишних popf и т.п.
Отправил эксперт: Broken Sword (www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 67
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №548
Уважаемый Sensey и все, все, все...
Конечно 41 байт хорошо, но мои 43 будут быстрее работать из-за отсутсвия всяких call/ret!
В принципе jcxz exit можно выкинуть, но при этом данные лишний раз отксорятся но будет тоже 41.
Ответ
Здравствуйте, Painbringer!
Но у тебя нет очистки экрана... наши варианты без очистки - 36 байт.
Твой вариант после моей доточки стал 38, и плюс очистку экрана - опять таки 43... Если убрать jcxz, то 41...
Приложение:
Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 63
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №566
Добрый день!
Я новый подписчик. Вчера я скачал с вашего сайта MASM611.
Попробывал ассемблировать , программа выдает ошибку:
ненайден link.exe. Я нашел link.exe в папке BINR и поместил вместе с ml.exe. Ошибка пропала но файл *.com не создался.
Подскажите как мне настроить программу.
Заранее благодарю.
Саша.
Ответ
Здравствуйте, Oleksandr!
Что-бы создать COM файл наберите:
\путь\ml.exe prog.asm /AT
путь - путь к ml.exe (у меня например d:\masm611\bin)
Счастливо!
Отправил эксперт: Evgos (http://ospelnikov.narod.ru - Личная страничка)
Эксперт отправил ответов (всего): 30
Экспертная группа: Работа с MASM/TASM
Вопрос №559
Уважаемые эксперты, и не только!!
У кого-нибудь есть НОРМАЛЬНАЯ КНИГА АБЕЛЯ???
В формате Word.Чтобы ее можно было распечатать.
И чтобы "рисунки" были проонумерованы и шли в самом тексте книги!!!
Желательно DOC!!!!!!!!!!
Если у кого есть - кинте плз ссылку мине на мыло: daylightinc@mail.ru
Ответ
Здравствуйте, Дмитрий!
Слухай, а поисковики по юзать лень??
поробуй здесь
скачай архив 285кб...
Отправил эксперт: змей
Эксперт отправил ответов (всего): 2
Экспертная группа: Пользовательская работа с Windows
Вопрос №568
Здравствуйте эксперты.
Я попытался написать программу выводящую в файл содержимое экрана, но не чего не работает. В чем дело?
Ответ
Здравствуйте, Алексей!
Ты допустил как минимум одну ошибку.
При вызову функций дос номер функции засылается в ah а не в ax!
А в остальном... глянь исходник.
Приложение:
Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 66
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №568
Здравствуйте эксперты.
Я попытался написать программу выводящую в файл содержимое экрана, но не чего не работает. В чем дело?
Ответ
Здравствуйте, Алексей!
Во-первых, функция 3ch не открывает файл, а создаёт новый, используй 3dh, а в al установи 1 бит в 1, потом используй функцию 40h и всё получится!
Но если будут проблемы, обращайся, прогу запросто напишем!
Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 23
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №568
Здравствуйте эксперты.
Я попытался написать программу выводящую в файл содержимое экрана, но не чего не работает. В чем дело?
Ответ
Здравствуйте, Алексей!
1. Номер ф-ции передается в ah, а ты его писал в ax
Дальше не разбирался, переписал гораздо проще (см Приложение)
Используется ф-ция 40h - запись блока
И используется знание того, что экран - непрерывная область памяти...
ЗЫ Для экспертов - мой адрес sensey@ukr.net(полнодоступный) или klyuchka@uts-ua.com(просьба на него не писать, это рабочий, я могу с него ответить)
Приложение:
Отправил эксперт: Sensey
Эксперт отправил ответов (всего): 86
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №567
Я затеял оптимизация своей проги, решил переписать наиболее тормозные ее части на асме, но столкнулся с некоторыми проблемами. Вопрос такой, почему на первой строке вставки на асме(lea ESI,m_ScaleTable[0][0]) компилятор выдает ошибку: "error C2420: 'm_ScaleTable' : illegal symbol in second operand"? m_ScaleTable - переменная класса, массив WORD [2][2000]. Код процедурки прилагается. Помогите, пожалуйста, а то я нифига понять не могу.
Ответ
Уважаемый pUnknown!
Я не знаком ни с одним языком высокого уровня (или низкого?), ну С, Паскаль, Дельфи и т.п., поэтому все, что до строки Asm для меня (к позору) полнейший бред, может в них и можно использовать двумерные массивы (ну наверняка можно!), но во всяком случае даю сто процентную гарантию, что в Асме запись типа lea esi,scaltable[0][0] просто не имеет логического смысла, т.к. первый ноль - это понятно, нулевой элемент в строке scltable, но что такое воторой ноль? ширина? глубина? Aсм этого не понимает, и ......... дай бог никогда не поймет! (за это я его и люблю...). Единственное, что могу сказать по поводу "глубин" и "ширин", уровней вложенности, так это использование СТРУКТУР, там можно задавать уровень вложенности (через точки), но это, опять же, непотеме...
p.s. что за странная команда add ax,0 ??????
Отправил эксперт: Broken Sword (www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 68
Экспертная группа: Общие вопросы по программированию на Ассемблере под Win32
Вопрос №572
Уважаемые эксперты.
Помогите решить проблемму.
Нужно создать резедент под DOS.
Он должен записывать в текстовый файл имя и дату/время любово запускаемого файла.
Я прелагаю код. Но он при запуске вкшает ПК.
Оччень прошу помогите. Не дайте вылететь с работы.
CSEG segment
assume ss:CSEG,cs:CSEG,es:CSEG,ds:CSEG
org 100h
Begin:
jmp Init
MOY proc
pushf
cmp ax,3D00h
je Ok_09h
cli
popf
jmp dword ptr cs:[VECT]
Ok_09h:
push ds
push dx
push cs
pop ds
mov dx,offset May_String
pushf
call dword ptr cs:[Vect]
pop dx
pop ds
popf
sti
iret
VECT dd ?
May_String db'Ђ ў®в ®Ў« ¬ЁвҐбм$'
MOY endp
Init:
mov ax,3521h
int 21h;’ҐЇҐам ¬л § Ґ¬ ўҐЄв®а 21 ЇаҐалў Ёп ES:BX
mov word ptr VECT,bx
mov word ptr VECT+2,es
;Ђ¤аҐб ўҐЄв®а б®еа Ё«Ё
mov ax,2521h
mov dx,offset MOY;DX ¤®«¦Ґ гЄ §лў вм и ®Ўа Ў®взЁЄ
int 21h
mov dx,offset Init
int 27h
CSEG ends
end Begin
Ответ
Здравствуйте, fagot!
Я не совсем понял где ты вообще производишь запись...
Чтобы что-то сохранить в файле надо сохранять это...
А в твоей программе ничего не понятно, и еще кодировка странная какая-то.. что там в May_string написано то?
Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 67
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №569
Доброго дня всем умам, посваятившим себя программированию.
Я в Asseamber'е полный ноль, но неплохо владею Delphi.А Delphi может компилировать Asseamber! Вот я и хочю понять основы 'коренного языка'. Эксперты, отзовитесь! Научите понимать Asseamber! :)HELP))
Ответ
Здравствуйте, Евгений!
Для начала - слазь на www.kalashnikoff.ru там есть инфа по программированию на асме под ДОС. Вот. Коли вьедишь в это дело, и захочешь пойти дальше - в Win32 то пиши мне сюда: codebuilder@chat.ru
ICQ# 45249044
ASSEMBLER - RULEZZZZZZ!!!!!!!!
Кстати, нужна поломанная мною демонстрационная версия Dr web 4.25 for Windows ? Полнофункциональная стала :))) А?
Да, сразу оговорюсь: дам тока файл drweb32w.exe. Демо версию берете на drweb.ru или dialognauka.ru а потом замещаете скаченный оттуда drweb32w.exe моим.. Весь веб слать напряжно.
Удачи!
Отправил эксперт: Евгений
Эксперт отправил ответов (всего): 10
Экспертная группа: Общие вопросы по программированию на Ассемблере под Win32
Вопрос №577
Уважаемые эксперты, я получил отклик на свой предыдущий вопрос и очень вам блогодарен.
Но я видимо выразился очень расплывчито поэтому сейчас постораюсь исправить ошибку.
Цель моей программы: При запуске пользователем какого либо файла моя программа резедент
должна записывать имя этого вайла в текстовый файл gurnal.txt.
Но программа написанная мной вешает системму.
Я пытался исправить код рабочей программы которая пришла в рассылке с номером 010"Учись программировать на ассемблере"
Я очень пршу откликнутьсяя быстрее.
мой адрес: post@arh.ru
CSEG segment
assume ss:CSEG,cs:CSEG,es:CSEG,ds:CSEG
org 100h
Begin:
jmp Init
;Начало резедента
MOY proc
pushf
cmp ah,3Dh; если открыт какой либо файл на выполнение то выполнить следующие функции
je Ok_3Dh
popf ;Иначе отдать упровление DOS
jmp dword ptr cs:[VECT]
Ok_3Dh:
push dx;Предпологаю что здесь будет имя открытого программой файла
mov ax,3d02h ;открыть файл для записи
mov dx,offset file_nam ;Имя файла куда производиться запись
int 21h
mov hahdle,ax
mov dx,ax
mov cx,30
pop dx
mov dx,offset dx ;что записываем в файл. Запишем в файл gurnal.txt имя файла который запустит пользователь во время работы
int 21h
mov ah,3eh ;закроем файл
mov dx,handle
int 21h
iret
Handle dw 0
VECT dd ?
file_nam db 'gurnal.txt',0
MOY endp
;конец резедента
Init:
mov ax,3521h
int 21h
mov word ptr VECT,bx
mov word ptr VECT+2,es
mov ax,2521h
mov dx,offset MOY
int 21h
mov dx,offset Init
int 27h
CSEG ends
end Begin
Ответ
Здравствуйте, fagot!
Хм... ты в курсе какое прерывание ты перехватил?!?
Ты перехватил int 21h, функцию 3d...
Но почти в самом начале своего обработчика ты сам же вызываешь int 21h при ax = 3d02! и у тебя в обработчике вновь и вновь происходит вызов int 21... вот и повис.
В прерывании вместо int 21h тебе надо использовать
pushf
call far [VECT]
дабы много раз не вызывать себя самого.
Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 68
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №574
"Поймал" скрипт con/con.
Повторил в DOS окне, результат тот же, синий экран и
куда то делся скан диск, вместо него что то похожее,
но работает медленно. Я имею ввиду вызов скандиска при
неправильном выходе из Windows.(не пробуйте!!)
Что за команды, есть ли возможность избавиться от последствий малой кровью.
Ответ
Здравствуйте, oleg!
непонял... говори конкретней..
чаво ты в DOS окне повторял??
сорри...вопрос не понял...
Отправил эксперт: змей
Эксперт отправил ответов (всего): 3
Экспертная группа: Пользовательская работа с Windows
Вопрос №577
Уважаемые эксперты, я получил отклик на свой предыдущий вопрос и очень вам блогодарен.
Но я видимо выразился очень расплывчито поэтому сейчас постораюсь исправить ошибку.
Цель моей программы: При запуске пользователем какого либо файла моя программа резедент
должна записывать имя этого вайла в текстовый файл gurnal.txt.
Но программа написанная мной вешает системму.
Я пытался исправить код рабочей программы которая пришла в рассылке с номером 010"Учись программировать на ассемблере"
Я очень пршу откликнутьсяя быстрее.
мой адрес: post@arh.ru
CSEG segment
assume ss:CSEG,cs:CSEG,es:CSEG,ds:CSEG
org 100h
Begin:
jmp Init
;Начало резедента
MOY proc
pushf
cmp ah,3Dh; если открыт какой либо файл на выполнение то выполнить следующие функции
je Ok_3Dh
popf ;Иначе отдать упровление DOS
jmp dword ptr cs:[VECT]
Ok_3Dh:
push dx;Предпологаю что здесь будет имя открытого программой файла
mov ax,3d02h ;открыть файл для записи
mov dx,offset file_nam ;Имя файла куда производиться запись
int 21h
mov hahdle,ax
mov dx,ax
mov cx,30
pop dx
mov dx,offset dx ;что записываем в файл. Запишем в файл gurnal.txt имя файла который запустит пользователь во время работы
int 21h
mov ah,3eh ;закроем файл
mov dx,handle
int 21h
iret
Handle dw 0
VECT dd ?
file_nam db 'gurnal.txt',0
MOY endp
;конец резедента
Init:
mov ax,3521h
int 21h
mov word ptr VECT,bx
mov word ptr VECT+2,es
mov ax,2521h
mov dx,offset MOY
int 21h
mov dx,offset Init
int 27h
CSEG ends
end Begin
Ответ
Хмм... Оччень странный вопрос. Вроде уже была такая программа. Ну да ладно. Вот укороченный резидент из рассылки 19. Вроде работает. Если тебе вдруг понадобиться убрать путь к файлу - скажи. Или сам попробуй. Это уже тривиал просто.
Приложение:
Отправил эксперт: K.A. NiCK (http://www.lightstorment.f2s.com - Lightstorm entertainment home page)
Эксперт отправил ответов (всего): 45
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос №572
Уважаемые эксперты.
Помогите решить проблемму.
Нужно создать резедент под DOS.
Он должен записывать в текстовый файл имя и дату/время любово запускаемого файла.
Я прелагаю код. Но он при запуске вкшает ПК.
Оччень прошу помогите. Не дайте вылететь с работы.
CSEG segment
assume ss:CSEG,cs:CSEG,es:CSEG,ds:CSEG
org 100h
Begin:
jmp Init
MOY proc
pushf
cmp ax,3D00h
je Ok_09h
cli
popf
jmp dword ptr cs:[VECT]
Ok_09h:
push ds
push dx
push cs
pop ds
mov dx,offset May_String
pushf
call dword ptr cs:[Vect]
pop dx
pop ds
popf
sti
iret
VECT dd ?
May_String db'Ђ ў®в ®Ў« ¬ЁвҐбм$'
MOY endp
Init:
mov ax,3521h
int 21h;’ҐЇҐам ¬л § Ґ¬ ўҐЄв®а 21 ЇаҐалў Ёп ES:BX
mov word ptr VECT,bx
mov word ptr VECT+2,es
;Ђ¤аҐб ўҐЄв®а б®еа Ё«Ё
mov ax,2521h
mov dx,offset MOY;DX ¤®«¦Ґ гЄ §лў вм и ®Ўа Ў®взЁЄ
int 21h
mov dx,offset Init
int 27h
CSEG ends
end Begin
Ответ
Здравствуйте fagot!
пишу находясь в полубреду, потому что со вчера на сегодня (с 8 вечера до полчетвертого ночи, а с пол третьего это уже напоминало безумную пляску демонов вокруг костра) и сегодня с 11 утра до пол второго дня я....... пытался сделать так, чтобы "программа, находясь резидентом в памяти, выводила в файл дату запущенного файла..." ;)))))))))))))))))))))))))))))))))) - это был истерический смех!!!). И вот что мне удалось установить... ;)))))))) - этот уже припадочный...
Прошу ВСЕХ ВНИМАНИЕ!!! ЭТО ОЧЕНЬ ВАЖНО ЗНАТЬ, ЗАПОМНИТЬ И ЗАПИСАТЬ!!! ЭТОГО НЕТ НИ В ОДНОЙ КНИГЕ №;%№;%№;;%?%:?****** ;(((((( , из-за чего мне пришлось пожертвовать своим драгоценным здоровьем и совершить уникальное открытие!!! Вообщем так,
В ОБРАБОТЧИКЕ int 21h, созданного СВОИМИ РУКАМИ НИ В КОЕМ СЛУЧАЕ НЕЛЬЗЯ МЕНЯТЬ СЕГМЕНТНЫЕ РЕГИСТРЫ НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НИ ЗАПИСЫВАТЬ В НИХ ЧТО ЛИБО (ТЕМ БОЛЕЕ ЧЕРЕЗ СТЕК), НИ ЧИТАТЬ (хотя второе вполне возможно)(кто щас подумал про cli и pusha того извините, готов разорвать на куски!!!! ;(((((((((((((((, вообщем, cli и pusha - упавшие в моих глазах команды и их можно вообще послать очень далеко после моих сегодняшних подвигов. Я таки написал прогу, которая работает ТОЛЬКО В ДОСЕ, запуская ее, она остается резидентом в памяти, при запуске ЛЮБОГО файла, в котором вызывается ф-ция 3Dh прерывания 21h, на диске C:\ образуется файл DATA.TXT, содержащий 128 байт БРЕДА! (потому как я уже выразился ранее в связи с сделанным в пол третьего ночи открытием я не могу нормально задать ds на нужный мне сегмент с DTA, хотя можете сами убедиться, в программе ловко (;) реализована ф-ция определения этого самого сегмента...) и к тому же намертво вешающая комп (из-за первых push cs po!
p ds, ато файл не создасться ;)
Если кто то из вас, уважаемые эксперты, знает, КАК МОЖНО РЕАЛИЗОВАТЬ ПОДОБНЫЙ АЛГОРИТМ, НЕ ИЗМЕНЯЯ СЕГМ. РЕГИСТРОВ в обработчике, прошу выслать мне вашу фоту, я ее на стену повешу и буду молиться денно и нощно, а засим прошу откланяться, мне спать пора
с ув., BS
Приложение:
Отправил эксперт: Broken Sword (www.revolution.co.uk - скрытая реклама...)
Эксперт отправил ответов (всего): 69
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Подписаться на рассылки
Форма подачи вопроса
ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!
Регистрация в качестве эксперта
Архив выпусков
Ведущий рассылки,
Калашников Олег:
Assembler@Kalashnikoff.ru
ICQ No.: 68951340
URL сайта подписчиков:
http://www.Kalashnikoff.ru
______________
По вопросам сотрудничества, рекламы и спонсорства обращайтесь:
- Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
- Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
- Издание книги (спонсорство): Sponsor@Kalashnikoff.ru
(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав. |
Реклама на сайте Kalashnikoff.ru
http://subscribe.ru/
E-mail: ask@subscribe.ru | Отписаться | Рейтингуется SpyLog |
В избранное | ||