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

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


Служба Рассылок Subscribe.Ru

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

Выпуск № 234
от 04.04.2002, 02:05

Администратор: Калашников Олег
Сайт Администратора: Программирование на Ассемблере


Старейшины рассылки
(по состоянию на 04.04.2002, 02:05)

1. Broken Sword - ответов: 422.
2. Painbringer (нечто наподобие домашней страницы) - ответов: 378.
3. Sensey - ответов: 346.
4. DiGiT - ответов: 306.
5. Dron (Операционная система с нуля!) - ответов: 304.


Новости

[03.04] Эксперту Ayl присвоен статус "Привилегированный".


 Вопрос № 13

Привет!
Такой вот вопрос:
если в проге при jmp - е мне надо перейти на метку, которая выходит за рамки короткого джампа, как синтаксически записать безусловный переход на нужную метку? Спасибо.
ЗЫ примерчик в приложении

Приложение:


Отправитель: Sergey
Вопрос отправлен: 30.03.2002, 05:41
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS

_______________

Отвечает Топор
Добрый день, Sergey!

Вообще-то, если ты в TASMе, париться особо не надо - он сам приводит джампы к нужному виду. За коротким (+128..-127 байт)
jmp short Label_1
следующий по длительности - ближний, т.е. в пределах своего сегмента:
jmp near Label_1
а за пределы своего сегмента - дальний:
jmp far Label_1

Удачи !


Отправлено: 30.03.2002, 08:57
Отправитель: Топор (регистрация: 15/03/2002, ответов на счету: 54)
Радио "Эхо Москвы в Самаре"
Адрес: 443011, Самара, ул. Советской Армии, 217
Тел.: (8462)160302, 162918
URL: http://listen.to/btemple - Хорошая Русская Металлическая команда
Россия, Самара

_______________

Отвечает Cardinal
Доброе время суток, Sergey!
А дальний джамп не пробовал? Очень дальний....
jmp far ptr label_1


Отправлено: 30.03.2002, 09:51
Отправитель: Cardinal (регистрация: 22/01/2002, ответов на счету: 72)
ДГТУ
evg_list@aport2000.ru
Россия, Ростов-на-Дону

_______________

Отвечает Gella
Здравствуйте, Sergey!
jmp far Label_1


Отправлено: 31.03.2002, 12:59
Отправитель: Gella (регистрация: 14/02/2002, ответов на счету: 3)
ICQ 134734358
Ukraine, Donetsk

_______________

Отвечает VicSimon
Доброе время суток, Sergey!

1. Короткий jmp - jmp short Label_1

2. Jmp в пределах сегмента - jmp Label_1 (без модификаторов)

3. Дальний jmp:
jmp dword ptr [Label_1]
; Адрес куда переходить описывается так:
Label_1 dw j_Offset
dw j_Segment


Отправлено: 01.04.2002, 06:19
Отправитель: VicSimon (регистрация: 25/01/2002, ответов на счету: 44)
Россия, Красноярск

_______________

Отвечает Beeblebrox
Приветствую Вас, Sergey!
Просто никогда не употребляй слово short. Транслятор все сделает сам. И без разницы, условный или безусловный, только не забудь тип процессора поставить как минимум .386.
Твой пример написан правильно, ничего менять не надо. Транслятору закажи несколько проходов, чтоб он все соптимизировал.


Отправлено: 01.04.2002, 10:08
Отправитель: Beeblebrox (регистрация: 13/03/2002, ответов на счету: 42)
URL: http://beeblbrx.narod.ru - Beeblebrox / TMA HomePage
ICQ #75393045
Ukraine, Kharkov

_______________

Отвечает Dron
Доброе время суток, Sergey!

Есть модификаторы размера переходов...
short, near, far...
подставь любой по вкусу... :)


