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

RusFAQ.ru: программирование на языке Assembler


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

RusFAQ.ru: программирование на языке Assembler

Выпуск № 660
от 07.11.2003, 22:20

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 4447
Отправлено ответов: 12826
Активность: 288.4 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

ASMодей
Статус: Профессиональный
Общий рейтинг: 112.7
[Подробней >>]
Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 142.5
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
Mortus Alighieri
Статус: Начальный
Общий рейтинг: 118.96
[Подробней >>]
 
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 149.27
URL: Программирование
[Подробней >>]
dr_dolphin
Статус: Доверительный
Общий рейтинг: 118.81
[Подробней >>]
never_again
Статус: Доверительный
Общий рейтинг: 138.83
[Подробней >>]
 
Portnov
Статус: Профессиональный
Общий рейтинг: 108.2
URL: Мой сайтик...
[Подробней >>]
_vt
Статус: Профессиональный
Общий рейтинг: 120.52
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 122.94
URL: Эхоконференция по вирмейкингу
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 4411. Здравствуйте, уважаемые эксперты! Вопрос, наверное, не по теме, но не к кому обратиться, кроме "... (ответов: 2)
Вопрос № 4412. Хотел бы написать на асм код переключения раскладки клавиатуры с рус на лат и обратно. Подскажите в ... (ответов: 3)
Вопрос № 4413. Всем читать! http://www.bib.com.ua... (ответов: 1)
Вопрос № 4414. ЭДРАВСТВУЙТЕ.ПОЖАЛУЙСТА,ПРИШЛИТЕ ПРОГРАММУ; ВВЕДИТЕ С КЛАВИАТУРЫ МАССИВ Z(5) В КОТОРОМ КАЖЛЫЙ ЗЛЕМЕ... (ответов: 2)
Вопрос № 4416. Я продолжаю вопрос 4390 Вот все заладили offset, а в nasm нет слова offset. Я просто не уточнил, что... (ответов: 5)
Вопрос № 4417. Люди , если кто-нибудь знает, где есть подробная инфа по портам I/O жесткого диска , а также по прог... (ответов: 2)
Вопрос № 4418. Пожалуйста помогите! мне посоветовали обратиться именно к ВАМ (Ассемблерщикам) за ответом! Так вот з... (ответов: 3)
Вопрос № 4419. 1. Насколько критично не очищать стек перед вызовом Push 0;CALL ExitProcess@4 (напушил перед этим па... (ответов: 6)
Вопрос № 4420. КАК ВЫЗВАТЬ RING0 ИЗ DELPHI6 МНЕ НУЖЕН МОДУЛЬ OBJ ИЛИ ВЫЗВАТЬ ПРЕРЫВАНИЯ 13H ИЗ DELPHI6 Я НА РУССКОМ... (ответов: 2)

Вопросов: 9, ответов: 26


 Вопрос № 4411

Здравствуйте, уважаемые эксперты!
Вопрос, наверное, не по теме, но не к кому обратиться, кроме "бывалых".
Подскажите, пожалуйста, как можно грамотно по законам зарегистрировать свои права на созданную программу? Есть ли возможность зарегистрировать авторские права не на готовый исполняемый код, а на алгоритм или принцип работы программы? Чем в этом плане отличаются Российское, Украинское, международное законодательство? Буду благодарен за полезные ссылки на эту тематику.



Вопрос отправлен: 03.11.2003, 07:06
Отправитель: Ярослав

[Следующий вопрос >>] [Список вопросов]

Отвечает ASMодей

Приветствую Вас, Ярослав!
Ищи ссылки на РОСАПО. Там все будет написано.

Ответ отправлен: 04.11.2003, 08:21
Отправитель: ASMодей


Отвечает Евгений Иванов

Здравствуйте, Ярослав!
Это патент называется. Ты как бы называешь новые принципы работы или обработки данных, новое оформление или устройство...
По сути, для программ это будет новый тип алгоритма уже существующих, или
совершенно новый тип, ранее не существовавший...
Я бы посоветовал получше защитить программу - определённый уровень вскрывателей отсеются на этом этапе! Потом можно придумать ещё защиту; например, каждому индивидуально
Ассемблируется программа и в ней что-то изменяется. А чтобы она работала, нужно прислать денег и тогда ты отсылаешь этот кусочек... Ну ещё проверка на тот-же комп.. А если смена оного, то перерегистрация... :-)
Бывай!

