Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 343
от 15.08.2002, 20:40
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 997 Отправлено ответов: 2973 Активность: 298.1 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
masquer Статус: Профессиональный Общий рейтинг: 158.77 [Подробней >>] |
Dark_Lord Статус: Опытный Общий рейтинг: 139.46 [Подробней >>] |
kvINT Статус: Опытный Общий рейтинг: 110.9 [Подробней >>] |
Gibbel Статус: Опытный Общий рейтинг: 109.28 URL: Страничка обо мне и моих друзьях [Подробней >>] |
Pablo Статус: Опытный Общий рейтинг: 130.58 URL: Моя страничка [Подробней >>] |
ASMодей Статус: Опытный Общий рейтинг: 127.27 [Подробней >>] |
Portnov Статус: Опытный Общий рейтинг: 121.12 [Подробней >>] |
LIFO Статус: Опытный Общий рейтинг: 137.25 Телефон: 8 01710 24758 [Подробней >>] |
Вий Статус: Начальный Общий рейтинг: 104 [Подробней >>] |
Топор Статус: Профессиональный Общий рейтинг: 117.86 URL: Хорошая Русская Металлическая команда Телефон: (8462)500298 [Подробней >>] |
Zloy Статус: Опытный Общий рейтинг: 106.86 URL: The полный отстой [Подробней >>] |
Александр Статус: Профессиональный Общий рейтинг: 118.23 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 122.63 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 949. Уважаемые эксперты, плз киньте как можно скорее ссылкой на hlp по ВСЕМ ф-циям VB (нужны описания ф-ц... (ответов: 3)
Вопрос № 950. Добрый День... У меня очень мало навыков и опыта чтобы реализовать задуманное:выделить всю доступную... (ответов: 4)
Вопрос № 951. Pol'zovasja spravochnikom po assembleru, pytalsja assemblirovat' dannuju programmu(iz spravochnika) ... (ответов: 9)
Вопрос № 952. Уважаемые эксперты, простите за такой тупой вопрос, но какой у меня тип Ж.Д. и как это узнать мой Ж.... (ответов: 4)
Вопрос № 953. Если там есть ф-ции типа __vba... то прилши плз!!!!!... (ответов: 1)
Вопрос № 954. Chital rukovodstvo po assembleru. Poproboval zapustit' programmu: cseg segment org 100h begin: mov ... (ответов: 8)
Вопросов: 6, ответов: 29
Вопрос № 949 |
Уважаемые эксперты, плз киньте как можно скорее ссылкой на hlp по ВСЕМ ф-циям VB (нужны описания ф-ций, начинающихся на vba).
Очень большая просьба - как можно скорее!!! на яндексе можете не искать, просто может у кого есть готовая...
О! еще лучше б было, если б кто нить на мыло (brokensword@mail.ru) кинул этот хелп (знаю что в дистрибутиве VB есть вся эта шняга!!!), тока просьба - если оно весит меньше метра
Вопрос отправлен: 10.08.2002, 15:57
Отправитель: Broken Sword (brokensword@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Приветствую Вас, Broken Sword!
Сомневаюсь, что есть такой список. В мсдн точно нет, да и смысла в нем не много, имена функций достаточно очевидны, хотя параметры там не только через стек передаются, а и через регистры.
Ответ отправлен: 10.08.2002, 17:10
Отправитель: masquer
Отвечает Dark_Lord
Добрый день, Broken Sword!
На сколько я знаю, официально такого нету...
Ответ отправлен: 10.08.2002, 17:46
Отправитель: Dark_Lord
Отвечает kvINT
Доброе время суток, Broken Sword!
Распаковал, посмотрел. В дистрибутиве хелп по vb5 весит почти 2. После зипования 1,12. Слать?
Ответ отправлен: 11.08.2002, 12:42
Отправитель: kvINT
Вопрос № 950 |
Добрый День...
У меня очень мало навыков и опыта чтобы реализовать задуманное:выделить всю доступную память COM-программе для буффера. Буду очень признателен если внесете соответствующие изменения в ниже прилагающийся код с комментариями.
До свидания.
Приложение:
Вопрос отправлен: 10.08.2002, 19:16
Отправитель: DARK_ALISON
[Следующий вопрос >>] [Список вопросов]
Отвечает Gibbel
Здравствуйте, DARK_ALISON!
У тебя com программе итак выделяется вся свободная память.
Ответ отправлен: 12.08.2002, 10:39
Отправитель: Gibbel
Отвечает Pablo
Приветствую тебя, DARK_ALISON!
У COM-программы уже вся память выделена! Тебе просто наде ее правильно использовать!)))))
Ответ отправлен: 12.08.2002, 12:20
Отправитель: Pablo
Отвечает Dark_Lord
Добрый день, DARK_ALISON!
В принципе .com программе выделяется сегмент и если после программы поставить метку, на неё можно обращаться, ещё можно юзать HMA,XMS
Ответ отправлен: 10.08.2002, 19:59
Отправитель: Dark_Lord
Отвечает ASMодей
Доброе время суток, DARK_ALISON!
Если файл с данными не больше 64Кб, по пример программы
смотри в приложении.
Если же файл больше 64Кб, то одним выделением памяти
не обойдешся: при кодировании придется следить за
границами сегментов, но принцип работы остается таким же.
Приложение:
Ответ отправлен: 11.08.2002, 11:44
Отправитель: ASMодей
Вопрос № 951 |
Pol'zovasja spravochnikom po assembleru, pytalsja assemblirovat' dannuju programmu(iz spravochnika)
cseg segment
org 100h
begin:
mov ax,0b800h
mov es,ax
mov di,0
mov al,1
mov ah,31
mov cx,2000
Next:
mov es:[di],ax
add di,2
loop Next ;(*)
mov ah,10h
int 16h
int 20h
cseg ends
end begin
Ja ispol'zoval tasm5. Poluchal error na(*),chto
'Near jump or call to different CS'
Chto oznachaet eta oshibka i kak ee ispravit'?
Вопрос отправлен: 10.08.2002, 22:39
Отправитель: bron
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Приветствую Вас, bron!
Вот так работает
Приложение:
Ответ отправлен: 10.08.2002, 23:02
Отправитель: masquer
Отвечает Pablo
Приветствую тебя, bron!
Видно компилятор думает, что это межсегментный прыжок, а такого loopа АФАЙК нету в ассембреле, попробуй так:
Next:
mov es:[di],ax
add di,2
loop short Next ;(*)
Ответ отправлен: 12.08.2002, 12:21
Отправитель: Pablo
Отвечает Portnov
Приветствую Вас, bron!
Поставьте assume cs:cseg,ds:cseg. Почти наверняка проблема в этом.
С уважением, Portnov.
Ответ отправлен: 11.08.2002, 21:53
Отправитель: Portnov
Отвечает LIFO
Приветствую Вас, bron!
Дословно перевожу :
Адресат ближнего перехода или вызова находится в другом кодовом сегменте.
Как исправить:
вставь перед первой командой строку
ASSUME CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
Эта директива 'привязывает' регистры к твоему сегменту CSEG.
Ответ отправлен: 11.08.2002, 14:31
Отправитель: LIFO
Отвечает Dark_Lord
Здравствуйте, bron!
Программы писались под Masm, а в Тасме надо добавить вторую строку,
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
Ответ отправлен: 11.08.2002, 00:06
Отправитель: Dark_Lord
Отвечает Вий
Доброе время суток, bron!
После строки "cseg segment" вставь "assume cs:cseg"...
Ответ отправлен: 11.08.2002, 03:30
Отправитель: Вий
Отвечает Топор
Здравствуйте, bron!
Нет такой команды
mov es:[di],ax
Если ты хочешь по адресу es:di записать значение из ax, тогда делай
mov word ptr es:[di], ax
а если изменить адрес в di, то
mov di, ax
Лови исправленное приложение.
Компилируй с ключом /t:
tasm.exe /t proga.asm,,,
Удачи!
Приложение:
Ответ отправлен: 11.08.2002, 09:57
Отправитель: Топор
Отвечает ASMодей
Приветствую Вас, bron!
После
cseg segment
поставь
assume cs:cseg
Ответ отправлен: 11.08.2002, 11:45
Отправитель: ASMодей
Отвечает Zloy
Доброе время суток, bron!
Читаем хелп: This error occurs if the user attempts to perform a NEAR CALL or JMP to a symbol that's defined in an area where CS is assumed to a different segment.
Из выше сказанного следует, что нужно добавить строчку
assume cs:cseg
Ответ отправлен: 13.08.2002, 17:40
Отправитель: Zloy
Вопрос № 952 |
Уважаемые эксперты, простите за такой тупой вопрос, но какой у меня тип Ж.Д. и как это узнать мой Ж.Д. 8 гектар и будет ли работать моя прога через порты если я испоьзую IDE.
P.S. Я все хочу одному юзверю все стереть на Ж.Д. а у него стоит в Биос Wirus Varning
Вопрос отправлен: 11.08.2002, 12:17
Отправитель: Merlyn Manson
[Следующий вопрос >>] [Список вопросов]
Отвечает Dark_Lord
Приветствую Вас, Merlyn Manson!
Если правильно настроить опредиление винта, то всё будет ОК! Надо обязательно учесть все возможные конфигурации!
Ответ отправлен: 11.08.2002, 20:44
Отправитель: Dark_Lord
Отвечает Portnov
Приветствую Вас, Merlyn Manson!
IDE - это самый обыкновенный из всех стандартных интерфейсов диководов => проще всего работать с диском через порты именно при IDE.
С уважением, Portnov.
Ответ отправлен: 11.08.2002, 21:54
Отправитель: Portnov
Отвечает masquer
Доброе время суток, Merlyn Manson!
Будет, ты же через порты контроллером управляешь. Подробности в вирусах смотреть надо
Ответ отправлен: 11.08.2002, 15:04
Отправитель: masquer
Отвечает Александр
Доброе время суток, Merlyn Manson!
Virus Warning влияет только на boot-sector. Если ты сотрёшь всё остальное, то эффект будет круче.
Ответ отправлен: 14.08.2002, 08:27
Отправитель: Александр
Вопрос № 953 |
Если там есть ф-ции типа __vba... то прилши плз!!!!!
Вопрос отправлен: 11.08.2002, 13:51
Отправитель: Broken Sword (brokensword@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает kvINT
Приветствую Вас, Broken Sword!
В вижуал бейсике в общем-то не шарю. Ввел vba в строку поиска в этом хелпе (VB5) - ответ (на аглицком) - библиотека не зарегестрирована. Но, оказывается, я чуть не лоханулся. В папке с оффисом (а он, думаю, у всех есть) оказывается есть такая же справка (да еще и на русском) - VBAXL8 (Microsoft Office -> Office -> VBAXL8). Правда, там по тому же запросу уже по русски отвечается то же самое... У меня оффис 97, может в 2000 иначе? Поройся в этом хелпе, может найдешь.
Ответ отправлен: 11.08.2002, 15:19
Отправитель: kvINT
Вопрос № 954 |
Chital rukovodstvo po assembleru. Poproboval zapustit' programmu:
cseg segment
org 100h
begin:
mov ax,0b800h
mov es,ax
mov di,0
mov ah,31
mov al,1
mov es:[di],ax
mov ah,10h
int 16h
int 20h
cseg ends
end begin
Eta programma dolzhna vyvodit' pozhizu na ekran no ona nichego ne vyvodit. Pochemu?(assembliroval pri pomoshi MASM611)
Eshe vopros : pochemu v es:di(1 byte) zapisyvaem ax(2 byta)?
Вопрос отправлен: 11.08.2002, 20:34
Отправитель: bron
[Следующий вопрос >>] [Список вопросов]
Отвечает Ayl
Приветствую Вас, bron!
У меня все прекрасно выводится - синяя рожица в левом верхнем углу экрана.
Подозреваю, что все дело в ОС - если у вас WinXP или WinNT/2000, то она может блокировать прямой доступ к видеопамяти...
Соответственно, в этом случае надо программу запускать под чистым DOS'ом.
По поводу записи в память - es:di представляет собой нетипизированный указатель. Сколько байт будет записано в память или прочитано из нее зависит от команды. В данном случае размер определяет регистр ax, указанный в команде, соответственно, записывается 2 байта: al по адресу es:di, ah - по адресу (es:di)+1.
И комментарий по программе. Вариант в приложении экономит 6(!) байт. За счет чего? Поясняю:
(1) - Запись в сегментный регистр es число 0b800h (адрес видеопамяти). В первоначальном варианте это делается с помощью регистра ax, у меня - с помощью стека. Экономия за счет того, что команда пересылки из регистра в с.регистр занимает 2 байта, а команда извлечения из стека - только один.
(2) - Запись в регистр di значения 0. Если это делать напрямую, то будет 3 байта на команду - 1 байт на код операции и 2 байта на само число. Если же использовать xor (подойдет также и sub), то команда займет только 2 байта.
(3) - Установка цвета символа и самого выводимого символа. В исходном варианте это делается 2 командами. Что в сумме дает 4 байта кода. У меня сразу же заносятся оба значения в регистр ax, что занимает только 3 байта.
(4) - Самая круьая оптимизация! :-) Целых 2 байта! Получается за счет того, что команда mov es:[di], ax занимает 3 байта в связи с использованием кода переопределения сегментного регистра (1 байт). Команда же stosw занимает всего 1 байт.
(5) - Здесь ничего не выигрываем, просто использование функции 10h лишено какого-либо смысла в связи с тем, что нам нужно просто организовать задержку. Поэтому вызываем 0-ю функцию и радуемся жизни. :-)
(6) - Завершаем COM-программу с помощью команды ret, а не вызовом 20-го прерывания потому, что при запуске COM-программы ОС помещает в стек число 0. Соответственно, при выполнении команды ret будет осуществлена передача управления по адресу cs:0, но в первых 256 байтах кодового сегмента COM-программы расположен PSP (Program Segment Prefix), в котором первые 2 байта содержат команду int 20h. В результате получаем тоже самое, но на 1 байт меньше.
P.S. Ну не мог удержаться, видя неоптимизированный код! :-)
Приложение:
Ответ отправлен: 11.08.2002, 23:03
Отправитель: Ayl
Отвечает ASMодей
Приветствую Вас, bron!
А под какой ОС ты все это делал? Дело в том, что некоторые
версии Windows (по-моему 2000, XP) запрещают прямой доступ
к видеопамяти, а именно это делается у тебя в программе.
Ответ отправлен: 12.08.2002, 13:25
Отправитель: ASMодей
Отвечает masquer
Здравствуйте, bron!
Долго думал, что такое pozhizu - наиболее вероятное "рожицу".
Это где писать так учат.
Про первую часть вопроса не знаю, про вторую - [di] - это адрес, на который указывает di, кроме того di может 2 байта (слово) в себе разместить
Ответ отправлен: 11.08.2002, 21:59
Отправитель: masquer
Отвечает Portnov
Приветствую Вас, bron!
Запускали под чистым DOS-ом? При запуске досовых прог почти всегда под WinXP, часто под NT/2000, иногда под Win9x появляются проблемы с прямым доступом к видеопамяти. Перезагрузитесь под DOS и запустите прогу еще раз.
Для отображения символа на экране в видеопамять надо записать два байта: символ и его атрибут. А ассемблер всегда понимает mov mem,reg8/16/32 как mov byte/word/dword ptr mem,reg8/16/32 соответственно, т.е. генерирует инструкцию записи стольких байт, сколько есть в регистре.
С уважением, Portnov.
Ответ отправлен: 11.08.2002, 21:54
Отправитель: Portnov
Отвечает Dark_Lord
Приветствую Вас, bron!
К сожалению не понял, что такое "pozhizu", поэтому не могу ответить на первый вопрос, а на счёт второго:
es:di, не один байт, а адрес по нему можно вывести и байт и слово и двойное слово, если Вы знакомы с паскалем или С, то это тоже самое, что Pointer!
Ответ отправлен: 11.08.2002, 20:50
Отправитель: Dark_Lord
Отвечает Топор
Доброе время суток, bron!
Какой такой рожица? Никакой рожицей тут и близко не пахнет.
Какой такой 1 байт? DI - двухбайтный! Я тебе ужо отвечал на это - нет такой команды mov es:[di], ax , есть или mov word ptr es:[di], ax, или mov di, ax. И ваще, белые люди сперва читають большие толстые бумажные книжки, а уж потом в Инете спрахивають, чего непонятно.
Ответ отправлен: 12.08.2002, 09:03
Отправитель: Топор
Отвечает LIFO
Доброе время суток, bron!
Сразу начну со второго вопроса. В ax 2 байта потому, что символ при выводе напрямую в видеобуфер имеет не только длину в 1 байт, но и атрибут ( цвет ) , кот. занимает также 1 байт. Итого 2 байта.
А программа твоя рабочая! Все выводит как надо.
Ответ отправлен: 12.08.2002, 18:55
Отправитель: LIFO
Отвечает Вий
Доброе время суток, bron!
У меня все работает... В верхнем левом углу выводит рожицу... :) У меня TASM второй... Масма у меня нету...
Ответ отправлен: 15.08.2002, 00:48
Отправитель: Вий
Форма отправки вопроса |
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
© 2002 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (40) C / C++ (27) Perl (14) Delphi (18) Pascal (29) Basic / VBA (11) Java / JavaScript (12) PHP (12) MySQL / MSSQL (12) |
Пользователю Windows 95/98/Me (50) Windows NT/2000/XP (34) "Железо" (39) Поиск информации (19) |
Администратору Windows NT/2000/XP (19) Linux / Unix (13) |
Юристу Гражданское право (7) Семейное право (5) Трудовое право (6) КоАП (4) |
Отправить вопрос всем экспертам выбранной рассылки.
© 2002 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||