Отправлено: 01.04.2002, 11:09
Отправитель: Dron (регистрация: 28/12/2001, ответов на счету: 304)
Информзащита
Адрес: Москва
URL: http://asmdev.narod.ru/asmos.html - Операционная система с нуля!
2144510
Россия, Москва

_______________

Отвечает Ayl
Добрый день, Sergey!

Или я чего-то не понимаю, или у тебя версия асма какая-то левая, если ошибку дает. Вообще по умолчанию безусловный переход считается ближним, а не коротким. Для того, чтобы был короткий, надо прямо написать:
jmp short Label_Short (-128..+127 байт от текущего IP)
Прямое указание близкого перехода:
jmp near ptr Label_Near (-32768..+32767 байт от IP)
Дальний переход:
jmp far ptr Label_Far (абсолютные CS:IP следующей инструкции)


Отправлено: 01.04.2002, 12:27
Отправитель: Ayl (регистрация: 28/12/2001, ответов на счету: 200)
Россия, Санкт-Петербург




 Вопрос № 14

Привет!
Такой вот вопрос:
если в проге при jmp - е мне надо перейти на метку, которая выходит за рамки короткого джампа, как синтаксически записать безусловный переход на нужную метку? Спасибо.
ЗЫ примерчик в приложении

Приложение:


Отправитель: Sergey
Вопрос отправлен: 30.03.2002, 05:42
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS

_______________

Отвечает Broken Sword
Доброе время суток, Sergey!
jmp short label_1 действительно не проканает (если расстояние больше 127 байт)
Ну так пиши просто jmp label_1! Я, чесно говоря, не понял твой вопрос...
Если ты действительно хочешь писать одними "short-ами", то тогда пиши так:
........
jmp short label_mid
........
label_mid:
jmp short label_1
........
label_1:

Но так имеет смысл делать только если у тебя много jmp-ов на одну и ту же локацию.


Отправлено: 30.03.2002, 09:57
Отправитель: Broken Sword (регистрация: 28/12/2001, ответов на счету: 422)
ICQ#64476575
Украина, Одесса




 Вопрос № 15

Здравстуйте.
У меня стоит WinXP. Будет ли работать Soft ICE?

Отправитель: marlyn (marlyn@land.ru)
Вопрос отправлен: 30.03.2002, 08:45
Подгруппа: Общие вопросы по программированию на Ассемблере под Win32

_______________

Отвечает Топор
Добрый день, marlyn!

Который для NT - точно будет, другой - не знаю...


Отправлено: 30.03.2002, 08:59
Отправитель: Топор (регистрация: 15/03/2002, ответов на счету: 54)
Радио "Эхо Москвы в Самаре"
Адрес: 443011, Самара, ул. Советской Армии, 217
Тел.: (8462)160302, 162918
URL: http://listen.to/btemple - Хорошая Русская Металлическая команда
Россия, Самара

_______________

Отвечает masquer
Добрый день, marlyn!
Будет, который под НТ. Версию лучше брать не ниже 4.05


Отправлено: 30.03.2002, 10:15
Отправитель: masquer (регистрация: 16/01/2002, ответов на счету: 77)
Украина, Николаев




 Вопрос № 16

Здравствуйте, уважаемые эксперты !
Хотел спросить, есть ли проги для написания 32-бит ных программ на ассемблере. А проблема в том, что надо получать ЧИСТЫЙ КОД а не муру типа PE файла... А простой тасм 32 битные проги не пишет...
Для чего ?
Хочу написать бут сектор для дискетки. Чтоб это была какая-нибудь прога типа редактора текста. И грузилась прям с дискетки. И чтоб она пахала в защищенном режиме и использовала как можно больше ресурсов компа, желательно с пользой.

Подскажите, пожалуйста, ссылочку на хороший редактор-компилятор или просто компилятор. Хоть под дос хоть под винду.

Спасибо !

Отправитель: Эксперт Пуля
Вопрос отправлен: 30.03.2002, 08:50
Подгруппа: Общие вопросы по программированию на Ассемблере под Win32

