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

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.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
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)

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




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

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


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

В избранное