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

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


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

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

Выпуск N 062

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

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


Вопрос №528

Здравствуйте,уважаемые эксперты!!!:) :)
Ответьте, пожалуйста вот на такой вопрос:)как создать файл, что-нить записать в него, удалить файл с диска, памяти, переместить файл, скопировать?

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

Ответ

Здравствуйте, Веселый Эдик!
Ох и объемный вопрос получается то!
Ну в общем так
Досовые функции(т.е. int 21h)
3Ch-Create
3Dh-Open
3Eh-Close
3Fh-Read
40h-Write
41h-Delete
5Bh-Create New
5Ah-Create Уникальный, т.е. передаешь только путь, а Дос сама добавляет имя, которое возвращается через DS:DX
Вход (это в общем, не везде нужны все параметры)
DS:DX-полное имя файла
BX-Handle
CX-Атрибуты
AL-Способ доступа


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

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

Вопрос №528

Здравствуйте,уважаемые эксперты!!!:) :)
Ответьте, пожалуйста вот на такой вопрос:)как создать файл, что-нить записать в него, удалить файл с диска, памяти, переместить файл, скопировать?

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

Ответ

Здравствуйте, Веселый Эдик!
Вот уж действительно веселый! Нажимаешь два раза "Мой компьютер", там выбираешь в меню файл - создать - текстовый документ. Пиши туда все что хочешь, потом копируй, перемещай и уадляй (тоже правой кнопкой, но об этом - в следующий раз, ато слишком много инфы сразу вредно).


Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 53

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

Вопрос №529

Привет, уважаемые эксперты!!!:))
Ответьте, пожалуйста, на вот такой вопрос: что это за программы такие, которые загружаются в память Виндоувос:
- internat.exe
- Rundll32.exe powprof.dll
- c:\Windows\scanregw.exe /autorun
- SysTray.exe
- c:\Windows\taskmon.exe

Ответ

Здравствуйте, Веселый Эдик!
- internat.exe - переключатель клавиатуры
- Rundll32.exe powprof.dll-управление питанием
- c:\Windows\scanregw.exe /autorun-проверяет ошибки в реестре, можно выбросить, потому как тормоз при запуске
- SysTray.exe-регулятор громкости
- c:\Windows\taskmon.exe-ИМХО панель задач


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

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

Вопрос №529

Привет, уважаемые эксперты!!!:))
Ответьте, пожалуйста, на вот такой вопрос: что это за программы такие, которые загружаются в память Виндоувос:
- internat.exe
- Rundll32.exe powprof.dll
- c:\Windows\scanregw.exe /autorun
- SysTray.exe
- c:\Windows\taskmon.exe

Ответ

Здравствуйте, Веселый Эдик!

internat.exe - значок Ru/En
scanregw.exe - проверка регистра на баги
systray.exe - менеджер трея (иконочки рядом с часами)
taskmon.exe - диспетчер задач (если хочешь его увидеть, нажми
один раз Ctrl+Alt+Del)
rundll32.exe - выполняет процедуру из DLL
powprof.dll - помоему настройка параметров питания

ЗЫ: Если у тебя ATX - попробуй команду rundll user.exe,exitwindows :)


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

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

Вопрос №529

оПХБЕР, СБЮФЮЕЛШЕ ЩЙЯОЕПРШ!!!:))
нРБЕРЭРЕ, ОНФЮКСИЯРЮ, МЮ БНР РЮЙНИ БНОПНЯ: ВРН ЩРН ГЮ ОПНЦПЮЛЛШ РЮЙХЕ, ЙНРНПШЕ ГЮЦПСФЮЧРЯЪ Б ОЮЛЪРЭ бХМДНСБНЯ:
- internat.exe
- Rundll32.exe powprof.dll
- c:\Windows\scanregw.exe /autorun
- SysTray.exe
- c:\Windows\taskmon.exe

Ответ

гДПЮБЯРБСИРЕ, бЕЯЕКШИ щДХЙ!
- internat.exe - хМДХЙЮРНП ЙКЮБХЮРСПШ

- Rundll32.exe powprof.dll - СОПЮБКЪЕР ЩМЕПЦНЯАЕПЕФЕМХЕЛ

- c:\Windows\scanregw.exe /autorun - оПНБЕПЪЕР ПЕЕЯРП