_______________

Отвечает Топор
Добрый день, Пуля!

Простой TASM отлично пишет 32-битные проги. Не забывай только давать тлинкеру ключ /3.


Приложение:


Отправлено: 30.03.2002, 09:03
Отправитель: Топор (регистрация: 15/03/2002, ответов на счету: 54)
Радио "Эхо Москвы в Самаре"
Адрес: 443011, Самара, ул. Советской Армии, 217
Тел.: (8462)160302, 162918
URL: http://listen.to/btemple - Хорошая Русская Металлическая команда
Россия, Самара

_______________

Отвечает masquer
Здравствуйте, Пуля!
Ну наворотил гору и маленькую кучку.
1. Для написания бут сектора тебе не нужны 32 бит. Там 16 - и все тебе.
2. Для того, чтобы решить твою проблему тебе нужно написать свою операционную систему, хотя, без обид, но по твоему вопросу видно, что тебе до этого очень далеко (как и мне, в общем). Если есть сильное желение, можно скачать исходники MenuetOS, это операционная система написана на чистом ассеблере. Кстати, размер бут-сектора 512 байт - это так, для информации.
3. Что по твоему ЧИСТЫЙ КОД, если сом-файл, то посмотри в своем компиляторе, те компиляторы, что под дос компилируют как сом- так и ехе-файлы.


Отправлено: 30.03.2002, 10:12
Отправитель: masquer (регистрация: 16/01/2002, ответов на счету: 77)
Украина, Николаев

_______________

Отвечает Dron
Добрый день, Пуля!

Не совсем понял сути вопроса... нужен 32-х битный ассемблер? тасм это может... (см tasm32), masm может... есть еще fasm, и наконец мой любимый nasm...


Отправлено: 01.04.2002, 11:11
Отправитель: Dron (регистрация: 28/12/2001, ответов на счету: 304)
Информзащита
Адрес: Москва
URL: http://asmdev.narod.ru/asmos.html - Операционная система с нуля!
2144510
Россия, Москва




 Вопрос № 17

Здравствуйте, уважаемые эксперты !
Хотел спросить, есть ли проги для написания 32-бит ных программ на ассемблере. А проблема в том, что надо получать ЧИСТЫЙ КОД а не муру типа PE файла... А простой тасм 32 битные проги не пишет...
Для чего ?
Хочу написать бут сектор для дискетки. Чтоб это была какая-нибудь прога типа редактора текста. И грузилась прям с дискетки. И чтоб она пахала в защищенном режиме и использовала как можно больше ресурсов компа, желательно с пользой.

Подскажите, пожалуйста, ссылочку на хороший редактор-компилятор или просто компилятор. Хоть под дос хоть под винду.

Спасибо !

Отправитель: Эксперт Пуля
Вопрос отправлен: 30.03.2002, 08:51
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS

_______________

Отвечает cyberworm
Доброе время суток, Пуля!
32-х битные регистры поддерживает обычный Tasm_20
Только делается это прибавлением директивы use32 после имени сегмента например:
code segment use32
Она сообщает о применении 32-х битных регистров

А компонуется это дело так: tlink /3 <>


Отправлено: 30.03.2002, 20:49
Отправитель: cyberworm (регистрация: 28/03/2002, ответов на счету: 4)
Россия, Казань




 Вопрос № 18

Здравствуйте ув. Эксперты и вся читающая публика...
Пишу драйвер шины PCI, сразу же появились проблемы:
1) Порты ввода/вывода шины 0CF8h и 0CFCh
0CF8h -адресный порт для работы с адресным пространством шины PCI.
0CFCh -порт каких то данных. Неподскажете нафига он нужен.
2) Незнаете случайно что такое "специальный цкл шины"
3) BIOS'овский драйвер характеристики шины (версия, подверсия, механизм) ставит втупую (типа mov ax,11h). Можно ли эти характеристики как нить через порты определить?
4) Незнаете существует ли описание стандарта Plug&Play (для шины PCI или ISA) на русском языке (в инете нашел только англ.)
Заранее благодарен.

