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

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


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

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

Выпуск № 776
от 27.10.2004, 23:40

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


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

Евгений
Статус: Доверительный
Общий рейтинг: 107.59
[Подробней >>]
Evils_Interrupt
Статус: Доверительный
Общий рейтинг: 120.27
[Подробней >>]
Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 132.24
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
 
Стас
Статус: Опытный
Общий рейтинг: 122.47
[Подробней >>]
bocha
Статус: Профессиональный
Общий рейтинг: 120.17
[Подробней >>]
DSota
Статус: Доверительный
Общий рейтинг: 124.41
[Подробней >>]
 
Tigran K. Kalaidjian
Статус: Профессиональный
Общий рейтинг: 179.9
URL: Персональная страничка
[Подробней >>]
Lynx
Статус: Начальный
Общий рейтинг: 125.92
[Подробней >>]
Artemy
Статус: Опытный
Общий рейтинг: 108.28
Телефон: 8 905 549 38 66
[Подробней >>]
 
Василевский Александр
Статус: Опытный
Общий рейтинг: 116.58
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 110.82
[Подробней >>]


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

Вопрос № 5903. Hi All Подскажите начинающему, please, чем отлаживать программы для виндус. И может какую-нить доку ... (ответов: 2)
Вопрос № 5904. Уважаемые эксперты! помоготе обьяснить как перехватить INT 09h и создать POPUP прогу если можно приш... (ответов: 2)
Вопрос № 5905. Здраствуйте! Тов. эксперты помогите или объясните как сделать под досом поиск файла на диске (полнос... (ответов: 4)
Вопрос № 5909. Уважаемые эксперты, как организовать вывод на экран содержимое регистра(число) средствами DOS или BI... (ответов: 3)
Вопрос № 5910. SOS!HELP! :@ Здраствуйте уважаемые эксперты! У меня огромная проблема и я на гране срыва!У меня така... (ответов: 4)
Вопрос № 5911. Уважаемые эксперты! Почему при передаче данных по POP3 у меня в блок передаваемых данных местами вст... (ответов: 1)
Вопрос № 5912. Стыдно спрашивать , но как можно записать значение в старшее слово 32 разрядного регистра (EAX)? В п... (ответов: 5)
Вопрос № 5913. У меня такая проблема. По дисциплине Организация ЭВМ и систем досталась курсовая на тему "Защит... (ответов: 1)
Вопрос № 5914. Привет. Помогите с Softice'om. Для запуска нажимаю ctrl+d - зависает, еще раз - переходит(винда) в ... (ответов: 2)
Вопрос № 5915. Как узнать размер файла (открытого или открываемого) в DOS'е?... (ответов: 5)

Вопросов: 10, ответов: 29


 Вопрос № 5903

Hi All
Подскажите начинающему, please, чем отлаживать программы для виндус. И может какую-нить доку попроще и на русском.



Вопрос отправлен: 17.10.2004, 15:41
Отправитель: Maxim (maxyer@mail.ru)

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

Отвечает Евгений

Добрый день, Maxim!
Soft Ice

Ответ отправлен: 17.10.2004, 18:08
Отправитель: Евгений


Отвечает Evils_Interrupt

Доброе время суток, Maxim!
Купи себе SoftICE и книгу Роберта Айрапетяна.

Ответ отправлен: 17.10.2004, 23:25
Отправитель: Evils_Interrupt


 Вопрос № 5904

Уважаемые эксперты! помоготе обьяснить как перехватить INT 09h и создать POPUP прогу если можно пришлите исходник от простой проги



Вопрос отправлен: 17.10.2004, 21:03
Отправитель: Black (hushcrash@land.ru)

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

Отвечает Евгений Иванов

Доброе время суток, Black!
push es ;Сохраним прежний обработчик клавиатуры
mov ax,3509h
int 33
mov wptr [old_int9],bx
mov wptr [old_int9+2],es
pop es
mov ax,2509h
mov dx,ofs int_9entry
int 33
int_9entry: ;============================================================
push ax
in al,96
mov bptr [cs:Port60],al
mov ax,wptr [cs:dPause]
mov wptr [cs:fPause],ax
pop ax
db 234
old_int9 dd -1

* EMan: -=- И легко перо, да на крышу не закинешь. =-=


Ответ отправлен: 18.10.2004, 13:08
Отправитель: Евгений Иванов


Отвечает Evils_Interrupt

Добрый день, Black!
дело в том, что каждое прерываение занимает 4 байта, и распологается таблица векторов в самом начаеле. То есть если адрес в 09h*4h заменить на свой вот те и перехват!

Ответ отправлен: 17.10.2004, 23:23
Отправитель: Evils_Interrupt


 Вопрос № 5905

Здраствуйте!
Тов. эксперты помогите или объясните как сделать под досом поиск файла на диске (полностью, а не только в одной директории), а точнее как сделать запоминание директории в которых уже делался поиск.
И еще вопрос, доп. память выделяется только для exe-фалов, а для com-файла можно выжелить 100к памяти или нет?
Зараниен большое спосибо!



Вопрос отправлен: 18.10.2004, 08:15
Отправитель: Алексей

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

Отвечает Стас

Добрый день, Алексей!
Просто когда перебираешь файлы (FindFirst,FindNext), если это директория, сохраняешь текущий DTA, заходишь в неё, и делаешь новый поиск *.*(FindFirst,FindNext). Когда директория кончится, возвращаешся к сохраненной DTA и продолжаешь(FindNext). Так может быть много раз...
EXE от COM отличаются только способом загрузки, и тем что у COM SS=DS=ES=CS.
Действительно, текущей проге выделяется вся доступная память. Перенеси стек, помни о сегментации (ограничение в 64K) и используй. Также можно выделять EMS и XMS.

Ответ отправлен: 18.10.2004, 12:44
Отправитель: Стас


Отвечает bocha

Здравствуйте, Алексей!
1.Да поможет Вам рекурсия,
в псевдокоде это будет выглядеть примерно следующим образом:
процедура_поиска_файла(на входе имя дирректории)
установить текущим полученый директорий
найти первый файл
если это директорий - вызвать себя
пока дескриптор действителен - находим следующий
если это директорий -вызываем себя
закрываем поиск
можно и без рекурсии, но это несколько сложнее
2.Сколько может скушать дос, столько и выделить можно
mov bx, sp
shr bx, 4
mov ax, ss
add bx, ax
inc bx; теперь в bx - первый доступный сегмент, если конечно память предварительно небыла освобождена
в случае предварительного освобождения памяти Вам помогут следующие строки
mov bx, 1000h;размер выделяемого блока в параграфах
mov ax, 4800h
int 21h
mov es, ax;теперь в es - выделеный семент
не забывайте, что размер выделяемого блока не может превышать 64к, но ни кто не мешает выделить несколько се гментов

Ответ отправлен: 18.10.2004, 15:34
Отправитель: bocha


Отвечает DSota

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

Ответ отправлен: 18.10.2004, 09:07
Отправитель: DSota


Отвечает Евгений Иванов

Доброе время суток, Алексей!
mov ah,4ah
mov bx,(LEN_FILE+LEN_STEK+LEN_dat+277)/16
int 33 ;Оставим себе память,сколько нам необходимо
потом выделяй памяти хоть 600 Кб
* EMan: -=- И легко перо, да на крышу не закинешь. =-=


Ответ отправлен: 18.10.2004, 13:09
Отправитель: Евгений Иванов


 Вопрос № 5909

Уважаемые эксперты, как организовать вывод на экран содержимое регистра(число) средствами DOS или BIOS. Спасибо



Вопрос отправлен: 19.10.2004, 09:07
Отправитель: oleg_s

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

Отвечает Evils_Interrupt

Добрый день, oleg_s!
для начала число надо предствить в виде аски кода!
Далее закинь в массив и заверши символом '$' после выведи на экран с помощью досовской функции 09h
lea dx,string ; адресация к строке относительно ds:dx
mov ah,9h
int 21h
Удачи

Ответ отправлен: 19.10.2004, 09:45
Отправитель: Evils_Interrupt


Отвечает Tigran K. Kalaidjian

Добрый день, oleg_s!
Вывод производится с привлечением прерывания int10h
Подробное описание на русском можно прочитать у Зубкова
глава 4.3.2.
Если у Вас нет Зубкова, пишите на kalaidjian@pochtamt.ru - вышлю конкретную главу.
Техника перевода числа в строку описывалась в рассылке не раз, думаю, эксперты ответят еще раз =)
Варианты (с привлечением средств MS-DOS) изложены в FAQ:
http://kalaidjian.pochtamt.ru/rusfaq.rar
Суть та же, единственное, что блок вывода нужно будет заменить.