* EMan: -=- Любовь существует! =-=


Ответ отправлен: 03.11.2003, 08:32
Отправитель: Евгений Иванов


 Вопрос № 4412

Хотел бы написать на асм код переключения раскладки
клавиатуры с рус на лат и обратно. Подскажите в каком
направлении двигаться. Имею опыт написания небольших
программ на асме



Вопрос отправлен: 03.11.2003, 11:40
Отправитель: olegue (olg@tut.by)

[Следующий вопрос >>] [Список вопросов]

Отвечает Mortus Alighieri

Приветствую Вас, olegue!
смотри
HKL LoadKeyboardLayout(
LPCTSTR pwszKLID, // name of layout to load
UINT Flags // keyboard layout flags
);
и
UINT GetKeyboardLayoutList(
int nBuff, // size of buffer in array element
HKL FAR *lpList // buffer for keyboard layout handles
);
.

Ответ отправлен: 04.11.2003, 17:44
Отправитель: Mortus Alighieri


Отвечает Bob Johnson

Приветствую Вас, olegue!
ActivateKeyboardLayout - остальное по see also (точнее, Keyboard Input Functions - ссылка внизу).

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 05.11.2003, 21:17
Отправитель: Bob Johnson


Отвечает dr_dolphin

Добрый день, olegue!
Воспользуйтесь функцией Windows API ActivateKeyboardLayout
Пока !


Ответ отправлен: 03.11.2003, 16:00
Отправитель: dr_dolphin


 Вопрос № 4413

Всем читать!

http://www.bib.com.ua/cgi-bin/razdel.cgi?asm