Отправитель: Dios
Вопрос отправлен: 30.03.2002, 10:17
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS

_______________

Отвечает Ayl
Доброе время суток, Dios!

1. Ну ни фига себе вопросик! Это же стандартный механизм работы практически всех контроллеров. Сначала в адресный порт записываем адрес, к которому будем обращаться (этот порт всегда работает только на запись), а затем с помощью порта данных записываем или считываем данные, находящиеся по этому адресу (соответственно, порт работает и на запись, и на чтение).
2. Специальный цикл шины, если не ошибаюсь, это время, которое требуется шине после помещения данных в адресный порт на то, чтобы считать данные и выложить на шину (будут доступны через порт данных). Именно поэтому очень часто в прогах можно встретить команду
jmp $+2
для задержки перед операцией чтения.


Отправлено: 01.04.2002, 12:36
Отправитель: Ayl (регистрация: 28/12/2001, ответов на счету: 200)
Россия, Санкт-Петербург




 Вопрос № 284

Здравствуйте уважаемые эксперты!
Вот начал изучать асм под Win, а тут как раз выходит выпуск рассылки №34 по программированию под Win. Тут возник у меня вопрос чем отличаются куски кода (в приложении) м.б. скорость выполнения, или размер программы, или без разницы
С уважением, EvgoS

Приложение:


Отправитель: EvgoS
Вопрос отправлен: 29.03.2002, 07:04
Подгруппа: Общие вопросы по программированию на Ассемблере под Win32

_______________

Отвечает vitya
Доброе время суток, EvgoS!

Основная разница в том, что первый кусок кода у тебя будет компилироваться под любой компилятор, а второй только под МАСМ, что, конечно, является недостатком, но с другой стороны гораздо проще в написании. А код, я думаю, генерируется один и тот же.


Отправлено: 29.03.2002, 08:16
Отправитель: vitya (регистрация: 03/01/2002, ответов на счету: 58)
HPLA
103935193
Armenia, Yerevan

_______________

Отвечает Blackeye
Доброе время суток, EvgoS!
Все просто в первом куске вы исползуете стандартный запуск с занесением в стэк, а во втором случаете используете макрокоманду Invoke присущую только MASM'y


Отправлено: 29.03.2002, 08:45
Отправитель: Blackeye (регистрация: 15/02/2002, ответов на счету: 68)
URL: http://www.soft4master.h1.ru - Delphi, my programms...
Украина, Запорожье

_______________

Отвечает Dron
Здравствуйте, EvgoS!

Ну помоему разница вполне не существенна...
invoke стопроцентно разворачивается в те же push'ы и call..
только вот во втором примере явно вызывается ExitProcess...
в первом примере он вызывается неявно через ret.


Отправлено: 29.03.2002, 11:44
Отправитель: Dron (регистрация: 28/12/2001, ответов на счету: 304)
Информзащита
Адрес: Москва
URL: http://asmdev.narod.ru/asmos.html - Операционная система с нуля!
2144510
Россия, Москва




 Вопрос № 285

Уважаемые эксперты!
Рааскажите, pls, что означает динамическое выделение памяти (на машинном, ОС-ном уровне), есть ли что подобное в Асме?

Отправитель: John
Вопрос отправлен: 29.03.2002, 09:27
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS

_______________

Отвечает DiGiT
Приветствую Вас, John!
Так этим управляет ОС. Причем здесь асм. Что ты понимаешь под асмом. Я понимаю под асмом псевдомашинный язык. На асме можно обратиться к ресурсам ОС и выделять.
А динамическое это значит в процессе выполнения программы.


Отправлено: 29.03.2002, 09:42
Отправитель: DiGiT (регистрация: 28/12/2001, ответов на счету: 306)
ICQ:133534725
Russia(),Student