- SysTray.exe - бПНДЕ АШ ПЕЦСКХПНБЙЮ ЦПНЛЙНЯРХ

- c:\Windows\taskmon.exe - ОКЮМХПНБЫХЙ


Отправил эксперт: яРЮЯ
Эксперт отправил ответов (всего): 10

Экспертная группа: оНКЭГНБЮРЕКЭЯЙЮЪ ПЮАНРЮ Я Windows

Вопрос №531

Рассылочка - класс! В смысле,нужная очень....
Так, как я новенький, сильно меня не пинайте, тем более, что первый вопрос почти полностью по Turbo Pascal 7.0
Смысел таков:
Uses Crt;
Begin
end.
Этот код на пентюхах, почему-то выдает Division by zero!!!
В режиме эмуляции DOS - тоже. TP 5.5 работает отлично.
Обращаюсь к ассемблерщикам потому, что есть далекая инфа, что проблема устраняется засылкой всего двух байт куда-то в глубину Crt. Может кто знает?
P.S. По поводу - заменить Crt на WinCrt, TP 7.0 на BorlandP 7.0, и вообще "Сиди себе на 5.5 и не вякай" - это мы в курсе... Дело в принципе!!!! Спысибо!

Ответ

Здравствуйте, Вал.Ик.!

В Startup-коде модуля CRT для корректной работы команды Delay сделан подсчёт некоего значения, где используется деление на количество команд, выполнившихся за определённый промежуток времени. На вторых пнях не успевает выполниться ни одной команды и происходит деление на 0 :(

Есть у меня тут пара фиксов + могу выслать исходники CRT (или всей BP7RTL, но лучше скачай её с сайта А. Фрунзе - http://alexfru.chat.ru).
Если надо - пиши zpsoftware@pisem.net.


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

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

Вопрос №530

драствуйте, у меня вопрос:

дело в том, что судьба заставила писать дизассемблер. Это мне удалось сделать, но не так все просто как казалось.
всем известна структура формата команды:

1-префикс команды (0-1 байт)
2-префикс размера адреса (0-1 байт)
3-префикс размера операнда (0-1 байт)
4-переопределение сегмента (0-1 байт)
5-код операции (1-2 байта)
6-MODR/M (0-1 байт)
7-SIB (0-1 байт)
8-смещение (0,1,2,4 байт)
9-непосредственный операнд (0,1,2,4 байт)

есть и меньшие поля в структуре КОП и т.д.

все было просто для разбора команд 8086, но когда я начинал разбор всех команд 486p стали возникать проблемы:
не всегда можно определить по общей схеме - какая команда разбирается. Приходилось работать не по общему алгоритму а разбивать команды на группы и только так разбирать.

теперь сам вопрос - есть ли опыт дезассемблирования по "глобальной схеме разбора команд" 486р или выше. Чисто табличные преобразования не предлогать.

(по данной теме готов общаться со специалистами. mailto:swan2000@aport2000.ru )

Ответ

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

У меня тут валяются пара исходничков дисассемблеров и дебаггеров (со встроенным дисассемблером). Если надо - пиши zpsoftware@pisem.net


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

Экспертная группа: Дизассемблеры

Вопрос №525

Здравствуйте!
У меня усть вопросики :)
1) Где можно найти tasm32.exe, tlink32.exe & import32.lib
2) Сейчас я пользуюсь Масмом, но у меня есть проблемка с созданием экзешника вот, то что я делаю.....
файл Digger.asm:

includelib c:\masm\lib\kernel32.lib
extrn _imp_ExitProcess@4:dword
ExitProcess equ _imp_ExitProcess@4

.386
.model flat,stdcall
option casemap:none
.data
;Инициализированные данные
.data?
;Неинициализированные данные
.code
start: ;Точка входа

push 0
call ExitProcess ;Выход из программы
end start
----------------
А потом я запускаю...
masm /Ic:\masm digger.asm
link digger.obj,digger.exe
----------------
Выводиться сообщение об шибке...
Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992. All rights reserved.

List File [nul.map]:
Libraries [.lib]:
Definitions File [nul.def]:
LINK : warning L4021: no stack segment

digger.obj(digger.asm) : error L2029: '_IMP_EXITPROCESS@4' : unresolved external