Вопрос отправлен: 03.11.2003, 12:19
Отправитель: Eugene Ivanov (super21@mail.nnov.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает never_again

Добрый день, Eugene Ivanov!
Не плохо. Совсем, даже, не пдохо. Спасибо за ссылку.


Ответ отправлен: 03.11.2003, 14:39
Отправитель: never_again


 Вопрос № 4414

ЭДРАВСТВУЙТЕ.ПОЖАЛУЙСТА,ПРИШЛИТЕ ПРОГРАММУ;
ВВЕДИТЕ С КЛАВИАТУРЫ МАССИВ Z(5) В КОТОРОМ КАЖЛЫЙ ЗЛЕМЕНТ СОСТОИТ ИЗ ДВУХ СИМВОЛОВ.В КАЖДОМ ЭЛЕМЕНТЕ ОКРУГЛИТЬ БИТЫ ПОД ЧЕТНЫМ НОМЕРОМ И ВЫВЕСТИ ДВОЙНОЕ ИЗОБРАЖЕНИЕ НА ЭКРАН.
И ЧТО ТАКОЕ 'МАСКИРАЦИЯ'?



Вопрос отправлен: 03.11.2003, 12:45
Отправитель: АРЗУ (PLUTONKA@list.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает never_again

Добрый день, АРЗУ!
>> ОКРУГЛИТЬ БИТЫ
это сто значит? обнулить? установить? заменить на compliment?
>>ВЫВЕСТИ ДВОЙНОЕ ИЗОБРАЖЕНИЕ
В двоичной системе или стеро картинок захотелось?
>>ЧТО ТАКОЕ 'МАСКИРАЦИЯ'
С русской терминологией у меня плоховато но если МАСКИРАЦИЯ это Masking на инглише, то это:
скажем есть у тебя запись (она же record)
recordname RECORD fieldname:width [[= expression]]
[[, fieldname:width [[= expression]]]]...
сама RECORD она 16 битная т.е размером с word.
она разбита на битные поля (fieldname)
пример:
some RECORD field1:5,field2:5,field3:2,field4:4
это значит что биты 0-3 отданы полю field4
4-5 ----//----- field3
6-10 ---//----- field2
11-15 --//----- field1
потом делаешь что-то в роде этого:
mov ax,MASK field2
теперь биты 6-10 регистра ах установлены в 1, а все остальные обнулены.
теперь ты свободен "одеть маску" поля field2
не любой 16 битный регистр или переменную типа word.
Пример:
допустим stam переменная типа word
"одеваем" на неё маску field2:
mov ax,MASK field2
and stam,ax
P.S. возможны некоторые неточности. давно уже не пользовался Record'ом.




Ответ отправлен: 03.11.2003, 14:32
Отправитель: never_again


Отвечает Евгений Иванов

Доброе время суток, АРЗУ!
Берёшь напильник и округляешь биты!
С этим разобрались...
А маскирование - это оставление только тех бит, которые тебе необходимы:
Например, нужно стереть биты 2 и 4, а вот биты 1 и 3 установить, а на место 2 и 4 поставить эти же биты из другого байта. Делаем вот так:
mov al, [byte1]
mov ah,[byte2]
and al, 11101011b
and ah,00010100b
or al, 1010b
or al,ah
Удачи!
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 04.11.2003, 01:00
Отправитель: Евгений Иванов


 Вопрос № 4416

Я продолжаю вопрос 4390
Вот все заладили offset, а в nasm нет слова offset. Я просто не уточнил, что для nasm. А ведь он и кладет в ax адрес label.
Отдельные ответы для:
Евгений Иванов
Я и имел в виду адрес. Если было бы надо я бы поставил скобки, но так как вопрос был в lea, а в ее названии и есть слово "адрес", я именно так и сделал. И чем так плох реальный режим. Пусть самый первый, но заметьте более понятный и простой(я НЕ сказал, что защищенный не понимаю, просто это другой режим). Я лично знаю 2х людей, у которых настолько слабые компы, что ничего кроме ДОС у них не идет. Конечно 386, но с 4 метрами оперативной памяти.( Хочется поставить двоеточие с открывающейся скобочкой, но не понравились вы мне. Не буду. ) Да и еще в лабораториях у нас под ДОС-ом стоит установка по рентгенографическому фазовому анализу и еще одна по исследованию МДП - структур(полевые транзисторы и бла-бла-бла).
never_again
При чем тут С. Я могу отличить: "взять значение находящееся по адресу label и поместить его в ax" и "поместить адрес(смещение в сегменте данных) label в ax". Просто меня смущало слово "эффективный".
PUSH && Portnov
Самые нормальные ответы. Спасибо.
Спешиал фенкс ту : Ayl. Не поленился ответить, предположив, что я перепутал первые и последние 64Кб. Да кстати не только himem.sys может открыть А20:))(Ну не обижайтесь, это шутка. )(кстати довольно извращенский метод включения, собственно как и сам переход в защищенный режим)
----------------------------------
Далее. Насчет примера я конечно загнул.(Просто в универе в инете сидел, торопился) Я помню точно, что он у меня был в лекциях по паскалю. Но вот не нашел. Поэтому приведу пример другой:
0:7e00 == 7e00:0 . И могу ТОЧНО сказать где он был: сайт asmdev.narod.ru. Рассылка. Номер - 4. После заголовка "Выпуск 4". 2 абзац. " ... boot sector загружается в память по адресу 0:7c00h ..." И второе вхождение: описывается переменная SETUP_SEG == 0x7e00.( Всего 512 байт разницы не играют роли.) И делается прыжок: jmp SETUP_SEG:0. Вот и подтверждение. Сначала 7c00 фигурирует как сегмент, а затем как смещение в нулевом сегменте. Недоверять ему(некто Dron) я не могу, т.к. это не первый пример, который я вижу. Вот не понимаю почему так и все(про правила вычисления физического адреса в RM рассказывать не надо, именно следуя им ничего не получается). Вникните в вопрос, он действительно интересный.
Да кстати, бывает ли Зубков в электронном виде. Что-то часто его вспоминают. Если нет, то ISBN + издательство подойдет.
Юному осописателю(только чур не обижаться) по впросу 4381 и 4372(Переключение видео режимов в защищенном режиме) хотелось бы посоветовать обратиться сюда: http://www.talula.demon.co.uk/freebe/. Качай архивец и разбирайся. Только вот у меня не хватило сил. А вообще у товарищей Фроловых(сильные ребята) есть книжка по VESA&SVGA. Если денег много можешь купить. Только вот адреса их странички не помню. А там прямая ссылка на магазин этой книгой торгующий. (Стоп. Меня терзают смутные сомнения. По-моему нечто вроде frolov.pp.ru или frolov.ppr.ru было. )



