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

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


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

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

Выпуск № 448
от 20.12.2002, 13:20

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


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

Broken Sword
Статус: Профессиональный
Общий рейтинг: 127.75
URL: моя рассылка по Protected Mode
[Подробней >>]
St
Статус: Опытный
Общий рейтинг: 115.31
[Подробней >>]
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 122.09
[Подробней >>]
 
Ayl
Статус: Профессиональный
Общий рейтинг: 117.39
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 139.21
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
Traish
Статус: Доверительный
Общий рейтинг: 133.02
[Подробней >>]
 
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 152.66
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 148.95
[Подробней >>]
igorash
Статус: Профессиональный
Общий рейтинг: 115.22
Телефон: 8(903)251-86-01
[Подробней >>]
 
ASMодей
Статус: Профессиональный
Общий рейтинг: 119.01
[Подробней >>]
Andrew Vext
Статус: Доверительный
Общий рейтинг: 107.67
[Подробней >>]
VicSimon
Статус: Начальный
Общий рейтинг: 103.5
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 114.16
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.49
URL: Страничка обо мне и моих друзьях
[Подробней >>]


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

Вопрос № 2156. Здравствуйте многоуважаемый товарищ Broken Sword! Я тут читанул Юрова конкретно, а в конце у него б... (ответов: 1)
Вопрос № 2157. У меня парочка вопросов: 1. Почему адрес cs всегда один и тот же? При создании файла на асме адрес c... (ответов: 6)
Вопрос № 2158. >Отвечает masquer >Здравствуйте, Aex! >Блин, этот вопрос появляется с периодичностью раз в неделю. С... (ответов: 5)
Вопрос № 2159. Помогите дураку! Вот исходник: ;--------------------------------------------------------------------... (ответов: 5)
Вопрос № 2160. У меня есть com.файл. Выдает на экран текст. Я его записал boot сектор fdd. Только вот там она текст... (ответов: 8)
Вопрос № 2161. Уважаемые эксперты. Хочу заняться программированием на ассемблере под Linux. 1)Как там в линухе вызы... (ответов: 3)
Вопрос № 2162. Может ли кто-нибудь рассказать о структуре памяти после загрузки компа(Что и где находится, где Bios... (ответов: 2)
Вопрос № 2163. Здравствуйте! не дайте погибнуть! очень нужно написать резидент, в котором по hot-key вызывалась как... (ответов: 2)
Вопрос № 2164. >>DrawLineOnTexture - Ты меня извени эта функция вообще не существует. Я же сказал нет такой функции... (ответов: 1)
Вопрос № 2165. Здраствуйте! Так-с-с. СРазу перейдём к вопросам! 1. Устройство памяти во всех ОСях одинаково??? (по... (ответов: 3)
Вопрос № 2166. Всем привет! Не подскажет как вставить растровое изображение в RichEdit? Желателен ответ в виде прим... (ответов: 1)

Вопросов: 11, ответов: 37


 Вопрос № 2156

Здравствуйте многоуважаемый товарищ Broken Sword!
Я тут читанул Юрова конкретно, а в конце у него было про защищённый режим, вобщем прочитал, вроде ок, но на следущий день из всей защищёнки вспомнить смог тока 4ГБ памяти, про то что прерывания по-другому обрабатываются, всякие регистры суперские 64битные и многозадачность.... А тут тихонько шабашил по wasm.ru и нашёл ваши статьи про защищённый режим из рассылки (кстати подписался на неё тож) - и начал читать, клёво вы пишите! Всё потихоньку проясняется.
Тока вот тут вопрос - вы в первом выпуске написали следущее:
----------
...В процессоре нет такого бита, который бы четко отвечал за переключение между этими двумя режимами...
----------
Вот... А вот у Юрова написано, что в защищённый режим можно входить просто обратив бит 0 cro0 aka pe в 1.
и вот такой кодик у него:
mov eax, cr0
or eax, 0001h
mov cr0, eax ;и типа теперь мы уж0 в защищёнке
Дословно цитирую "Последняя команда mov переводит микропроцессор в защищённый режим" © Юров.
Значит есть такой бит? Или тогда разъясните pls чаво я не догнал...
С уважением.



Вопрос отправлен: 15.12.2002, 13:35
Отправитель: Эдвард Самохвалов (zeleniy_kot@yahoo.com)

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

Отвечает Broken Sword

Добрый день, Эдвард Самохвалов!
под "этими" подразумевалась страничная и сегментная организация памяти, а никак не реальный и защищенный режим (это ясно из контекста предшествующего и последующего предложений).

Ответ отправлен: 16.12.2002, 00:56
Отправитель: Broken Sword


 Вопрос № 2157

У меня парочка вопросов:
1. Почему адрес cs всегда один и тот же? При создании файла на асме адрес cs ведь не указывается, а только смещение в сом файлах.
2. Ничего серьезного не случится, если открыть файл для чтения функцией 3dh и не закрыть его?
3. Почему AFD при дизассемблировании проги меняет cs и идет дальше совсем не в ту степь? В отличие от него, TD все делает правильно. Вот код программы:
masm
.286
cseg segment
assume cs:cseg,es:cseg,ss:cseg,ds:cseg
org 100h
Begin:
mov ah,3dh
lea dx,FileN
xor cx,cx
int 21h
mov Handle,ax
lea dx,Mok
call printman
mov ah,3eh
mov bx, Handle
int 21h
call printman
int 20h
printman proc
mov ah,9h
int 21h
ret
printman endp
Handle dw ?
Mok db "Vse OK!",0dh,0ah,"$"
FileN db "man.txt$"
cseg ends
end Begin



Вопрос отправлен: 15.12.2002, 15:44
Отправитель: Faraon

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

Отвечает St

Привет, Faraon!
1) В com-файле это как, но есть и ехе, где это не так. Или вы имеете в виду каждый раз при загрузке в дебаггер? Думаю это случайность.
2) При выходе из программы все её файлы закрываются
3) Сорри я не пользуюсь AFD
St

Ответ отправлен: 15.12.2002, 21:46
Отправитель: St


Отвечает Dark_Lord

Приветствую Вас, Faraon!
Имя файла должно заканчиваться на 00h, а не на $

Ответ отправлен: 15.12.2002, 17:17
Отправитель: Dark_Lord


Отвечает Ayl

Доброе время суток, Faraon!
1. Адрес один и тот же, потому что твоей программе выделяетс один и тот же сегмент. Попробуй запустить программу 1 раз, потом загрузить какой-либо резидент (например, keyrus) и потом заново запустить прогу. CS должен измениться.
2. Ничего страшного не случится. Хуже, если файл открыт для записи - тогда буфера могут не записаться и файл получится обрезанным.
3. Странно, должно нормально работать. Возможно, что ты в AFD пытаешься пошагово пройти по прерыванию - не помню точно, но по-моему, AFD позволяет трассировать прерывания. Соответственно, при этом изменяется CS и ты видишь совсем тебе не известный код. Попробуй пройти пошаговой отладкой без захода в процедуры - тогда должно отработать.

Ответ отправлен: 15.12.2002, 17:31
Отправитель: Ayl


Отвечает Maverick

Приветствую Вас, Faraon!
1.Потому что он указывает на сегмент кода, а прога у тебя в одном и том же сегменте. Меняется ip, который указывает на смещение след. команды.
2. Если не изменяешь файл, то не закрывай.
3.Непонял, в какую степь?


Ответ отправлен: 15.12.2002, 17:53
Отправитель: Maverick


Отвечает Traish

Здравствуйте, Faraon!
1. Потому что в пределах одного сегмента адреса считаются ближними. Зачем указывать cs:[ip], если это все равно один сегмент? Другое дело, когда речь идет о межсегментных переходах.
2. Да нет, в принципе, просто DOS может держать открытыми одновременно только определенное кол-во файлов.
3. Непонятно, зачем бы ему cs менять - документацию смотри.
Может, ты в режиме step into отлаживаешь? Тогда понятно - он заходит внутрь каждой процедуры, в том числе в обработчик прерывания.


Ответ отправлен: 15.12.2002, 18:21
Отправитель: Traish


Отвечает Bob Johnson

Добрый день, Faraon!
Обычно DOS загружает твою прогу в одно и то же место. Вот поэтому и адрес одинаковый.
2. Если ты оставишь открытый файл, его за тебя закроет ОС. Но если ты в него что-то записывал - лучше закрой сам, а то может и не сохраниться последних изменений. Вообще это считается плохим стилем программирования, если, конечно, ты не пытаешься написать прогамму минимального размера.


Ответ отправлен: 16.12.2002, 16:22
Отправитель: Bob Johnson


 Вопрос № 2158

>Отвечает masquer
>Здравствуйте, Aex!
>Блин, этот вопрос появляется с периодичностью раз в неделю. Сколько уже можно объяснять - для ДОС-программ используется компилятор для ДОС, а не для Windows.
>Или это где-то большими буквами выбить нужно... Я уже не говорю об этой мерзкой латинице...
Что ж так нервничать. Уже второй раз встречаю нервного эксперта и опять из "наших". Первый попался на Borland Newsgroups, но там TeamB ему сразу объяснила и про политкорректность, и про то, что человека надо уважать, и про то, что если бы он знал - не спрашивал бы.
В конце концов отвечать никто не заставляет. Или баллы набираем?
Это и к другим экспертам (в плане того, что ж молчите): человек после такой отповеди может больше на RusFAQ и не сунуться. Этого хотите?



Вопрос отправлен: 15.12.2002, 17:34
Отправитель: Vladimir

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

Отвечает St

Привет, Vladimir!
Вы конечно правы!
Когда я задавал первые вопросы в эту рассылку я тоже однажды получил гневный ответ, по поводу того, что задавая вопрос одному из экспертов отправил его всем. При попытке по ICQ объяснить этому молодому человеку, что объяснить мою ошибку можно и вежливо, последовал 10-минутный разговор, так ничем и не кончившийся - он так и не понял, что я ему говорю. Так что здесь есть люди с разными характерами. Однако я уже несколько месяцев являюсь экспертом и хочу сказать, что сюда приходит большое число совершенно глупых вопросов, и хотя я вроде достаточно сдержаный человек, иногда хочется (и даже иногда вместо отсутствия ответа так делается) сказать: прежде чем задавать такие вопросы прочитайте вначале хоть что-нибудь из того о чем спрашиваете! И когда число таких вопросов переваливает через некую критическую отметку, то и не выдерживаешь, даже зная, что это бесполезно и те кто в будущем снова будут писать такие вопросы не станут читать предыдущие выпуски и не увидят пожеланий в их адрес, о том как надо задавать вопросы. И это я, сравнительно недавно здесь находящийся, что же говорить о тех кто здесь уже давно! Так что все мы люди, и иногда срываемся (вот вы например тоже сорвались).
Насчет баллов, вы не правы, думаю аюсолютное большинство экспертов тратит СВОЕ ВРЕМЯ на ответы на все эти вопросы совершенно бескорыстно.
St

Ответ отправлен: 15.12.2002, 21:41
Отправитель: St


Отвечает masquer

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

Ответ отправлен: 16.12.2002, 10:49
Отправитель: masquer


Отвечает igorash

Добрый день, Vladimir!
Я согласен с masquer'ом - вопросы очень часто повоторяются, надо просто рассылку почитать и вы найдете все ответы, кроме того, хоть он и нервничал, но все же не просто сказал RTFM, а ответил на вопрос....
Дело в том, что администраторы сайта никак не соберутся сделать нормальный FAQ в котором будут ответы на подобные вопросы....

Ответ отправлен: 15.12.2002, 18:58
Отправитель: igorash


Отвечает Maverick

Добрый день, Vladimir!
Да нет, все дело втом, что когда начинают приходить ответы:"я написал программу на асме, что мне с ней делать?" и тому подобные, начинаешь задумываться а зачем тебе асм?
Вот гляди, ты получил ответ на такой вопрос и следующий раз уже не задашь его, а подумаешь, это насчет символа "О". А вот когда действительно не сможешь в чем то разобраться сам, тогда тебе с радостью помогут.
Туманно выразился, но думаю понятно, и никаких обид :)
Всякое бывает.

Ответ отправлен: 15.12.2002, 18:15
Отправитель: Maverick


Отвечает Bob Johnson

Добрый день, Vladimir!
> (в плане того, что ж молчите)
> может больше на RusFAQ и не сунуться. Этого хотите
??? Вопрос у тебя несбалансирован - то говоришь, что не надо отвечать просто так (для набора баллов), то - что не надо молчать, а то тропа народная на rusfaq зарастает.
А отвечать на одни и те же вопросы просто надоедает. Но тут у меня есть предложение - кому надоело отвечать одно и то же - просто промолчите, потому что на этот вопрос ответят более молодые эксперты (ведь говорят у нас больше всего экспертов).


Ответ отправлен: 16.12.2002, 16:22
Отправитель: Bob Johnson


 Вопрос № 2159

Помогите дураку!
Вот исходник:
;---------------------------------------------------------------------------------------------------------------------
masm
.286
cseg segment
assume cs:cseg,es:cseg,ss:cseg,ds:cseg
org 100h
Begin:
mov ah,3dh ;opening
lea dx,FileN
xor cx,cx
int 21h
jc ex
mov Handle,ax ;saving Handle
lea dx,Mok
call printman ;вывод ОК
mov ah,3fh ; чтение файла в 7 страницу
mov bx,Handle
mov cx,0dh
push ds
push 0bf00h
pop ds ; перевод ds на 7 страницу
xor dx,dx
int 21h
pop ds ; восстановление ds
lea dx, Mok
call printman ; вывод ОК
push ds
push 0bf00h
pop ds ; перевод ds на 7 странице
mov cx,12 ; переместить 13 символов из...
xor si,si
lea di,Text
rep movsb ; ...текста файла в переменную
pop ds ; восстановление ds
mov Text[12],0dh
mov Text[13],0ah
mov Text[14],"$"
mov dx, offset Text ;указатель на переменную
call printman ; вывод на экран
mov ah,3eh ;closing
mov bx, Handle
int 21h
ex:
;-------------------------
;у-а-а-а-а-а!!!!!!
;-------------------------
int 20h ; конец
printman proc
mov ah,9h
int 21h
ret
printman endp
Handle dw ?
Text db ?
Mok db "Vse OK!",0dh,0ah,"$"
FileN db "man.txt$"
cseg ends
end Begin
;---------------------------------------------------------------------------------------------------------------------
примечание: файл мэн содержит 12 символов
Проблема:
После того, как будет выведен текст из файла, я бы хотел вывести на экран еще один "ОК". Я поставил строчки: " mov dx,offset call printman" на место "у-а-а-а-а", но вместо "Vse OK!" повторно выводится текст файла без первой буквы(!)!
Это, конечно, не так важно, но хотелось бы знать, ПОЧЕМУ? Спасибо.



Вопрос отправлен: 15.12.2002, 17:36
Отправитель: Faraon

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

Отвечает Ayl

Здравствуйте, Faraon!
Ну так что же ты хотел получить? Смотри свое описание переменных:
...
Text db ?
Mok db "..."
...
Видишь? У тебя по адресу Text резервируется только 1 байт, а ты записываешь туда целых 15 (с учетом добваления 3 байт после копирования).
Естественно, что значение Mok будет затерто содержимым твоего файла. Причем первый символ файла попадает туда, куда и надо - по адресу Text, а символы, начиная со второго - по адресу Mok.
Для исправления тебе надо определить свои данные вот так:
...
Text db 15 dup (?)
Mok db ...
...
И еще. Уже в прошлом вопросе обращали твое внимание на то, что строка с именем файла должна заканчиваться нулем, а не символом доллара. Так что переменная FileN должна быть описана так:
FileN db 'man.txt', 0

Ответ отправлен: 16.12.2002, 13:21
Отправитель: Ayl


Отвечает St

Yt, Faraon!
mov dx,offset call printman - это как? Call это комманда и ее нельзя использовать иначе как первым словом на строке
Text db ? - это буфер для текста? тогда надо писать
Text db 15 dup(?) - это резервирует не 1 байт как у вас, а 15.
Иначе вы перезаписываете данные (14 байт) в сегменте данных ниже этой переменной (то есть Mok db "Vse OK!",0dh,0ah,"$" и FileN db "man.txt$"). Поэтомы и высвечивается еще раз текст из файла и как раз без первой буквы, которая находится в Text db ?, то есть на 1 байт выше.
St

Ответ отправлен: 15.12.2002, 22:17
Отправитель: St


Отвечает Traish

Доброе время суток, Faraon!
Ничего тут удивительного нет. Зачем ты указал es:di для movsb на переменную Text? Ты же генеришь COM-файл, а для него это равнозначно ds:di. Или быть может, ты хотел использовать Text, как буффер? Тогда надо было бы зарезервировать для него памяти побольше, чем один байт:
Text db 512 dup (?)
И располагать его надо в самом конце, а то вдруг твой файл окажется больше буффера - данные опять затрутся.


Ответ отправлен: 15.12.2002, 18:06
Отправитель: Traish


Отвечает Maverick

Здравствуйте, Faraon!
Дело в том, что переменная у тебя однобайтовая и ты потом затираешь свой код(после переменной) тем, что прочитал.
Определить переменныю на 12 байт можно так:
Text db 12 dup (?)
Предется немного переделать програмку, но тебе, думаю, не составит труда.


Ответ отправлен: 15.12.2002, 18:15
Отправитель: Maverick


Отвечает Bob Johnson

Здравствуйте, Faraon!
Ну и изврат... Зачем же читать файл куда-то там в седьмую страницу, а потом копировать к себе? Почему бы сразу не прочесть в свою переменную.
Далее - ты определил text как db ?, а дальше у тебя - Mok, вот и фишка: db ? означает определение только одного байта. Поэтому у тебя первый симвой из файла попадает в text, а все остальные - затирают твой Mok. Необходимо написать text db 50 dup (?), при этом 50 - количество байт, которые ты отвел под текст из файла.


Ответ отправлен: 16.12.2002, 16:22
Отправитель: Bob Johnson


 Вопрос № 2160

У меня есть com.файл. Выдает на экран текст. Я его записал boot сектор fdd.
Только вот там она текст не выдает.
Знаю что данные из boot сектора грузятся по адресу 0000:7C00.
Пробовал ставить ORG 7C00, так он пишет
"start address not equal to 0x100 for /TINY"
Куда в MASME надо поставить TINY и что это такое?



Вопрос отправлен: 15.12.2002, 19:11
Отправитель: sw

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

Отвечает igorash

Приветствую Вас, sw!
Если проблема только в этом, то напиши что-то вроде:
org 100h
_start:
org 7c00h
....your code....
...
end _start


Ответ отправлен: 15.12.2002, 20:00
Отправитель: igorash


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

Доброе время суток, sw!
TINY - это директива ассемблера, которая требует от него создания
СOM-файла, но TASM/MASM может создавать СОМ-файлы только со смещением
100h, поэтому создавать BOOT-сектор на TASM/MASM не очень удобно
(хотя и возможно). Гораздо удобнее это делается на FASM или NASM.


Ответ отправлен: 16.12.2002, 16:18
Отправитель: ASMодей


Отвечает Andrew Vext

Добрый день, sw!
Вы выбрали модель памяти TINY (.model TINY), предназначенную для COM-программ. Поэтому у вас начальный адрес проограммы будет 0100h. Выберите другую модель памяти. Вообще-то masm плохо подходит для написания boot-секторов.

Ответ отправлен: 16.12.2002, 12:20
Отправитель: Andrew Vext


Отвечает Traish

Здравствуйте, sw!
Тут дело в этом, что при загрузке выполнение COM программы начинается с cs:[100h], а когда ты записываешь ее в 0000:7c00h, то она стартует с cs:[0], поэтому сделай push cs, pop ds и отнимай 100h от адреса ячейки.


Ответ отправлен: 15.12.2002, 19:27
Отправитель: Traish


Отвечает Ayl

Здравствуйте, sw!
В общем, для boot-программ технология такая же, как и для разработки драйверов. То есть, создается исходник в моделях TINY или SMALL, но устанавливается ORG 0 вместо ORG 100h. Потом исходник компилируется в EXE-файл.
Далее, применяется утилиты EXE2BIN или аналогичная для преобразования EXE-файла в формат простого дампа. Данная утилита входит в состав Borland C++ 3.1 (возможно, и в более ранние версии). К сожалению, в составе Borland Pascal 7.0 ее почему-то нет :-(


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


Отвечает St

Привет, sw!
Структура программ находящихся в MBR и boot sector-ах не является программвми ДОС. Они имеют собственный формат. Так что их нельзя скомпилировать с помощью МАСМ и ТАСМ. Вам надо взять копию реального boot сектора в виде файла (например через DiskEdit скопировать сектор в файл - можно сделать расширение bin, чтобы не путать с com), понять как она там устроена и немного его подправить. Я когда-то так правил партишен тэйбл со старым загрузчиком (он шел с компьютером, где второй системой был старый QNX). Меня как раз не устраивало, что не было подсказки для выбора системы (клавишы 1-4) и слишком короткое время задержки перед загрузкой по умолчанию. Путем некого поджатия кода и его модификации удалось выиграть более 50 байт (из 256!), где как раз и поместился текст (4 строки по 12 байт). Однако пришлось всё делать вручную через HIEW (хорошая программа), высчитывать новые адреса переменных и процедур и ассемблировать их через HIEW тут же на месте. После этого содержимое файла записалось в первый сектор диска и работает уже много лет.
Хочу заметить, что хотя кода там всего ничего, пришлось потрудиться, чтоб понять что к чему. Если есть вопросы пишите (st23@yandex.ru).
St

Ответ отправлен: 15.12.2002, 22:17
Отправитель: St


Отвечает Maverick

Добрый день, sw!
Tiny это модель памяти, для com программы.
Masm тебе пишет, что стартовый адрес лежет не по смещению 100h, оно и понятно, ты же сам пишешь org 7c00.
Так что проблема не в том, где поставить tiny. Вообще без исходника трудно что то дельное сказать.

Ответ отправлен: 16.12.2002, 04:36
Отправитель: Maverick


Отвечает Bob Johnson

Здравствуйте, sw!
Я бы тебе порекомендовал использовать nasm для написания boot-сектора, т.к. у него максимально простой синтаксис. Твоя прога может выглядеть как в приложении.


Приложение:

Ответ отправлен: 16.12.2002, 16:22
Отправитель: Bob Johnson


 Вопрос № 2161

Уважаемые эксперты.
Хочу заняться программированием на ассемблере под Linux.
1)Как там в линухе вызываются системные функции? Прерываниями? Вызовами процедур ядра(типа API)?
Нету ли у вас подобной документации на русском? Можно URL.
2)Какой асм нужен? Вроде на WASMе видел NASM FOR LINUX, подойдет? Если да то где к нему взять доку на русском?
ЗЫ Кто нибудь занимался такой @#$%^& ? Сложно ?



Вопрос отправлен: 15.12.2002, 19:12
Отправитель: Kiselev (kiselev@inbox.ru)

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

Отвечает Andrew Vext

Приветствую Вас
Ассемблер под Linux не сложнее виндового, но вам придется привыкать к другому синтаксису команд.
Функции системы вызываются через int 80h.
Ассемблер входит в состав Linux называется gas или as.

Ответ отправлен: 16.12.2002, 12:23
Отправитель: Andrew Vext


Отвечает Maverick

Доброе время суток, Kiselev!
Гляди на:
www.wasm.ru
www.asmfanat.narod.ru

Ответ отправлен: 16.12.2002, 04:36
Отправитель: Maverick


Отвечает VicSimon

Доброе время суток, Kiselev!
1) Прерываниями. Если точнее, int 80h (в синтаксисе *никсового ассемблера, а он ОТЛИЧАЕТСЯ от DOS/Win -
int 0x80)- интерфейс системных вызовов в Linux. Подробнее можешь узнать на "http://la.kmv.ru/" или "http://linuxassembly.org/howto/Assembly-HOWTO.html"
2) Можно NASM, есть еще GAS (GNU assembler), AS86 - дело вкуса.
Пробовал под FreeBSD - не сложнее, чем под Win32. Почти как на Си...

Ответ отправлен: 16.12.2002, 06:07
Отправитель: VicSimon


 Вопрос № 2162

Может ли кто-нибудь рассказать о структуре памяти после загрузки компа(Что и где находится, где Bios, где CMOS и др.)?



Вопрос отправлен: 15.12.2002, 22:07
Отправитель: dragon

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

Отвечает Ayl

Добрый день, dragon!
Ну приблизительно так (см.Приложение).
CMOS в обычную память не маппируется, доступ осуществляется через 70-й и 71-й порты (есс-но, 16-ричные).


Приложение:

Ответ отправлен: 16.12.2002, 15:21
Отправитель: Ayl


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

Здравствуйте, dragon!
Что означает "где находятся BIOS и CMOS после загрузки"?
Там же, где и всегда - в своих микросхемах.


Ответ отправлен: 16.12.2002, 16:18
Отправитель: ASMодей


 Вопрос № 2163

Здравствуйте!
не дайте погибнуть! очень нужно написать резидент, в котором по hot-key вызывалась какая-либо программа (напр. Volcov Commander).
пытался собрать что-то похожее, используя выпуски рассылок
№15 и №28 про ассемблер, но программа виснет. даже не просто виснет, а перед этим еще говорит что файл не найден, хотя если запускать процедуру в "чистом виде", то загружает нормально. помогите плиз!
буду вечно благодарен за совет.


Приложение:


Вопрос отправлен: 16.12.2002, 01:38
Отправитель: mike (myy@nm.ru)

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

Отвечает Traish

Добрый день, mike!
Я что-то не понял, зачем тебе понадобилось 21h прерывание. Только для того, чтобы удостоверится, что тебя еще нет в памяти? Если так, то неплохо было бы и флаги сохранить.
А это, вообще-то, можно было сделать и в обработчике девятого прерывания или на худой конец, какой-нибудь левый вектор, int 21h вообще не трогать.
И второе, у тебя что Volcov Commander находится в корне и называется vcvc.com?


Ответ отправлен: 16.12.2002, 11:28
Отправитель: Traish


Отвечает Ayl

Приветствую Вас, mike!
Ну что я могу сказать. Для резидентной программы куча ошибок.
1. При нажатии на клавишу F12 ты вызываешь процедуру ExecProc. Ужас! Во-первых, клава работать не будет, так как она не знает, что клавиша получена. Во-вторых, не производится очистка контроллера прерываний, в связи с чем не будут обрабатыватся прерывания от устройств с приоритетом ниже клавиатурного (приоритет 1), т.е. дисковой подсистемы, параллельного и последовательного портов, второго (каскадного) контроллера прерываний и т.д. Хотя у прерывания от таймера приоритет и выше, его прерывания также будут заблокированы, потому что при вызове аппаратного обработчика выставляется запрет прерываний (cli), а в процедуре они не разрешаются.
Кроме этого, в процедуре ExecProc ты пытаешься вызывать прерывание 21h. Еще одна логическая ошибка. Прерывание клавиатуры - аппаратное, оно может произойти в любой момент времени, в том числе и при выполнении прерывания 21h. При этом функции DOS нереентерабельны по своей сути и повторный вызов может привести к непредсказуемым результатам.
Теперь про вызов программы. Учти, что в момент активации твоего резидента работает некоторая программа. Которой выделена некоторая область памяти. Причем в худшем случае вся доступная память на данный момент. Простым вызовом функции освобождения памяти ты ничего не добьешься, потому что при этой функции надо указать в регистре ES PSP владельца выделенной памяти, а он отличается от твоего. Да и вообще, очищать память чужой программы - дело неблагодарное.
Как с этим бороться. См.описание в приложении.
Удачи!


Приложение:

Ответ отправлен: 16.12.2002, 17:18
Отправитель: Ayl


 Вопрос № 2164

>>DrawLineOnTexture - Ты меня извени эта функция вообще не существует.
Я же сказал нет такой функции, я делал поиск
в Object Brouser и в Directx8.1 SDK.



Вопрос отправлен: 16.12.2002, 08:20
Отправитель: Nimnul (Nimnul@atrus.ru)

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

Отвечает Bob Johnson

Приветствую Вас, Nimnul!
Ха-ха... Вот и я тебе тоже самое говорю, как ты бы себе представил название такой функции??? Не в одной функции дело. DX8 предоставляет тебе возможность рисовать ВСЕ ЧТО УГОДНО на текстуре (не только линию, а всю сцену можно) - читай предыдущий ответ. Повторю:
1. Когда создаешь текстуру, указываешь одним из параметров D3DUSAGE_RENDERTARGET - это означает, что в эту текстуру можно будет выполнять рендеринг.
2. Выбираешь ее: SetRenderTarget.
3. Рисуешь все, что хочешь - обычным образом, так, как бы ты рисовал на экран.
Вот и все, потом выбираешь другой RenderTarget и уже можешь свою текстуру накладывать куда угодно...
Не в функции дело, чувак, а в подходе к программированию.


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


 Вопрос № 2165

Здраствуйте!
Так-с-с. СРазу перейдём к вопросам!
1. Устройство памяти во всех ОСях одинаково??? (понимаю, вопрос глупый, но неясность пока существует)
2. Всё так я хочу понять конструкцию переполнения стека, хипа, буфера. Что такое хип??? Где может находится буфер???? Во всех ли ОСях эти переполнения одинаковые???
Следующие я адресую эксперты baldr, который ответил мне (но просил не писать ему ответов, поэтому и пишу тут):
Не дооцениваете вы человека!!! Ума-то как раз хватает, что бы получить права программы (если прога запущена под root, то и права могут быть получены соответствующие! (я про UNIX)). Я вам могу привести тонну примеров! Но не в этом дело, я просто хочу понять как происходит переполнения... хочу окунуться в самые низины!!! Приблизительно я кое что понимаю конечно!!! А вот как написать шеллкод я вам могу рассказать!!! И наконец - спасибо за ваш ответ!!! через 16 днеф у вас будет юбилей (один год) - ПОЗДРАВЛЯЮ! И как отослать вам благодарность (+ критику)???


Приложение:


Вопрос отправлен: 16.12.2002, 11:00
Отправитель: ManderX

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

Отвечает Bob Johnson

Заранее благодарен и с новым годом!!!
> Устройство памяти во всех ОСях одинаково??? (понимаю, вопрос глупый, но неясность пока существует)
С точки зрения процессора - да. Процессор имеет только свои возможности по адресации, которые не зависять от оси. Только ось может их не использовать, но для интела это не так - используют все.


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


Отвечает masquer

Добрый день, ManderX!
1. Нет, конечно.
2. Ну, смотри, при любом call в стек засовывается адрес следующей за ним команды, чтобы можно было вернутся в программу, после отработки call, а ret подсовывает адрес на вершине стека в eip, т.е. можно так подобрать данные, чтобы остаток и составлял нужные команды, ну вкратце так.

Ответ отправлен: 16.12.2002, 11:49
Отправитель: masquer


Отвечает baldr

Доброе время суток, ManderX!
1. Основное различие между осями, ИМХО, как раз, организация памяти и ее разделение между
запускаемыми прогами. Все остальное деление, в принципе, можно свести к этому же принципу.
2. А насчет переполнения... Для того, чтобы "переполнить буфер", надо точно знать хотя бы
его размер, что в нем уже находится, а также что находится в памяти за ним... Плюс надо представлять,
как поведет себя конкретная программа при возникновении переполнения. Если возникнет исключение,
то кто будет его обрабатывать? Сама прога или передаст системе? У каждой свои особенности.
Я сам этим не особо интересовался - просто представляю так.
Насчет прав... Я имел в виду получение прав с помощью переполнения буфера, а не вообще...
Если ты получил все права - так зачем тебе еще и буфер-то грохать? :) Ты и без этого можешь
дел наворотить...
А где это я просил не писать больше ответов? :)) Это ты про кнопочку в самом низу ответа? :))
Так это ж тебе - если больше не хочешь получать ответов, то жмешь - и они больше тебе не приходят.
Я же всегда рад помочь, если, конечно, силен в предметной области...
Насчет юбилея... Спасибо... Но он у меня был, как показывают мои архивы, 28 октября.
А что дата другая - так это в прошлом декабре, помнится, у Олега Калашникова все базы упали, так
он их по бэкапам восстанавливал вручную. Сейчас все старейшины с такой датой...
Благодарность мне, в общем-то ты уже выразил... Некоторым (многим) просто ответишь - и все.
А тут - спасибо сказали... :) Уже и приятно. :) Больше пока почти никакой благодарности экспертам
выразить нельзя. Кроме, конечно, материальной... ;)


Ответ отправлен: 17.12.2002, 00:13
Отправитель: baldr


 Вопрос № 2166

Всем привет! Не подскажет как вставить растровое изображение в RichEdit? Желателен ответ в виде примера (на асме ессно), а не ссылка на msdn! :)



Вопрос отправлен: 16.12.2002, 11:11
Отправитель: Andrew (formatC_vt@inbox.ru)

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

Отвечает Gibbel

Здравствуйте, Andrew!
Есть две статьи на C++. Можешь попробовать переписать на асме...
http://codeguru.earthweb.com/richedit/richeditrc.html
http://codeguru.earthweb.com/richedit/rtfbitmap.shtml


Ответ отправлен: 16.12.2002, 11:32
Отправитель: Gibbel



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

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (39)
C / C++ (30)
Perl (5)
Delphi (21)
Pascal (23)
Basic / VBA (10)
Java / JavaScript (6)
PHP (4)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (32)
Windows NT/2000/XP (26)
"Железо" (33)
Поиск информации (14)
Администратору
Windows NT/2000/XP (10)
Linux / Unix (14)
Юристу
Гражданское право (8)
Семейное право (3)
Трудовое право (5)
КоАП (2)

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




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


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

В избранное