There was 1 error detected
----------------------
Может я неправильно создал kernal32.lib????
НО kernal32.lib от Visual C++ не подошёл!!!!
ии я сделал
implib.exe kernal32.lib kernal32.dll
(предварительно скопировав dll в ту директорию где запускал implib :)

Помогите!!!



Ответ

Здравствуйте, Dmitriy!
Tasm32, tlink32 & import32.lib входят в дистрибутив Tasmа (версия 5, насчет 4 не знаю, но в 3 вроде бы нет).


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

Экспертная группа: Работа с MASM/TASM

Вопрос №531

Рассылочка - класс! В смысле,нужная очень....
Так, как я новенький, сильно меня не пинайте, тем более, что первый вопрос почти полностью по Turbo Pascal 7.0
Смысел таков:
Uses Crt;
Begin
end.
Этот код на пентюхах, почему-то выдает Division by zero!!!
В режиме эмуляции DOS - тоже. TP 5.5 работает отлично.
Обращаюсь к ассемблерщикам потому, что есть далекая инфа, что проблема устраняется засылкой всего двух байт куда-то в глубину Crt. Может кто знает?
P.S. По поводу - заменить Crt на WinCrt, TP 7.0 на BorlandP 7.0, и вообще "Сиди себе на 5.5 и не вякай" - это мы в курсе... Дело в принципе!!!! Спысибо!

Ответ

Здравствуйте, Вал.Ик.!
Чувак! Ты гонишь! Ни под BP ни под Turbo, ни кактх проблем не заметил (версия 7.0).


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

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

Вопрос №532

Большое спасибо за предоставленную информацию Василию.
Вопрос. Неделю как наголо переставил Windows(98SE+bag fix,update), установлена VStudio.
Началось с того, что при работе в on-line IE 5.0 начал предлагать поправить, отладить загружаемые страницы.
Первым"выключился" сайт VBSreets/LaVision на предмет
скачивания файлов, выдает ошибку:

/lavision/
Microsoft OLE DB Provider for ODBC Drivers '80004005'
...."сикарашки"...

/lavision/dowload_new.asp,line 35
------
При попытке же отослать с этого же сайта письмо
вышло сообщение
что произошла внутренняя ошибка сервера,
и завершить запрос он не смог..

Кончилось тем, что не могу вообще ни чего скачать, даже на страницы не все грузятся.
Эксплорер "говорит" в строке статуса, узел найден и Готово,
и чистый лист.
Или Невозможно отобразить страницу.
Теперь сам вопрос:-"))
Есть ли способ вылечить эту беду, она постигла меня первый раз, окружающие частенько ее переживают.
Винд переставлять в "лом". Точнее нет возможности.
Да и всю жизнь не будешь переставлять.
Вдруг кто то касался этой темы.
А мне ой как надо софт по Асму докачивать.

Ответ

Здравствуйте, Oleg!
Ну это явно IE 5.0 глючит, у меня такая лажа тоже была и не надо переустанавливать Win, а тем более звонить Биллу Гейтсу, просто переустанови IE 5.0(или 5.5) или зайди в Панель инструментов, затем в "Установка и удаление программ", найди в списке установленных прог
IE 5.0(но может и не быть) нажми "Добавить/удалить", в появившемся окне выбери пункт "Восстановление IE" и твои беды кончатся.


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

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

Вопрос №533

КАК НАУЧИТСЯ ПРОГРАМИРОВТЬ?И ГДЕ ВЗЯТЬ_АССЕМБЛЕР? ПИШИТЕ НА
BACINSKAYA@MTU-NET.RU ИЛИ В ФОРУМЕ НА WWW.SES.SITECITY.RU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Ответ

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

MASM и TASM валяются на сайте www.kalashnikoff.ru
Там же валяется книга Абеля по программированию на ассемблере.
Там же можно взять архив рассылки "Ассемблер? Это просто! Учимся программировать".
Ещё лучше подписаться на вышеуказанную рассылку (comp.prog.assembler)


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

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

Вопрос №533

КАК НАУЧИТСЯ ПРОГРАМИРОВТЬ?И ГДЕ ВЗЯТЬ_АССЕМБЛЕР? ПИШИТЕ НА
BACINSKAYA@MTU-NET.RU ИЛИ В ФОРУМЕ НА WWW.SES.SITECITY.RU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Ответ

Здравствуйте, KANE!
1. Купи себе комп
2. Купи книжку Зубков С.В., "Ассемблер, это просто", предварительно изучив С++.
3. Сиди и пиши проги, шо тебе на ум взбредут. Напишешь сам больше 10 прог объемом 200-300 строк, и ты уже не так плох...
4. Постоянно общайся с такими же как ты, очень важен живой обмен опытом; если ты живешь в ПГТ, то у тя вряд ли что выйдет толкового, токо интернет и спасет.
5. Лучше поступи на какой нить Факультет Компьютеров, там тебя на лекциях тоже чему то да вразумят.

p.s. ни в коем случае ни ходи ни на какие курсы, (даже если тебе будут за это платить) и ни покупай книжки типа "Windows 98:за и против" объемом более 1000 страниц.
а насчет скачивания - www.kalashnikoff.ru там и ройся. и всех туда и посылай.


Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 54

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

Вопрос №533

КАК НАУЧИТСЯ ПРОГРАМИРОВТЬ?И ГДЕ ВЗЯТЬ_АССЕМБЛЕР? ПИШИТЕ НА
BACINSKAYA@MTU-NET.RU ИЛИ В ФОРУМЕ НА WWW.SES.SITECITY.RU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Ответ

Здравствуйте, KANE!
1. Купи себе комп
2. Купи книжку Зубков С.В., "Ассемблер, это просто", предварительно изучив С++.
3. Сиди и пиши проги, шо тебе на ум взбредут. Напишешь сам больше 10 прог объемом 200-300 строк, и ты уже не так плох...
4. Постоянно общайся с такими же как ты, очень важен живой обмен опытом; если ты живешь в ПГТ, то у тя вряд ли что выйдет толкового, токо интернет и спасет.
5. Лучше поступи на какой нить Факультет Компьютеров, там тебя на лекциях тоже чему то да вразумят.

p.s. ни в коем случае ни ходи ни на какие курсы, (даже если тебе будут за это платить) и ни покупай книжки типа "Windows 98:за и против" объемом более 1000 страниц.
а насчет скачивания - www.kalashnikoff.ru там и ройся. и всех туда и посылай.

p.p.s. есть такие чуваки, которые стали крутыми хацкерами (ненавижу это слово) токо благодаря отсутствию компа, как такогого, писали свои проги на бумажках ночью, (привет Леша!! ;)


Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 55

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

Вопрос №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]
прога прилагается

Ответ

Здравствуйте, Дмитрий!
По-видимому прога одна из первых, но ничего все мы через это проходили, вот лови оптимизированную и учти:
1. В такой экран очищать необязательно.
2. Зачем использовал, int 20, если затем идет ret.
3. Для удобства и улучшения читабильности ставь табуляцию,
после команд.
4. Один символ проще выводить bios - функциями:0eh, 0ah, 09h.
И совет на будущее - пиши проги поинтересней!
Если что непонятно, то orlando@kaluga.ru

Приложение:


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

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

Вопрос №534

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

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

Ответ

Уважаемый Дмитрий!
Оптимизация твоей проги:
1. Процедура очистки экрана: замени свои 6 строк на 2 эти:
mov ax,0003h
int 10h
(текстовый режим 25х80 + очистка экрана) - так короче и быстрее.
2. mov al,offset string[di] - запись не очень корректна, я б даже сказал, я непонимаю, почему прога всетаки работает? ведь тебе нада поместить КОД СИМВОЛ-а из строки string, а не СМЕЩЕНИЕ этой строки, короче mov al,string[di] на удивление дает тот же самый результат... это, право же, странно... ;(
3. mov ah,09h
mov dx,offset x
int 21h
- это что, какой-то уникальный переход на новую строку!? Я такого еще не встречал нигде. Посмотри, как я переделал этот момент.
4. Самое главное: у тебя в проге 50% текста ПОЛНОСТЬЮ повторяется!!! это вообще недопустимо ни при каких обстоятельствах!!!
5. Нах$$$ в конце влепил "чтение символа с ожиданием", и так все видно.
6. Заканчивать ret - на один байт короче...
7. Никакие lods тут не проканают, код токо длиннннее станет и путаннннее

p.s. посмотрим, кто напишет короче или быстрее, чем мой вариант ;)

Приложение:


Отправил эксперт: Broken Sword
Эксперт отправил ответов (всего): 56

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

В избранное