_______________

Отвечает Beeblebrox
Приветствую Вас, John!
В асме нет никакого динамического выделения памяти, точно так же, как нет его и в остальных языках. Зато есть функции ДОС и виндовс, которые выделяют память, и которыми можно пользоваться как из асма, так и из других языков.
Что это такое?
Предположим, в твоей программе в какой-то момент потребовался массив объемом 100 Кбайт. Воспользовавшись функцией Alloc прерывания int 21h ты получишь область памяти для своего массива.
В винде и других ДОС-экстендерах тоже все это делается, только с учетом других моделей памяти.


Отправлено: 29.03.2002, 10:23
Отправитель: Beeblebrox (регистрация: 13/03/2002, ответов на счету: 42)
URL: http://beeblbrx.narod.ru - Beeblebrox / TMA HomePage
ICQ #75393045
Ukraine, Kharkov

_______________

Отвечает Топор
Доброе время суток, John!

На практике это означает пользование памятью, не отведённой программе изначально. В этом случае нужны дополнительные меры по её, памяти, учёту и организации. В простейшем случае это, например, чтение-запись за концом файла, и на Асме легко реализуется. В более сложном - требуется создавать т. н. связанный список, элементы которого содержат инфу об адресах используемых ячеек памяти и порядке их занятия и освобождения.


Отправлено: 29.03.2002, 14:16
Отправитель: Топор (регистрация: 15/03/2002, ответов на счету: 54)
Радио "Эхо Москвы в Самаре"
Адрес: 443011, Самара, ул. Советской Армии, 217
Тел.: (8462)160302, 162918
URL: http://listen.to/btemple - Хорошая Русская Металлическая команда
Россия, Самара

_______________

Отвечает Ayl
Доброе время суток, John!

Есть два вида размещения данных в памяти - статический и динамический. Статическое распределение - это на момент компиляции программы. Примеры - код (в большинстве случаев), переменные, описанные с помощью db, dw, dd, dq, dt, dp (Assembler), в секциях Var и Const в основной Паскаль-программе. В Си либо при использовании ключевого слова static, либо вообще без оного (тогда static используется по умолчанию).
Некоторые языки вообще используют только статические переменные.

Динамические переменные, наоборот, создаются в момент выполнения прграммы. Хороший пример динамических структур - списки, стеки, очереди, деревья и т.п.

Для того, чтобы в асме завести динамическую переменную нужно выделить достаточный кусок памяти и сохранить указатель на этот кусок. А потом работать с его помощью.

На самом деле вопрос "есть ли что-то подобное в асме" не совсем корректен, потому что если что-то реализуется на каком-либо языке, то это же самое возможно реализовать и на ассемблере. Обратное, кстати говоря, не верно.


Отправлено: 29.03.2002, 16:18
Отправитель: Ayl (регистрация: 28/12/2001, ответов на счету: 200)
Россия, Санкт-Петербург

_______________

Отвечает наСИльник
Добрый день, John!
Динамическое выделение памяти это просто напросто выделение, каждой вновь поступившей задачи, необходимой памяти.


Отправлено: 31.03.2002, 10:13
Отправитель: наСИльник (регистрация: 27/02/2002, ответов на счету: 63)
ICQ#114552395
Russia, Orsk




 Вопрос № 442

Приветствую, эксперты..
Я тут недавно псна2 мышу купила... так она глючила время от времени - ездила только по горизонталии с трудом возвращалась в нормальное состояние.. я ее поменяла.. а она опять, но немного реже, но все же
Dexxa..Wheel mouse with light..
такая хорошая.. неужели опять менять? или все-таки это порт?

Отправитель: Elanor
Вопрос отправлен: 27.03.2002, 08:35
Подгруппа: Модели, виды и типы компьютеров (hard)

_______________

Отвечает змей
Здравствуйте, Elanor!
Не...енто мышь глючит...или съехали дрова для мышиного коврика
;)))
то что ездит она тока по горизонтали..это видать в мыше
одна оптопара непашет...


Отправлено: 27.03.2002, 10:50
Отправитель: змей (регистрация: 28/12/2001, ответов на счету: 243)

_______________

Отвечает DivX
Доброе время суток, Elanor!
Если она прозрачная, то кабздец - просто принципиальный отказ работы при дневном свете, т.к. это мешает оптике.


Отправлено: 27.03.2002, 11:34
Отправитель: DivX (регистрация: 28/12/2001, ответов на счету: 239)

_______________

Отвечает Stranger
Добрый день, Elanor!

А у тебя случайно на нее яркий свет не падает???


Отправлено: 27.03.2002, 12:01
Отправитель: Stranger (регистрация: 28/12/2001, ответов на счету: 15)

_______________

Отвечает Cardinal
Доброе время суток, Elanor!
Скорее да чем нет. Для очистки совести подключи её через переходник на COM-порт. Если всё OK, то виноват порт, иначе меняй мышу (или попробуй другую заведомо работающую). Попробуй перевесить дрова на порт.


Отправлено: 27.03.2002, 12:06
Отправитель: Cardinal (регистрация: 22/01/2002, ответов на счету: 72)
ДГТУ
evg_list@aport2000.ru
Россия, Ростов-на-Дону

_______________

Отвечает Sensey
Здравствуйте, Elanor!
То есть (а)сразу же или (б)через некоторое время?
Если (а) то п.2 иначе п.1
Выполнять по пунктам, если не помогло - то следующий :)
1. Почистить
2. Прооверить в ДОСе - если не глючит, переставить дрова в Винде или саму Винду
3. Взять у друзей пару - тройку штук, потестить
4. Купить Logitech Optical - RULESSS!!!, и всего 18 уе, для оптической недорого, а качество настолько выше, что после нее на обычные колесиковые я смотреть не могу.


Отправлено: 27.03.2002, 14:44
Отправитель: Sensey (регистрация: 28/12/2001, ответов на счету: 346)
Тел.: (0572) 41-76-04 д.
Украина, Харьков

_______________

Отвечает vetal
Приветствую Вас, Elanor!
может ее просто надо время от времени чистить?
может ковер плохой
С уважением,vetal


Отправлено: 27.03.2002, 22:07
Отправитель: vetal (регистрация: 14/03/2002, ответов на счету: 22)
Россия, Омск

_______________

Отвечает v4D
Здравствуйте, Elanor!

Порт здесь не причём... Можете попробовать её разобрать и поковыряться в светодиодах, может поможет... Или же попробуйте маус другой модели, например старый добрый Митсуми...или же, если денег не жалко, какую-нибудь модель Логитеч...


Отправлено: 27.03.2002, 22:11
Отправитель: v4D (регистрация: 17/03/2002, ответов на счету: 12)
Ukraine, Kiev




Форма отправки сообщения
(действительна до момента выхода следующего выпуска рассылки)

Заполните приведенную ниже форму для того, чтобы отправить вопрос. Дополнительную информации по пользованию формой для подписчиков и экспертов можно получить, нажав на знак вопроса в соответствующем разделе, при этом информация будет отображена в отдельном окне.

В почтовых программах форма не работает!!! Открывайте рассылку в браузере Internet Explorer, где и набирайте Ваш вопрос.



 Персональные данные
Ваше имя:
Пароль (экспертам):
E-mail (подписчикам):
Опубликовать мой e-mail в рассылке


 Текст сообщения

Текст вопроса:

Приложение (если необходимо: программа, выдержка из закона и т.п.):



 Выбор подгруппы

Отправить всем экспертам выбранной подгруппы


SpyLOG be number one SUPERTOP

© 2000 - 2002 Россия, Москва. Авторское право: Калашников О. А.


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

В избранное