Вопрос отправлен: 03.11.2003, 16:15
Отправитель: Dead Krolik

[Следующий вопрос >>] [Список вопросов]

Отвечает Portnov

Приветствую Вас, Dead Krolik!
-------------------
> Недоверять ему(некто Dron)...
Да, Dron"у надо доверять... Между прочим, когда-то он был одним из нас, и разработка этой AsmOS (позже переименованной в Dronix) начиналась на kalashnikoff.ru... Были времена... :_(
Читайте выпуск внимательнее. Там не утверждается, что 7e00:0=0:7c00! 7e00:0 - это адрес для загрузки SETUP"а, а не адрес загрузки boot sector"а. Адреса это, конечно же, разные.
С уважением, Portnov.


Ответ отправлен: 04.11.2003, 14:41
Отправитель: Portnov


Отвечает never_again

Приветствую Вас, Dead Krolik!
>> Вот не понимаю почему так и все
0+10=10
10+0=10
так почему же 0+7е00 должно отличаться от 7е00+0 ???

Ответ отправлен: 04.11.2003, 11:31
Отправитель: never_again


Отвечает Bob Johnson

Приветствую Вас, Dead Krolik!
> Если было бы надо я бы поставил скобки, но так как вопрос был в lea, а в ее названии и есть слово "адрес", я именно так и сделал.
Между прочим, правильно писать
lea ax, [my_var]
а не
lea ax, my_var
Потому что вторым аргументом в lea является переменная в памяти, так же как и в mov. А вообще же lea была придумана только для удобства (может это уже писали, я пропустил первый твой вопрос) - вот если у тебя есть процедура с локальными переменными, а тебе из нее надо вызвать еще одну, которой передать адрес одной из этих переменных как параметр. Как ты будешь делать?
mov eax, ebp
sub eax, xxx
?
это две команды. В то время как можно
lea eax, [yyy]
Вообще же lea, как я понимаю, была сделана из-за того, что процессор, в принципе, умеет вычислять адрес и делает это в команде mov, просто в ней этот вычисленный адрес пропадает после операции чтения или записи.
> Я лично знаю 2х людей, у которых настолько слабые компы, что ничего кроме ДОС у них не идет
Ну что тут можно сказать, передай им привет... Регрессия никогда не являлась показателем, которым следует гордиться.
> 0:7e00 == 7e00:0
Это ты видимо что-то покурил. 0:7E00 = 7E0:0000 = 7E000, но не более того. В реальном режиме номер сегмента умножается на 16 (или сдвигается на 4 разр. влево), после чего к нему добавляется смещение. Все остальное - это только марихуана... К тому же boot сектор и setup_seg - это не одно и то же.

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 05.11.2003, 21:18
Отправитель: Bob Johnson


Отвечает Евгений Иванов