Ответ отправлен: 19.10.2004, 21:36
Отправитель: Tigran K. Kalaidjian


Отвечает Lynx

Добрый день, oleg_s!
Смотри архив рассылки. В последних 200 выпусках этот вопрос раз 100 задавался.

Ответ отправлен: 20.10.2004, 11:14
Отправитель: Lynx


 Вопрос № 5910

SOS!HELP! :@
Здраствуйте уважаемые эксперты!
У меня огромная проблема и я на гране срыва!У меня такая проблема,я начал изучать ассемблер пересмотрел много лит-ры и остановился на книге г-на Калашникова О.А. «Ассемблер –это просто»,но все никак не могу написать первую программу в его книге ,да и остальные пробовал тоже не получается!:((((( вначале я установил MASM611 в windows2000?не получилось,затем мне «умные» люди посоветовали что под винду 2000 она работать не будет установи винду98,и попробуй там поработать,после чего мне пришлось установить винд98, попробовал там сделать первую программу,:(((((((,опять не получилось, при запуске программы ,вначале появляется сообщение что мол эта прога работает в режиме эмуляции ДОС,и задает вопрос создать для нее ярлык? яя отвечаю ДА,опять запускаю :(((((,ни фига!показывает что-то типа DOSXNT error или что-то вроде….,
…..Посаветуйте что-нить!а то скоро повешусь!:))))



Вопрос отправлен: 19.10.2004, 11:40
Отправитель: jax (jax_bad@list.ru)

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

Отвечает Artemy

Приветствую Вас, jax!
А что конкретно делает эта программа?
Если она работает с аппаратным таймером
через порты, то под вин98 она работать не будет и
будет работать только в DOS-моде

Ответ отправлен: 19.10.2004, 14:41
Отправитель: Artemy


Отвечает Lynx

Здравствуйте, jax!
Не переживат ты так. ИМХО у 70% новичков ничего первый месяц не получается. Вообще я бы посоветовал тебе под DOS использовать TASM. Если у тебя винда не запускает досовские проги, то перезагрузись в режиме MS-DOS и запусти прогу от туда. :))) А через твои проблеммы прошли почти все, главное набраться терпения. ;)

Ответ отправлен: 20.10.2004, 11:14
Отправитель: Lynx


Отвечает bocha

Добрый день, jax!
Где программа и командная строка? На сколько я знаю никто из экспертов телепатией не страдает.

Ответ отправлен: 20.10.2004, 04:12
Отправитель: bocha


Отвечает Стас

Доброе время суток, jax!
Для того, чтобы понять, что у тебя происходит, нужны текст проги и команды которыми ты её компилируешь.

Ответ отправлен: 20.10.2004, 15:09
Отправитель: Стас


 Вопрос № 5911

Уважаемые эксперты! Почему при передаче данных по POP3 у меня в блок передаваемых данных местами вставляется 3 левых байта 21h,0Dh,0Ah ?



Вопрос отправлен: 20.10.2004, 14:11
Отправитель: Andrey

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

Отвечает Evils_Interrupt

Приветствую Вас, Andrey!
так как символы 0dh,0ah управляющие коды

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


 Вопрос № 5912

Стыдно спрашивать , но как можно записать значение в старшее слово 32 разрядного регистра (EAX)?
В прграмме следует указывать нечто вроде USES 32.
Приведите синтаксис написания.



Вопрос отправлен: 21.10.2004, 00:50
Отправитель: Khanc (Khanc@rambler.ru)

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

Отвечает Evils_Interrupt

Добрый день, Khanc!
на прямую ни как только закинув в ax, а дальше сдвинув влево циклически!

Ответ отправлен: 21.10.2004, 08:30
Отправитель: Evils_Interrupt


Отвечает Василевский Александр

Приветствую Вас, Khanc!
Записать значение только в старшее слово нельзя. Можно воспользоваться следующим трюком:
...
.386 ; разрешаем использовать регистры EAX ...
...
ROR EAX, 16d ; меняем местами старшее и младшее слово
MOV AX, ... ; здесь записываем нужные данные
ROR EAX, 16d ; возвращаем старшее слово на место
...
В результате этого кода данные запишутся в старшее слово регистра EAX, младшее слово останется неизменным.
Можно придумать множество подобных трюков, но принцип остаётся тем же: сохраняем младшее слово, меняем местами младшее и старшее слово, записываем в старшее (а реально, в младшее) слово, опять меняем местами, восстанавливаем младшее слово.


Ответ отправлен: 21.10.2004, 08:59
Отправитель: Василевский Александр


Отвечает Lynx

Доброе время суток, Khanc!
rol eax, 16
mov ax, <значение>
rol eax, 16

Ответ отправлен: 21.10.2004, 12:27
Отправитель: Lynx


Отвечает DSota

Добрый день, Khanc!
На ассемблере просто нужно указать 32-х разрядный тип процессора (386 и выше) и он сразу же "научиться понимать" 32-х разрядные команды. Нужно писать "P386" или ".386" перед инструкциями, которые используют расширенные регистры, например:
P386
mov eax,012345678h
mov ebx,091237890h
А если именно в старшую часть, не трогая младшую, то можно воспользоваться сдвигом:
ror eax,16
mov ax,01234h
rol eax,16


Ответ отправлен: 21.10.2004, 09:38
Отправитель: DSota


Отвечает Евгений Иванов

Добрый день, Khanc!
Пиши в AX, потом сдвигай:
shl eax, 16
mov ax, ***
rol eax, 16
* EMan: -=- И легко перо, да на крышу не закинешь. =-=


Ответ отправлен: 22.10.2004, 01:11
Отправитель: Евгений Иванов


 Вопрос № 5913

У меня такая проблема. По дисциплине Организация ЭВМ и систем досталась курсовая на тему "Защитное низкоуровневое форматирование дискеты", с того дня ваша книга стала просто бесценной, но где можно подробней ознакомится с данной темой, примерами и такими же хорошими пояснениями к ним. Будут ли подобные вопросы освещены в ваших рассылках, если да, то как скоро (время поджимает)


Приложение:


Вопрос отправлен: 21.10.2004, 21:31
Отправитель: Саша

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

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

Здравствуйте, Саша!
Посмотри здесь:
http://progs-maker.narod.ru/info/hack_vir/lcp.rar

Ответ отправлен: 22.10.2004, 09:12
Отправитель: ASMодей


 Вопрос № 5914

Привет.
Помогите с Softice'om. Для запуска нажимаю ctrl+d - зависает, еще раз - переходит(винда) в нормальное состояние. Что делать?


Приложение:


Вопрос отправлен: 23.10.2004, 20:46
Отправитель: bcc

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

Отвечает DSota

Доброе время суток, bcc!
То есть он не зависает, просто символы отладки не туда выводит :)))...
Неправильно установлен видеодрайвер SoftIce. Лучше скачать с их сайта нужный драйвер или пользоваться стандартным VGA драйвером.

Ответ отправлен: 25.10.2004, 10:02
Отправитель: DSota


Отвечает Стас

Приветствую Вас, bcc!
Не виснет он. Просто не отображает свое окно на экране.
Может неправильние настройки на GeForce Fx 5200.
Попробуй в оконном режиме.


Ответ отправлен: 23.10.2004, 21:44
Отправитель: Стас


 Вопрос № 5915

Как узнать размер файла (открытого или открываемого) в DOS'е?



Вопрос отправлен: 23.10.2004, 23:39
Отправитель: Serega

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

Отвечает DSota

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

Приложение:

Ответ отправлен: 25.10.2004, 09:59
Отправитель: DSota


Отвечает Стас

Здравствуйте, Serega!
В DOS есть такой способ открытия файла (больно сильно устаревший, но всеже) через FCB (ah=0fh,int21h). Так вот в этом самом FCB сразу после открытия файла, по смещению +10h лежит Dword размер файла.
Если говорить о handle ориентированных функциях:
в BX - номер файла, в DX,CX кладешь 0, в AX - 4202h и вызываешь int 21h. Результат в DX:AX размер файла. Правда и указатель чтения/записи указывает на конец файла...

Ответ отправлен: 24.10.2004, 21:30
Отправитель: Стас


Отвечает Евгений Иванов

Здравствуйте, Serega!
42h функция 21h-ого прерывания
* EMan: -=- И легко перо, да на крышу не закинешь. =-=


Ответ отправлен: 23.10.2004, 23:46
Отправитель: Евгений Иванов


Отвечает Василевский Александр

Добрый день, Serega!
Функции, которая возвращает размер открытого файла в DOS'е нет. Можно использовать следующий способ: переместить указатель в файле на конец файла при помощи функции 4202h (int 21h). Функция вернёт текущую позицию от начала файла:
MOV AH, 4202h ; функция перемещения указателя
MOV BX, Handle ; дескриптор открытого файла
XOR CX, CX ; новая позиция (от конца файла)
XOR DX, DX ; (самый конец файла)
INT 21h ; результат (если CF=0) -
; новая позиция в файле (от его
; начала - его размер)


Ответ отправлен: 25.10.2004, 12:25
Отправитель: Василевский Александр


Отвечает Evils_Interrupt

Доброе время суток, Serega!
Есть функция для работы с файловым указателем. Так вот поставь его в конец. Это действие в Роберте Джордейне написано, когда то я его в сети качал, хорошая штука!

Ответ отправлен: 24.10.2004, 10:08
Отправитель: Evils_Interrupt



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

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (25)
C / C++ (16)
Perl (8)
Builder / Delphi (18)
Pascal (20)
Basic / VBA (8)
Java / JavaScript (7)
PHP (19)
Криптография (8)
WinAPI (17)
Радиоэлектроника (13)
Пользователю
Windows 95/98/Me (40)
Windows NT/2000/XP (60)
"Железо" (37)
Поиск информации (21)
Администратору
Windows NT/2000/XP (37)
Linux / Unix (14)
Юристу
Гражданское право (7)
Семейное право (4)
Трудовое право (6)
КоАП (5)

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





http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное