Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 363
от 09.09.2002, 20:30
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 1208 Отправлено ответов: 3705 Активность: 306.7 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Lank Статус: Начальный Общий рейтинг: 115.9 [Подробней >>] |
masquer Статус: Профессиональный Общий рейтинг: 157.77 [Подробней >>] |
Broken Sword Статус: Профессиональный Общий рейтинг: 135.16 URL: моя рассылка по Protected Mode [Подробней >>] |
Dark_Lord Статус: Профессиональный Общий рейтинг: 139.48 [Подробней >>] |
Sinner Статус: Доверительный Общий рейтинг: 105.66 [Подробней >>] |
Portnov Статус: Профессиональный Общий рейтинг: 121.86 URL: Мой сайтик... [Подробней >>] |
VicSimon Статус: Начальный Общий рейтинг: 102.7 [Подробней >>] |
Beeblebrox Статус: Профессиональный Общий рейтинг: 115.82 URL: Beeblebrox / TMA HomePage [Подробней >>] |
kvINT Статус: Профессиональный Общий рейтинг: 111.56 Телефон: (34316)2-31-45 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 119.52 [Подробней >>] |
ASMодей Статус: Опытный Общий рейтинг: 123.48 [Подробней >>] |
Pablo Статус: Профессиональный Общий рейтинг: 131.63 URL: Моя страничка [Подробней >>] |
baldr Статус: Профессиональный Общий рейтинг: 117.47 URL: Сайт об ОС DOS. Всем, кто любит эту ОС! [Подробней >>] |
ARDoS Статус: Доверительный Общий рейтинг: 105.99 [Подробней >>] |
Топор Статус: Профессиональный Общий рейтинг: 117.77 URL: Хорошая Русская Металлическая команда Телефон: (8462)500298 [Подробней >>] |
nix Статус: Опытный Общий рейтинг: 110.95 [Подробней >>] |
SonicX Статус: Доверительный Общий рейтинг: 114.78 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 1176. Где можно надыбать исходник для Z-modem протокола? Инет перерыл, нету :( Может где завалялся?... (ответов: 1)
Вопрос № 1177. Уважаемые эксперты обьясните пожалуйста, что такое системамы виртуальной памяти 1. с сегментной орг... (ответов: 2)
Вопрос № 1178. Добрый день. Подскажите, как создать массив большой длины в MASM? Мне надо определить массив из сотн... (ответов: 7)
Вопрос № 1179. Уважаемые эксперты, подскажите пожалуйста алгоритм записи номера занятого клястера в FAT12.... (ответов: 3)
Вопрос № 1180. Привет эксперты! Вопрос: что из себя представляют команды leave и ret # (где # - число)? Насколько я... (ответов: 7)
Вопрос № 1181. Skajite pojaluista, pochemu proga zavisaet(smotri prilojenija) posle v'jvoda na ekran soobshtenie 'T... (ответов: 6)
Вопрос № 1182. Приветствую Вас всех! Помогите как с помощю TASM создать VXD. Незнаю какие команды нужно ставить пос... (ответов: 2)
Вопрос № 1183. Hi all! Какой функцией и какого прерывания написать прогу низеоуровневого форматирования? Спасибо! ... (ответов: 3)
Вопрос № 1184. Можно ли вместо UPSовского аккумулятора подключить обычный автомобильный аккумулятор. Я думаю, что а... (ответов: 3)
Вопросов: 9, ответов: 34
Вопрос № 1176 |
Где можно надыбать исходник для Z-modem протокола? Инет перерыл, нету :( Может где завалялся?
Вопрос отправлен: 04.09.2002, 21:47
Отправитель: Pano
[Следующий вопрос >>] [Список вопросов]
Отвечает Lank
Доброе время суток, Pano!
Исходники с документацией есть только на Си. Если надо напиши я тебе скину на мыло. Мой E-Mail: Lank@regi.rovno.ua
С уважением Lank.
Ответ отправлен: 05.09.2002, 13:39
Отправитель: Lank
Вопрос № 1177 |
Уважаемые эксперты обьясните пожалуйста, что такое
системамы виртуальной памяти
1. с сегментной организацией
2. с страничной организацией
Если у вас есть документация по этим вопросам вышлите мне пожалуйста.
Спасибо.
Вопрос отправлен: 05.09.2002, 03:32
Отправитель: Pasha
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Здравствуйте, Pasha!
1. сегмент+смещение=асолютный адрес
2. размер страницы зависит от архитектуры процессора (для х86-4кб)
подробнее - см. интеловские мануалы
Ответ отправлен: 05.09.2002, 11:16
Отправитель: masquer
Отвечает Broken Sword
Добрый день, Pasha!
http://subscribe.ru/catalog/comp.soft.prog.intelpm
подпишись и скачай архив, скоро будет страничная организация
Ответ отправлен: 05.09.2002, 15:26
Отправитель: Broken Sword
Вопрос № 1178 |
Добрый день.
Подскажите, как создать массив большой длины в MASM? Мне надо определить массив из сотни слов. Пишу так:
Massiv dw 029Bh,01B3h, .... ,10A3h
На это компилятор ругается (code128.asm(66) : error A2042: statement too complex).
Вопрос отправлен: 05.09.2002, 07:40
Отправитель: kemerovchanin (sudv@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Dark_Lord
Добрый день, kemerovchanin!
попробуй
massiv dw 00h,00h,02..
dw 02h,45h,...
Тоесть лучше несколько строчек!
Ответ отправлен: 07.09.2002, 12:42
Отправитель: Dark_Lord
Отвечает Sinner
Доброе время суток, kemerovchanin!
Не понимаю, в чем проблема.
В одну строку он тебе не даст написать столько,
а если написать так, то без проблем...
Massiv dw 029Bh,01B3h, .... ,10A3h
dw 029Bh,01B3h, .... ,10A3h
dw 029Bh,01B3h, .... ,10A3h
...
Ответ отправлен: 05.09.2002, 08:02
Отправитель: Sinner
Отвечает Portnov
Доброе время суток, kemerovchanin!
Кажется, Masm такие вещи не понимает... Попробуйте так:
Massiv:
dw 1,2,3,..
dw 0e,0d,...
dw...
Т.е. метка, а потом массив в несколько строк записывать. Вы ведь скорее всего нигде этот массив как единую переменную не используете (собственно, этого вроде Masm и не позволит, нету ведь инструкции для копирования массива целиком, придется rep movsb там или чего-то еще...), а используете только его части, напр., massiv[5]. Такое будет позволено.
С уважением, Portnov.
Ответ отправлен: 05.09.2002, 08:18
Отправитель: Portnov
Отвечает VicSimon
Добрый день, kemerovchanin!
Такая ошибка возникает в случае, когда в строке слишком много элементов. Попробуй разбить массив на несколько строк. Например так:
Massiv dw 0123h, 0345h, ..., 0724h
dw 0BE5h, ..., 0FEDh
...
dw 013Ah, ..., 0FFEh
Ответ отправлен: 05.09.2002, 08:45
Отправитель: VicSimon
Отвечает Beeblebrox
Здравствуйте, kemerovchanin!
Разбей длинную строку на несколько - меньшей длины
dw ...,...,...
dw ...,...,...
...
dw ...
Символов 80 в строке и меньше считается хорошим тоном.
Уверен, что при этом обнаружится еще пару ошибок :)
Ответ отправлен: 05.09.2002, 09:57
Отправитель: Beeblebrox
Отвечает masquer
Приветствую Вас, kemerovchanin!
Ну 162 значения в одну строку заходят, а вообще я так делаю
massiv dw 1,2,3
dw 4,5,6
dw 7,8,9
Ответ отправлен: 05.09.2002, 11:25
Отправитель: masquer
Отвечает kvINT
Приветствую Вас, kemerovchanin!
Напиши его в несколько строк.
Massive dw ...
dw ...
dw ...
Ответ отправлен: 08.09.2002, 13:04
Отправитель: kvINT
Вопрос № 1179 |
Уважаемые эксперты,
подскажите пожалуйста алгоритм записи номера занятого клястера в FAT12.
Вопрос отправлен: 05.09.2002, 09:30
Отправитель: Kostyan
[Следующий вопрос >>] [Список вопросов]
Отвечает Ayl
Здравствуйте, Kostyan!
Пусть у тебя кластер C должен быть помечен, как занятый. При этом есть 2 варианта:
- этот кластер не последний в цепочке
- последний
Во втором случае все просто - надо записать в соответствующее место FAT значение fffh. В первом случае нужно также знать номер следующего кластера в цепочке (N).
Алгоритм определения места в FAT для FAT12 такой (см. Приложение).
Если же надо просто пометить кластер как занятый без его привязки к файлу, то можно попробовать использовать значения от ff0 до ff6 - зарезервированный кластер. Либо пометить его как BAD (значение ff7).
Вообще, в FAT могут быть представлены следующие значения:
- 0 - свободный кластер
- от ff0 до ff6 - зарезервированный кластер
- ff7 - BAD кластер
- от ff8 до fff - последний кластер в цепочке
- от 002 до fef - номер следующего кластера в цепочке
Приложение:
Ответ отправлен: 05.09.2002, 11:56
Отправитель: Ayl
Отвечает Broken Sword
Доброе время суток, Kostyan!
Для FAT12 фактически тебе нада сделать так:
1. Умножить номер элемента на 3
2. Разделить результат на 2
3. Извлечь из FAT 16-разрядное слово, используя в качестве адреса результат предыдущей операции
4. Если номер элемента четный, выполнить операцию AND над считанным словом и маской 0FFFh. Если номер нечентый, сдвинуть считанное слово вправо на 4 разряда. В результате получим изскомое значение элемента FAT.
Так как ты хочешь найти занятый кластер, то для FAT12 тебе нада искать кластер, не содержащий ни нулей, ни FF7 (дефектный), ни FF8-FFF (последний). Если он удовл. условию, то просто запомни номер - это и будет номер занятого кластера.
Ответ отправлен: 05.09.2002, 15:26
Отправитель: Broken Sword
Отвечает ASMодей
Здравствуйте, Kostyan!
Алгоритм такой:
1. Прочитай FAT в память.
2. Умножь номер кластера на 3 и раздели результат на 2.
Получишь смещение относительно начала FAT.
3. Прочитай оттуда слово.
4. Если номер кластера четный, то в этом слове нужно
использовать младшие 12 бит.
5. Если номер кластера нечетный то в этом слове нужно
использовать старшие 12 бит.
Как записать туда информацию не испортив при этом
оставшиеся 4 бита я надеюсь догадаешся сам ;)
PS. Учти, что изменять нужно все копии FAT, а не только
первую.
Ответ отправлен: 06.09.2002, 09:23
Отправитель: ASMодей
Вопрос № 1180 |
Привет эксперты!
Вопрос:
что из себя представляют команды leave и ret # (где # - число)? Насколько я понял они вычещают стек по выходу из процедцры объявленой proc. Интересует технический аспект их работы (как, почему, когда и при каких условиях). Просто у меня есть след. код (при model = flat, stdcall):
myProc proc temp:DWORD
call proc2
ret
proc2:
ret
myProc endp
эта хрень транслируется в нечто вроде:
push ebp
mov ebp, esp
call proc2
leave
ret 4
proc2:
leave
ret 4
И в итоге в proc2 я не возвращаюсь на команду за call proc2, а вообще из процедуры proc вываливаюсь. Как бороться? Прыгать как козлу по проге с помощью jmp вроде неэстетично и тем более не практично... 8-)
Вопрос отправлен: 05.09.2002, 14:44
Отправитель: Priest
[Следующий вопрос >>] [Список вопросов]
Отвечает Pablo
Приветствую Вас, Priest!
ret 0ch - означает, что при возврате из подпрограммы после восстановления (e)ip, к значению указателя стека будет добавдено значение 0ch.
leave - означает, что из регистра (e)bp значение занесется в регистр (e)sp и, таким образом, восстановится старое значение стека.
Ответ отправлен: 05.09.2002, 19:33
Отправитель: Pablo
Отвечает masquer
Здравствуйте, Priest!
ret передает управление по адресу, находящемуся на вершине стека, если есть параметр, то это значение отнимается от вершины.
leave =
mov esp, ebp
pop ebp
Отсюда смотри, что у тебя происходит
Ответ отправлен: 05.09.2002, 16:39
Отправитель: masquer
Отвечает Portnov
Доброе время суток, Priest!
ret n: снмает со стека адрес возврата (смещение), запоминает его, снимает со стека n байт, а потом передает управление по запомненному адресу.
leave в 32-х битном режиме эквивалентно последовательности
mov esp,ebp
pop ebp;
В 16-битном режиме - то же самое про sp,bp.
С уважением, Portnov.
Ответ отправлен: 05.09.2002, 16:38
Отправитель: Portnov
Отвечает kvINT
Приветствую Вас, Priest!
call proc2
ret
Из чего ret?
Чтобы вернуться из proc2 ret должен быть внутри нее, в конце.
Далее такой же туман.
Ответ отправлен: 08.09.2002, 13:03
Отправитель: kvINT
Отвечает Lank
Привет Priest, попробую тебе кое-что обяснить тебя
интересует работа инструкций LEAVE и RET #? А в
техническую документацию смотреть лень? Тогда читай
выписки из неё:
LEAVE (High Level Procedure Exit) -- Виход из процедуры высокого уровня.
Машинный код : 0C9h
Действие: команда копирует EBP/BP в ESP/SP, тем самым восстанавливая содержимое ESP/SP значением, которое было до вызова процедуры. Далее в регистр EBP/BP из новой вершины стека извлекается значение, тем самым восстанавливаеся кадр вызывающей программы.
Ret/RetF (RETurn/RETurn Far from procedure) -- возврат ближний(дальний) из процедуры.
0C3h -- близкий возврат в процедуру.
0CBh -- дальний возврат в процедуру.
0C2h i16 -- близкий возврат в процедуру с выталкиванием i16 байт из стека.
0CA i16 -- дальний возврат в процедуру с выталкиванием i16 байт из стека.
Действие: передача управления по адрессу, расположеному на вершине стека. Этот адрес помещается в стек Call, его значение соответствует команде, следующей за командой Call. Необязательный операнд число опредиляет количество байт стека, которие будут вытолкнуты после выталкивания адреса возврата.
Она используется в языках высокого уровня для очистки стека от переменных, которые передавались вызываемой процедуре.
Надеюсь поможет :)А у тебя в коде должно быть просто RET а не RET 4, так, как ты параметры процедуре по всей видимости не передавал.
С уважением Lank.
Ответ отправлен: 05.09.2002, 15:42
Отправитель: Lank
Отвечает Beeblebrox
Здравствуйте, Priest!
Ты объединил в одно описание proc-endp две отдельные процедуры, а это не есть правильно. Опиши их отдельно.
Ответ отправлен: 05.09.2002, 16:08
Отправитель: Beeblebrox
Отвечает ASMодей
Здравствуйте, Priest!
Чтобы она так не транслировалась, нужно определить proc2
как вложенную процедуру:
proc2 proc
ret
proc2 endp
А как работают команды ENTER, LEAVE и RET N смотри в
описании этих команд, там все подробно расписано.
Ответ отправлен: 06.09.2002, 09:25
Отправитель: ASMодей
Вопрос № 1181 |
Skajite pojaluista,
pochemu proga zavisaet(smotri prilojenija) posle v'jvoda na ekran soobshtenie 'Tancho Rusev$', ja compiliruija
ml /Fl /AT xlatb.asm
compiliruetsja vse normalno poluchaetsja 'xlatb.com',a
posle zapuska zavisaet. Ja rabotau v DOS Prompt XP Windows.
V Windows'98SE delo stoit huje. Mne kagetsja chto problema
v instruksii 'cmp al,'$'' i jz @1 ili ja ochibaus?
Приложение:
Вопрос отправлен: 05.09.2002, 17:09
Отправитель: Tancho (rusev@neochim.bg)
[Следующий вопрос >>] [Список вопросов]
Отвечает Beeblebrox
Здравствуйте, Tancho!
У меня тасм, поэтому я слегка переделал заголовок. Ошибка - в нарушении стека
Приложение:
Ответ отправлен: 05.09.2002, 18:22
Отправитель: Beeblebrox
Отвечает Sinner
Здравствуйте, Tancho!
см. приложение
Приложение:
Ответ отправлен: 08.09.2002, 10:58
Отправитель: Sinner
Отвечает baldr
Добрый день, Tancho!
Ты делаешь push, потом проверяешь значение и если ноль - то выходишь... А в стеке при выходе находится число! Короче, сделай:
@1:
pop ax
и все должно работать.
Ответ отправлен: 05.09.2002, 17:44
Отправитель: baldr
Отвечает Broken Sword
Hi Tancho!
ты ошибаешься
прога твоя зависает исключительно из-за ret-а в конце (ты ж стек запортил перед этим push ax-ом, и у тебя уже не ноль на вершине).
еще непонятен твой хитроумный трюк с "K R A J", ты зачем то пихаешь его оффсет в si, а потом выводишь символ из al ($) в режиме телетайпа (0Eh ф-ция 10h прерывания) на экран. Нахрена? непонятно...
Ответ отправлен: 05.09.2002, 19:44
Отправитель: Broken Sword
Отвечает ASMодей
Приветствую Вас, Tancho!
Ошибка в том, что после перехода на метку @1 ты забыл
вытащить из стека сохраненный AX, поэтому возврат из
программы у тебя происходит х.з. куда. И еще не понятно
что ты хотел сделать функцией 0Eh - она выводит ОДИН символ
и совсем не из [SI] !!!
Ответ отправлен: 06.09.2002, 09:26
Отправитель: ASMодей
Отвечает ARDoS
Добрый день, Tancho!
По моему именно в jz @1 (Jump if Zero). Если ты сравниваешь al с "$", то что должно быть равно нулю? Хотя возможно я и не прав.
Ответ отправлен: 06.09.2002, 16:00
Отправитель: ARDoS
Вопрос № 1182 |
Приветствую Вас всех!
Помогите как с помощю TASM создать VXD.
Незнаю какие команды нужно ставить после TASM.exe
Заранее благодарен!
Александр.
Вопрос отправлен: 05.09.2002, 17:53
Отправитель: Александр
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Здравствуйте, Александр!
По-моему - никак.
Используй масм, по крайней мере, нормальные люди все так делают.
Ответ отправлен: 07.09.2002, 10:45
Отправитель: masquer
Отвечает Топор
Добрый день, Александр!
Процесс компиляции в общем такой же. В DEF-файл надо добавить строку вида:
VXD имя_файла тип_vxd
где тип_vxd - DYNAMIC или STATIC, смотря какой надо.
Ответ отправлен: 07.09.2002, 20:30
Отправитель: Топор
Вопрос № 1183 |
Hi all!
Какой функцией и какого прерывания написать прогу низеоуровневого форматирования?
Спасибо!
Вопрос отправлен: 05.09.2002, 18:15
Отправитель: R@ptor (Spinosaur@narod.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает baldr
Приветствую Вас, R@ptor!
Нет ничего более низкоуровневого, чем паяльник... :)
А чуть повыше - работа через порты. Через них и шуруй. Если надо, могу поискать доку.
Ответ отправлен: 05.09.2002, 18:43
Отправитель: baldr
Отвечает nix
Доброе время суток, R@ptor!
Всего-то нужно:
1. Определить количество физических hdd.
2. Определить количество логических дисков.
3. Вывести сообщение типа "Processing..."
4. Поседовательно, начиная с первого, забить все диски нулями, или какой-нибудь чепухой.
ВСЕ:-))))))))
Ответ отправлен: 06.09.2002, 04:53
Отправитель: nix
Отвечает SonicX
Здравствуйте, R@ptor!
13h прерывание.
Ответ отправлен: 06.09.2002, 20:03
Отправитель: SonicX
Вопрос № 1184 |
Можно ли вместо UPSовского аккумулятора подключить обычный автомобильный аккумулятор. Я думаю, что автомобильный аккумулятор будет гораздо дольше работать (не 10-15 минут, а хотя бы 1,5-2 часа). Но я не уверен подойдет ли этот аккумулятор (он все таки мощнее стандартного UPSовского) не сгорит ли там чего?
Вопрос отправлен: 05.09.2002, 19:02
Отправитель: Boss (kondratev@mail.kz)
[Следующий вопрос >>] [Список вопросов]
Отвечает ARDoS
Приветствую Вас, Boss!
Один мой знакомый подключил автомобильный аккумулятор и вроде бы ничего не сгорело.
Ответ отправлен: 06.09.2002, 16:00
Отправитель: ARDoS
Отвечает baldr
Приветствую Вас, Boss!
Если компа не жалко - пробуй... А если жалко - не пробуй.
Я ОЧЕНЬ не советую этого делать. Если питание выключат - тебе 15 минут хватит на сохранение любого документа... А сидеть и продолжать работать (играть?) от аккумулятора, когда отключен свет - это уж совсем...
Если так хочешь - то уж подключись еще к одной фазе! И тебе нервов меньше, и надежнее...
Ответ отправлен: 06.09.2002, 10:12
Отправитель: baldr
Отвечает SonicX
Здравствуйте, Boss!
Можно, но может сгореть.
Этот вопрос в другую группу отошли.
Ответ отправлен: 06.09.2002, 20:03
Отправитель: SonicX
Форма отправки вопроса |
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
© 2002 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (39) C / C++ (28) Perl (9) Delphi (14) Pascal (25) Basic / VBA (10) Java / JavaScript (13) PHP (9) MySQL / MSSQL (10) |
Пользователю Windows 95/98/Me (40) Windows NT/2000/XP (27) "Железо" (36) Поиск информации (12) |
Администратору Windows NT/2000/XP (14) Linux / Unix (16) |
Юристу Гражданское право (11) Семейное право (6) Трудовое право (8) КоАП (6) |
Отправить вопрос всем экспертам выбранной рассылки.
© 2002 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||