Добрый день, Dead Krolik!
Схоластический спор; куда я попал?! :)
Но всё же скажу:
LEA и MOV - это СОВЕРШЕННО разные команды с разными кодами!
MOV вычисляет тоже этот самый EA, использует его для перемещения данных, а потом ОН исчезает...
А вот LEA вычисляет этот самый адрес И помещает его в Destination...
Типа:
mov x,y{
lea a,x
copy y TO a
}
И нечего здесь пустые споры БЕССМЫСЛЕННЫЕ устраивать!!!
А насчёт улыбок :)
А чего тут - ты можешь и на калькуляторе MK что-то делать, только далеко ли уедешь?!
Я тоже какое-то время никак не хотел переходить на win3.1 !! Не то, что на win2000 или ещё чего...
Сидел в ДОС. Потому что машина была 386 и памяти 4 Мб.
Мне ХВАТАЛО для моих тогдашних потребностей...
Изучал программирование, игры и просто изучение компа...
А сейчас я не могу без многозадачности! У меня работают сразу одновременно:
1.FAR (а то и по 3 экземпляра!)
2.MyIE2 - ну браузер в общем...
3.Почтовик
4.FlashGet
5.Часы Chameleon Clock
6.WinAmp 5.0
7.Eman
8.Парочка экземпляров IDA :-)
9.Miranda
10. МОГУ ещё что хошь запустить!!!
А ты говоришь ДОС и 4 Мб!
Да даже если звук обрабатывать или видео - то мощная машина и много памяти НУЖНО просто не из финта, а РЕАЛЬНО для нормальной работы...
И вот что интересно!
Недавно перешёл на win2000 с win98 - совершенно другие ощущения.
Система НИ РАЗУ не повисла сама!! Могу работать неделю и как-будто только что запустил, забыл даже о перезагрузках и тому подобным вещям...
Чао!

* EMan: -=- Любовь существует! =-=


Ответ отправлен: 04.11.2003, 02:08
Отправитель: Евгений Иванов


Отвечает _vt

Здравствуйте, Dead Krolik!
> Вот все заладили offset, а в nasm нет слова offset
Так я и написал, в некоторых компиляторах так и пишется mov ax, label, что по синтаксису MASM эквивалентно mov ax, offset label
> Да кстати, бывает ли Зубков в электронном виде
Да, например, здесь...
А по поводу адресации в реальном режиме - советую обратиться к книге "The Art of Assembly Language"(имеется в электронном виде)... Приведу некоторые куски:
On the 8086, 8088, 80186, and 80188 (and other processors operating in real mode), the
function that maps a segment to a physical address is very simple. The CPU multiplies the
segment value by sixteen (10h) and adds the offset portion. For example, consider the segmented address: 1000:1F00. To convert this to a physical address you multiply the segment value (1000h) by sixteen. Multiplying by the radix is very easy. Just append a zero to
the end of the number. Appending a zero to 1000h produces 10000h. Add 1F00h to this to
obtain 11F00h. So 11F00h is the physical address that corresponds to the segmented
address 1000:1F00 (see Figure 4.4).
Warning: A very common mistake people make when performing this computation is
to forget they are working in hexadecimal, not decimal. It is surprising to see how many
people add 9+1 and get 10h rather than the correct answer 0Ah.
...
When operating in real mode, an interesting problem develops. You may refer to a
single object in memory using several different addresses. Consider the address from the
previous examples, 1000:1F00. There are several different memory addresses that refer to
the same physical address. For example, 11F0:0, 1100:F00, and even 1080:1700 all correspond
to physical address 11F00h. When working with certain data types and especially
when comparing pointers, it's convenient if segmented addresses point at different objects
in memory when their bit representations are different. Clearly this is not always the case
in real mode on an 80x86 processor.
Fortunately, there is an easy way to avoid this problem. If you need to compare two
addresses for (in)equality, you can use normalized addresses. Normalized addresses take a
special form so they are all unique. That is, unless two normalized segmented values are
exactly the same, they do not point at the same object in memory.
...
Normalized pointers that take this form are very easy to convert to a physical address. All
you need to do is append the single hexadecimal digit of the offset to the segment value.
The normalized form of 1000:1F00 is 11F0:0. You can obtain the physical address by
appending the offset (zero) to the end of 11F0 yielding 11F00.
It is very easy to convert an arbitrary segmented value to a normalized address. First,
convert your segmented address to a physical address using the "multiply by 16 and add
in the offset" function. Then slap a colon between the last two digits of the five-digit
result:
1000:1F00 -> 11F00 -> 11F0:0

*** E-Man - can help you***


Ответ отправлен: 05.11.2003, 23:14
Отправитель: _vt


 Вопрос № 4417

Люди , если кто-нибудь знает, где есть подробная инфа по портам I/O жесткого диска , а также по программированию контроллера прерываний 8259 ответьте пожалуйста.Было бы неплохо также информацию о порте EBh и линии А20.



Вопрос отправлен: 03.11.2003, 16:27
Отправитель: zurab

[Следующий вопрос >>] [Список вопросов]

Отвечает never_again

Приветствую Вас, zurab!
только не читайте этот порт как "е" "би" "х"! :))


Ответ отправлен: 04.11.2003, 11:21
Отправитель: never_again


Отвечает Евгений Иванов

Приветствую Вас, zurab!
По моему, ты в BIOS полез... :-)
dospage.by.ru не пробовал?

* EMan: -=- Любовь существует! =-=


Ответ отправлен: 04.11.2003, 02:10
Отправитель: Евгений Иванов


 Вопрос № 4418

Пожалуйста помогите! мне посоветовали обратиться именно к ВАМ (Ассемблерщикам) за ответом! Так вот знаете программу ArtMoney?
if(!WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew,
sizeof(pfnNew), NULL))
{
AnsiString str=IntToStr((int)GetLastError());
if(pfnNew==NULL)MessageBox(NULL,"ppfn is null./n Why?","error",MB_OK );
MessageBox(NULL,"Writeprocessmemory",str.c_str(),MB_OK );
}
Так вот. Первая месага не всплывает-т.е.изменяемый адрес не нулевой, а вторая
появляется причем код ошибки 998. В Winerror.h она описана как
//#define ERROR_NOACCESS 998L
Что у меня нет доступа к этому участку памяти
но она должна изменять байты, не обращая внимания на тип защиты страницы памяти! Может что то не так ?



Вопрос отправлен: 03.11.2003, 16:32
Отправитель: GameMakeR

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Приветствую Вас, GameMakeR!
Наверное, надо разрешить запись в данный участок. Поможет тебе функция VirtualProtect(Ex).

*** E-Man - can help you***


Ответ отправлен: 03.11.2003, 19:55
Отправитель: _vt


Отвечает Mortus Alighieri

Здравствуйте, GameMakeR!
The WriteProcessMemory function writes memory in a specified process. The entire area to be written to must be accessible, or the operation fails.
BOOL WriteProcessMemory(
HANDLE hProcess, // handle to process whose memory is written to
LPVOID lpBaseAddress, // address to start writing to
LPVOID lpBuffer, // pointer to buffer to write data to
DWORD nSize, // number of bytes to write
LPDWORD lpNumberOfBytesWritten // actual number of bytes written
);

Parameters:
hProcess
Identifies an open handle to a process whose memory is to be written to. The handle must have PROCESS_VM_WRITE and PROCESS_VM_OPERATION access to the process.
обрати внимание на последнее предложение.

Ответ отправлен: 04.11.2003, 17:44
Отправитель: Mortus Alighieri


Отвечает Bob Johnson

Доброе время суток, GameMakeR!
А что ты хочешь изменить и в какой винде? Может ты хочешь в 98-й подправить верхнюю память (выше 2-х гб)? Так это нельзя...

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 05.11.2003, 21:18
Отправитель: Bob Johnson


 Вопрос № 4419

1. Насколько критично не очищать стек перед вызовом Push 0;CALL ExitProcess@4 (напушил перед этим пару DWORD и не вынул. Я понимаю - дурной стиль, но вопрос теоретический)?
2. Юзаю MASM32 8.0 - метки в разных процедурах повторяются и это нормально (типа локальные). Но если совпадают в процедуре и основном теле программы - то ML ругается. Можно ли тут что-нить предпринять(кроме изменения имени меток)?



Вопрос отправлен: 03.11.2003, 17:04
Отправитель: IanPo

[Следующий вопрос >>] [Список вопросов]

Отвечает Portnov

Доброе время суток, IanPo!
1. Если пару DWORD"ов, то ничего особенного. А вот массивы там в стеке оставлять или большие структуры - грозит переполнением стека.
2. По-моему, так...
mylabel:
...
myproc proc
LOCAL mylabel
...
mylabel:
...
myproc endp
Хотя могу ошибаться, с Masm32 давно не работал...
С уважением, Portnov.

Ответ отправлен: 04.11.2003, 14:57
Отправитель: Portnov


Отвечает Bob Johnson

Приветствую Вас, IanPo!
1. Совершенно некритично. Ты вообще можешь засорять стек столько, сколько хочешь, главное чтобы его размер не дошел до предела (вроде 1 мб) и ты не сделал ret по неверному адресу. А вот что плохой стиль - это точно.
2. Не пиши в программе меток с такими же именами.

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 05.11.2003, 21:19
Отправитель: Bob Johnson


Отвечает never_again

Здравствуйте, IanPo!
1) а когда хирург забывает скальпель внутри пациента? пациент конечно жив но чувствует себя не очень то и комфортно. так почему, спрашивается, система должна спокойно существовать с забитым стаком и при этом помалкивать? Винда конечно молчит и всё проглатывает, а вот под ДОСом за такие программы надо руки отбивать.
2) ну добавляй к меткам разные, там, значки типа '@' или циферки какие если уж совсем имя менять не хочешь.

Ответ отправлен: 04.11.2003, 11:17
Отправитель: never_again


Отвечает Mortus Alighieri

Доброе время суток, IanPo!
i. win - PM OS, и это не критично:
terminating a process does not necessarily remove the process object from the operating system. A process object is deleted when the last handle to the process is closed.
ii. в макросе или функции ( MACRO / PROC ) попробуй писать
LOCAL label:


Ответ отправлен: 04.11.2003, 17:44
Отправитель: Mortus Alighieri


Отвечает Maverick

Доброе время суток, IanPo!
1. При практических изуверствах я ошибок не встречал. Я так понимаю, что виндовый загрузчик чистит стек после завершения процесса. Можешь остовлять невыровненным короче.


Ответ отправлен: 05.11.2003, 13:27
Отправитель: Maverick


Отвечает Евгений Иванов

Доброе время суток, IanPo!
1.Лучше стек нормализовывать, он не резиновый!
Но с этой подпрограммой не важно - она стек сама нормализовать должна!

* EMan: -=- Любовь существует! =-=


Ответ отправлен: 04.11.2003, 02:11
Отправитель: Евгений Иванов


 Вопрос № 4420

КАК ВЫЗВАТЬ RING0 ИЗ DELPHI6 МНЕ НУЖЕН МОДУЛЬ OBJ
ИЛИ ВЫЗВАТЬ ПРЕРЫВАНИЯ 13H ИЗ DELPHI6
Я НА РУССКОМ ПЛОХО!



Вопрос отправлен: 03.11.2003, 20:20
Отправитель: Pr-Askar

[Следующий вопрос >>] [Список вопросов]

Отвечает Mortus Alighieri

Здравствуйте, Pr-Askar!
I don't think that you can do that. Why? It is impossible to switch from ring3 to the ring 0(imho). If you want your application to run in the RING0 you are to write DRIVER(win9x - vxd). Read Iczelions tutorials to know more.

Ответ отправлен: 04.11.2003, 17:45
Отправитель: Mortus Alighieri


Отвечает Maverick

Добрый день, Pr-Askar!
Можно же использовать ассемблерные вставки в делфи. Вот и вставляй. Смотря какая платформа.


Ответ отправлен: 05.11.2003, 13:27
Отправитель: Maverick



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (32)
C / C++ (26)
Perl (3)
Builder / Delphi (22)
Pascal (20)
Basic / VBA (6)
Java / JavaScript (8)
PHP (13)
Криптография (9)
WinAPI (14)
Пользователю
Windows 95/98/Me (46)
Windows NT/2000/XP (63)
"Железо" (40)
Поиск информации (28)
Администратору
Windows NT/2000/XP (39)
Linux / Unix (16)
Юристу
Гражданское право (10)
Семейное право (7)
Трудовое право (7)
КоАП (7)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное